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