Home | History | Annotate | Download | only in NewGVN
      1 ; RUN: opt -S -newgvn %s | FileCheck %s
      2 
      3 ; CHECK: define i32 @main() {
      4 ; CHECK-NEXT: entry:
      5 ; CHECK-NEXT:   %tmp = load i32, i32* @d, align 4
      6 ; CHECK-NEXT:   %tmp1 = load i32, i32* @c, align 4
      7 ; CHECK-NEXT:   %tobool = icmp eq i32 %tmp1, -1
      8 ; CHECK-NEXT:   br i1 %tobool, label %if.end, label %if.then
      9 ; CHECK: if.then:
     10 ; CHECK-NEXT:   br label %L
     11 ; CHECK: L:
     12 ; CHECK-NEXT:   %e.0 = phi i32 [ 0, %if.then ], [ %e.1, %if.then4 ]
     13 ; CHECK-NEXT:   br label %if.end
     14 ; CHECK: if.end:
     15 ; CHECK-NEXT:   %e.1 = phi i32 [ %e.0, %L ], [ %tmp, %entry ]
     16 ; CHECK-NEXT:   store i32 %e.1, i32* @a, align 4
     17 ; CHECK-NEXT:   %tmp2 = load i32, i32* @b, align 4
     18 ; CHECK-NEXT:   store i32 0, i32* @b, align 4
     19 ; CHECK-NEXT:   %sext = shl i32 %tmp2, 16
     20 ; CHECK-NEXT:   %conv1 = ashr exact i32 %sext, 16
     21 ; CHECK-NEXT:   %add = add nsw i32 %conv1, %tmp1
     22 ; CHECK-NEXT:   %add2 = add nsw i32 %add, %e.1
     23 ; CHECK-NEXT:   store i32 %add2, i32* @a, align 4
     24 ; CHECK-NEXT:   %tobool3 = icmp eq i32 %add2, 0
     25 ; CHECK-NEXT:   br i1 %tobool3, label %if.end5, label %if.then4
     26 ; CHECK: if.then4:
     27 ; CHECK-NEXT:   br label %L
     28 ; CHECK: if.end5:
     29 ; CHECK-NEXT:   ret i32 0
     30 ; CHECK-NEXT: }
     31 
     32 @d = global i32 1, align 4
     33 @c = common global i32 0, align 4
     34 @a = common global i32 0, align 4
     35 @b = common global i32 0, align 4
     36 
     37 define i32 @main() {
     38 entry:
     39   %tmp = load i32, i32* @d, align 4
     40   %tmp1 = load i32, i32* @c, align 4
     41   %tobool = icmp eq i32 %tmp1, -1
     42   br i1 %tobool, label %if.end, label %if.then
     43 
     44 if.then:                                          ; preds = %entry
     45   br label %L
     46 
     47 L:                                                ; preds = %if.then4, %if.then
     48   %e.0 = phi i32 [ 0, %if.then ], [ %e.1, %if.then4 ]
     49   br label %if.end
     50 
     51 if.end:                                           ; preds = %L, %entry
     52   %e.1 = phi i32 [ %e.0, %L ], [ %tmp, %entry ]
     53   store i32 %e.1, i32* @a, align 4
     54   %tmp2 = load i32, i32* @b, align 4
     55   store i32 0, i32* @b, align 4
     56   %sext = shl i32 %tmp2, 16
     57   %conv1 = ashr exact i32 %sext, 16
     58   %tmp3 = load i32, i32* @c, align 4
     59   %add = add nsw i32 %conv1, %tmp3
     60   %tmp4 = load i32, i32* @a, align 4
     61   %and = and i32 %tmp4, %e.1
     62   %add2 = add nsw i32 %add, %and
     63   store i32 %add2, i32* @a, align 4
     64   %tobool3 = icmp eq i32 %add2, 0
     65   br i1 %tobool3, label %if.end5, label %if.then4
     66 
     67 if.then4:                                         ; preds = %if.end
     68   br label %L
     69 
     70 if.end5:                                          ; preds = %if.end
     71   ret i32 0
     72 }
     73