1; RUN: opt -gvn -S < %s | FileCheck %s 2 3define i32 @f1(i32 %x) { 4 ; CHECK-LABEL: define i32 @f1( 5bb0: 6 %cmp = icmp eq i32 %x, 0 7 br i1 %cmp, label %bb2, label %bb1 8bb1: 9 br label %bb2 10bb2: 11 %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] 12 %foo = add i32 %cond, %x 13 ret i32 %foo 14 ; CHECK: bb2: 15 ; CHECK: ret i32 %x 16} 17 18define i32 @f2(i32 %x) { 19 ; CHECK-LABEL: define i32 @f2( 20bb0: 21 %cmp = icmp ne i32 %x, 0 22 br i1 %cmp, label %bb1, label %bb2 23bb1: 24 br label %bb2 25bb2: 26 %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] 27 %foo = add i32 %cond, %x 28 ret i32 %foo 29 ; CHECK: bb2: 30 ; CHECK: ret i32 %x 31} 32 33define i32 @f3(i32 %x) { 34 ; CHECK-LABEL: define i32 @f3( 35bb0: 36 switch i32 %x, label %bb1 [ i32 0, label %bb2] 37bb1: 38 br label %bb2 39bb2: 40 %cond = phi i32 [ %x, %bb0 ], [ 0, %bb1 ] 41 %foo = add i32 %cond, %x 42 ret i32 %foo 43 ; CHECK: bb2: 44 ; CHECK: ret i32 %x 45} 46 47declare void @g(i1) 48define void @f4(i8 * %x) { 49; CHECK-LABEL: define void @f4( 50bb0: 51 %y = icmp eq i8* null, %x 52 br i1 %y, label %bb2, label %bb1 53bb1: 54 br label %bb2 55bb2: 56 %zed = icmp eq i8* null, %x 57 call void @g(i1 %zed) 58; CHECK: call void @g(i1 %y) 59 ret void 60} 61