Skip to content

Commit 3583d40

Browse files
authored
[NFC][NewGVN] Update assume_dominating_icmp.ll (#66711)
1 parent 1328a85 commit 3583d40

File tree

1 file changed

+55
-46
lines changed

1 file changed

+55
-46
lines changed

llvm/test/Transforms/NewGVN/assume_dominating_icmp.ll

Lines changed: 55 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,61 +4,70 @@
44
@c = global i32 0, align 4
55

66
; Function Attrs: nounwind optsize uwtable
7-
define dso_local i32 @main(i1 %cond, i32 %0, i32 %1) {
8-
; CHECK-LABEL: define dso_local i32 @main(
9-
; CHECK-SAME: i1 [[COND:%.*]], i32 [[TMP0:%.*]], i32 [[TMP1:%.*]]) {
7+
define i32 @main(i1 %cond1, i32 %arg0, i32 %arg1) {
8+
; CHECK-LABEL: define i32 @main(
9+
; CHECK-SAME: i1 [[COND1:%.*]], i32 [[ARG0:%.*]], i32 [[ARG1:%.*]]) {
1010
; CHECK-NEXT: entry:
11-
; CHECK-NEXT: br i1 [[COND]], label [[IF_THEN:%.*]], label [[IF_END6:%.*]]
12-
; CHECK: if.then:
13-
; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[TMP0]], 1
14-
; CHECK-NEXT: [[TOBOOL1_NOT:%.*]] = icmp eq i32 [[TMP1]], 0
15-
; CHECK-NEXT: br i1 [[TOBOOL1_NOT]], label [[IF_END6]], label [[IF_THEN2:%.*]]
16-
; CHECK: if.then2:
17-
; CHECK-NEXT: [[TOBOOL3_NOT:%.*]] = icmp ne i32 [[XOR]], 0
18-
; CHECK-NEXT: tail call void @llvm.assume(i1 [[TOBOOL3_NOT]])
19-
; CHECK-NEXT: br label [[IF_END6]]
20-
; CHECK: if.end6:
21-
; CHECK-NEXT: [[F_0:%.*]] = phi i32 [ undef, [[ENTRY:%.*]] ], [ [[XOR]], [[IF_THEN]] ], [ [[XOR]], [[IF_THEN2]] ]
22-
; CHECK-NEXT: [[NOT:%.*]] = xor i32 [[F_0]], -1
23-
; CHECK-NEXT: [[TMP2:%.*]] = load i32, ptr @c, align 4
24-
; CHECK-NEXT: [[OR:%.*]] = or i32 [[TMP2]], [[NOT]]
25-
; CHECK-NEXT: [[TOBOOL7_NOT:%.*]] = icmp eq i32 [[OR]], 0
26-
; CHECK-NEXT: [[TOBOOL9_NOT:%.*]] = icmp eq i32 [[F_0]], 0
27-
; CHECK-NEXT: [[OR_COND:%.*]] = or i1 [[TOBOOL7_NOT]], [[TOBOOL9_NOT]]
28-
; CHECK-NEXT: br i1 [[OR_COND]], label [[IF_END10:%.*]], label [[WHILE_COND_PREHEADER:%.*]]
29-
; CHECK: while.cond.preheader:
30-
; CHECK-NEXT: ret i32 1
31-
; CHECK: if.end10:
11+
; CHECK-NEXT: br i1 [[COND1]], label [[BB1:%.*]], label [[BB3:%.*]]
12+
; CHECK: bb1:
13+
; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[ARG0]], 1
14+
; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[ARG1]], 0
15+
; CHECK-NEXT: br i1 [[COND2]], label [[BB3]], label [[BB2:%.*]]
16+
; CHECK: bb2:
17+
; CHECK-NEXT: [[COND3:%.*]] = icmp ne i32 [[XOR1]], 0
18+
; CHECK-NEXT: tail call void @llvm.assume(i1 [[COND3]])
19+
; CHECK-NEXT: br label [[BB3]]
20+
; CHECK: bb3:
21+
; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ undef, [[ENTRY:%.*]] ], [ [[XOR1]], [[BB1]] ], [ [[XOR1]], [[BB2]] ]
22+
; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[PHI]], -1
23+
; CHECK-NEXT: [[LD:%.*]] = load i32, ptr @c, align 4
24+
; CHECK-NEXT: [[OR:%.*]] = or i32 [[LD]], [[XOR2]]
25+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[OR]], 0
26+
; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[PHI]], 0
27+
; CHECK-NEXT: [[COND4:%.*]] = or i1 [[CMP1]], [[CMP2]]
28+
; CHECK-NEXT: br i1 [[COND4]], label [[EXIT1:%.*]], label [[EXIT2:%.*]]
29+
; CHECK: exit1:
3230
; CHECK-NEXT: ret i32 0
31+
; CHECK: exit2:
32+
; CHECK-NEXT: ret i32 1
3333
;
3434
entry:
35-
br i1 %cond, label %if.then, label %if.end6
36-
37-
if.then: ; preds = %entry
38-
%xor = xor i32 %0, 1
39-
%tobool1.not = icmp eq i32 %1, 0
40-
br i1 %tobool1.not, label %if.end6, label %if.then2
35+
; entry
36+
; / |
37+
; bb1 |
38+
; / | |
39+
; bb2 | |
40+
; \| |
41+
; bb3
42+
; / \
43+
; exit1 exit2
44+
br i1 %cond1, label %bb1, label %bb3
4145

42-
if.then2: ; preds = %if.then
43-
%tobool3.not = icmp ne i32 %xor, 0
44-
tail call void @llvm.assume(i1 %tobool3.not)
45-
br label %if.end6
46+
bb1: ; preds = %entry
47+
%xor1 = xor i32 %arg0, 1
48+
%cond2 = icmp eq i32 %arg1, 0
49+
br i1 %cond2, label %bb3, label %bb2
4650

47-
if.end6: ; preds = %if.then2, %if.then, %entry
48-
%f.0 = phi i32 [ undef, %entry ], [ %xor, %if.then ], [ %xor, %if.then2 ]
49-
%not = xor i32 %f.0, -1
50-
%2 = load i32, ptr @c, align 4
51-
%or = or i32 %2, %not
52-
%tobool7.not = icmp eq i32 %or, 0
53-
%tobool9.not = icmp eq i32 %f.0, 0
54-
%or.cond = or i1 %tobool7.not, %tobool9.not
55-
br i1 %or.cond, label %if.end10, label %while.cond.preheader
51+
bb2: ; preds = %bb1
52+
%cond3 = icmp ne i32 %xor1, 0
53+
tail call void @llvm.assume(i1 %cond3)
54+
br label %bb3
5655

57-
while.cond.preheader: ; preds = %if.end6
58-
ret i32 1
56+
bb3: ; preds = %bb2, %bb1, %entry
57+
%phi = phi i32 [ undef, %entry ], [ %xor1, %bb1 ], [ %xor1, %bb2 ]
58+
%xor2 = xor i32 %phi, -1
59+
%ld = load i32, ptr @c, align 4
60+
%or = or i32 %ld, %xor2
61+
%cmp1 = icmp eq i32 %or, 0
62+
%cmp2 = icmp eq i32 %phi, 0
63+
%cond4 = or i1 %cmp1, %cmp2
64+
br i1 %cond4, label %exit1, label %exit2
5965

60-
if.end10: ; preds = %if.end6
66+
exit1: ; preds = %bb3
6167
ret i32 0
68+
69+
exit2: ; preds = %bb3
70+
ret i32 1
6271
}
6372

6473
declare void @llvm.assume(i1 noundef)

0 commit comments

Comments
 (0)