1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @test(i32* %P, i32* %Q, i1 %A, i1 %B) { 4*9880d681SAndroid Build Coastguard Worker; CHECK: test 5*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 6*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: br i1 7*9880d681SAndroid Build Coastguard Worker; CHECK: ret 8*9880d681SAndroid Build Coastguard Worker; CHECK: ret 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker br i1 %A, label %a, label %b 12*9880d681SAndroid Build Coastguard Workera: 13*9880d681SAndroid Build Coastguard Worker br i1 %B, label %b, label %c 14*9880d681SAndroid Build Coastguard Workerb: 15*9880d681SAndroid Build Coastguard Worker store i32 123, i32* %P 16*9880d681SAndroid Build Coastguard Worker ret void 17*9880d681SAndroid Build Coastguard Workerc: 18*9880d681SAndroid Build Coastguard Worker ret void 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; rdar://10554090 22*9880d681SAndroid Build Coastguard Workerdefine zeroext i1 @test2(i64 %i0, i64 %i1) nounwind uwtable readonly ssp { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker; CHECK: test2 25*9880d681SAndroid Build Coastguard Worker; CHECK: br i1 26*9880d681SAndroid Build Coastguard Worker %and.i.i = and i64 %i0, 281474976710655 27*9880d681SAndroid Build Coastguard Worker %and.i11.i = and i64 %i1, 281474976710655 28*9880d681SAndroid Build Coastguard Worker %or.cond = icmp eq i64 %and.i.i, %and.i11.i 29*9880d681SAndroid Build Coastguard Worker br i1 %or.cond, label %c, label %a 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workera: 32*9880d681SAndroid Build Coastguard Worker; CHECK: br 33*9880d681SAndroid Build Coastguard Worker %shr.i4.i = lshr i64 %i0, 48 34*9880d681SAndroid Build Coastguard Worker %and.i5.i = and i64 %shr.i4.i, 32767 35*9880d681SAndroid Build Coastguard Worker %shr.i.i = lshr i64 %i1, 48 36*9880d681SAndroid Build Coastguard Worker %and.i2.i = and i64 %shr.i.i, 32767 37*9880d681SAndroid Build Coastguard Worker %cmp9.i = icmp ult i64 %and.i5.i, %and.i2.i 38*9880d681SAndroid Build Coastguard Worker br i1 %cmp9.i, label %c, label %b 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerb: 41*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: br 42*9880d681SAndroid Build Coastguard Worker %shr.i13.i9 = lshr i64 %i1, 48 43*9880d681SAndroid Build Coastguard Worker %and.i14.i10 = and i64 %shr.i13.i9, 32767 44*9880d681SAndroid Build Coastguard Worker %shr.i.i11 = lshr i64 %i0, 48 45*9880d681SAndroid Build Coastguard Worker %and.i11.i12 = and i64 %shr.i.i11, 32767 46*9880d681SAndroid Build Coastguard Worker %phitmp = icmp uge i64 %and.i14.i10, %and.i11.i12 47*9880d681SAndroid Build Coastguard Worker br label %c 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerc: 50*9880d681SAndroid Build Coastguard Worker %o2 = phi i1 [ false, %a ], [ %phitmp, %b ], [ false, %entry ] 51*9880d681SAndroid Build Coastguard Worker ret i1 %o2 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Worker; PR13180 55*9880d681SAndroid Build Coastguard Workerdefine void @pr13180(i8 %p) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker %tobool = icmp eq i8 %p, 0 58*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %cond.false, label %cond.true 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workercond.true: ; preds = %entry 61*9880d681SAndroid Build Coastguard Worker br label %cond.end 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workercond.false: ; preds = %entry 64*9880d681SAndroid Build Coastguard Worker %phitmp = icmp eq i8 %p, 0 65*9880d681SAndroid Build Coastguard Worker br label %cond.end 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Workercond.end: ; preds = %cond.false, %cond.true 68*9880d681SAndroid Build Coastguard Worker %cond = phi i1 [ undef, %cond.true ], [ %phitmp, %cond.false ] 69*9880d681SAndroid Build Coastguard Worker unreachable 70*9880d681SAndroid Build Coastguard Worker} 71