Home | History | Annotate | Download | only in IPConstantProp
      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 }
     47