Home | History | Annotate | Download | only in SimplifyCFG
      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