[LCSSA] Handle PHI insertion in disjoint loops
[oota-llvm.git] / test / Transforms / IPConstantProp / return-constants.ll
1 ; RUN: opt < %s -ipconstprop -S > %t
2 ;; Check that the 21 constants got propagated properly
3 ; RUN: cat %t | grep "%M = add i32 21, 21"
4 ;; Check that the second return values didn't get propagated
5 ; RUN: cat %t | grep "%N = add i32 %B, %D"
6
7 %0 = type { i32, i32 }
8
9 define internal %0 @foo(i1 %Q) {
10   br i1 %Q, label %T, label %F
11
12 T:                                                ; preds = %0
13   %mrv = insertvalue %0 undef, i32 21, 0
14   %mrv1 = insertvalue %0 %mrv, i32 22, 1
15   ret %0 %mrv1
16
17 F:                                                ; preds = %0
18   %mrv2 = insertvalue %0 undef, i32 21, 0
19   %mrv3 = insertvalue %0 %mrv2, i32 23, 1
20   ret %0 %mrv3
21 }
22
23 define internal %0 @bar(i1 %Q) {
24   %A = insertvalue %0 undef, i32 21, 0
25   br i1 %Q, label %T, label %F
26
27 T:                                                ; preds = %0
28   %B = insertvalue %0 %A, i32 22, 1
29   ret %0 %B
30
31 F:                                                ; preds = %0
32   %C = insertvalue %0 %A, i32 23, 1
33   ret %0 %C
34 }
35
36 define %0 @caller(i1 %Q) {
37   %X = call %0 @foo(i1 %Q)
38   %A = extractvalue %0 %X, 0
39   %B = extractvalue %0 %X, 1
40   %Y = call %0 @bar(i1 %Q)
41   %C = extractvalue %0 %Y, 0
42   %D = extractvalue %0 %Y, 1
43   %M = add i32 %A, %C
44   %N = add i32 %B, %D
45   ret %0 %X
46 }