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 37define i32 @main() { 38entry: 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 44if.then: ; preds = %entry 45 br label %L 46 47L: ; preds = %if.then4, %if.then 48 %e.0 = phi i32 [ 0, %if.then ], [ %e.1, %if.then4 ] 49 br label %if.end 50 51if.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 67if.then4: ; preds = %if.end 68 br label %L 69 70if.end5: ; preds = %if.end 71 ret i32 0 72} 73