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