1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker;CHECK: @foo 4*9880d681SAndroid Build Coastguard Worker;CHECK: and i32 %c1, %k 5*9880d681SAndroid Build Coastguard Worker;CHECK: icmp eq i32 6*9880d681SAndroid Build Coastguard Worker;CHECK: and i32 %c2, %k 7*9880d681SAndroid Build Coastguard Worker;CHECK: icmp eq i32 8*9880d681SAndroid Build Coastguard Worker;CHECK: or i1 9*9880d681SAndroid Build Coastguard Worker;CHECK: ret 10*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32 %k, i32 %c1, i32 %c2) { 11*9880d681SAndroid Build Coastguard Worker %1 = and i32 %c1, %k 12*9880d681SAndroid Build Coastguard Worker %2 = icmp eq i32 %1, 0 13*9880d681SAndroid Build Coastguard Worker br i1 %2, label %8, label %3 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; <label>:3 ; preds = %0 16*9880d681SAndroid Build Coastguard Worker %4 = and i32 %c2, %k 17*9880d681SAndroid Build Coastguard Worker %5 = icmp eq i32 %4, 0 18*9880d681SAndroid Build Coastguard Worker br i1 %5, label %8, label %6 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; <label>:6 ; preds = %3 21*9880d681SAndroid Build Coastguard Worker %7 = tail call i32 (...) @bar() nounwind 22*9880d681SAndroid Build Coastguard Worker br label %8 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; <label>:8 ; preds = %3, %0, %6 25*9880d681SAndroid Build Coastguard Worker ret i32 undef 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker;CHECK: @conduse 29*9880d681SAndroid Build Coastguard Worker;CHECK: shl i32 1, %c1 30*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: shl i32 1, %c2 31*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: and i32 32*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: icmp eq i32 33*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: and i32 34*9880d681SAndroid Build Coastguard Worker;CHECK-NEXT: icmp eq i32 35*9880d681SAndroid Build Coastguard Worker;CHECK: ret 36*9880d681SAndroid Build Coastguard Workerdefine i32 @conduse(i32 %k, i32 %c1, i32 %c2) #0 { 37*9880d681SAndroid Build Coastguard Workerbb: 38*9880d681SAndroid Build Coastguard Worker %tmp = shl i32 1, %c1 39*9880d681SAndroid Build Coastguard Worker %tmp4 = shl i32 1, %c2 40*9880d681SAndroid Build Coastguard Worker %tmp1 = and i32 %tmp, %k 41*9880d681SAndroid Build Coastguard Worker %tmp2 = icmp eq i32 %tmp1, 0 42*9880d681SAndroid Build Coastguard Worker br i1 %tmp2, label %bb9, label %bb3 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerbb3: ; preds = %bb 45*9880d681SAndroid Build Coastguard Worker %tmp5 = and i32 %tmp4, %k 46*9880d681SAndroid Build Coastguard Worker %tmp6 = icmp eq i32 %tmp5, 0 47*9880d681SAndroid Build Coastguard Worker br i1 %tmp6, label %bb9, label %bb7 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Workerbb7: ; preds = %bb3 50*9880d681SAndroid Build Coastguard Worker %tmp8 = tail call i32 (...) @bar() #1 51*9880d681SAndroid Build Coastguard Worker br label %bb9 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerbb9: ; preds = %bb7, %bb3, %bb 54*9880d681SAndroid Build Coastguard Worker ret i32 undef 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Workerdeclare i32 @bar(...) 58