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 10 define 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 36 define i32 @conduse(i32 %k, i32 %c1, i32 %c2) #0 { 37 bb: 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 44 bb3: ; preds = %bb 45 %tmp5 = and i32 %tmp4, %k 46 %tmp6 = icmp eq i32 %tmp5, 0 47 br i1 %tmp6, label %bb9, label %bb7 48 49 bb7: ; preds = %bb3 50 %tmp8 = tail call i32 (...) @bar() #1 51 br label %bb9 52 53 bb9: ; preds = %bb7, %bb3, %bb 54 ret i32 undef 55 } 56 57 declare i32 @bar(...) 58