Skip to content

Commit d119c38

Browse files
author
Serguei Katkov
committed
[CGP] Additional tests for removing operand of assume. NFC.
1 parent f4b58f8 commit d119c38

File tree

1 file changed

+72
-2
lines changed

1 file changed

+72
-2
lines changed

llvm/test/Transforms/CodeGenPrepare/X86/delete-assume-dead-code.ll

Lines changed: 72 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ header:
4949
%iv.inc = add i32 %iv, 1
5050
%iv2.inc = add i32 %iv2, 1
5151
%cmp = icmp eq i32 %iv, %N
52-
%cmp2 = icmp slt i32 %iv2, %N
52+
%cmp2 = icmp sle i32 %iv2, %N
5353
call void @llvm.assume(i1 %cmp2)
5454
br i1 %cmp, label %exit, label %header
5555

@@ -80,13 +80,83 @@ header:
8080
%iv.inc = add i32 %iv, 1
8181
%iv2.inc = add i32 %iv2, 1
8282
%cmp = icmp eq i32 %iv, %N
83-
%cmp2 = icmp slt i32 %iv2.inc, %N
83+
%cmp2 = icmp sle i32 %iv2.inc, %N
8484
call void @llvm.assume(i1 %cmp2)
8585
br i1 %cmp, label %exit, label %header
8686

8787
exit:
8888
ret i32 %iv
8989
}
9090

91+
; Two assumes case.
92+
define i32 @test4(i32 %N) nounwind {
93+
; CHECK-LABEL: @test4(
94+
; CHECK-NEXT: entry:
95+
; CHECK-NEXT: br label [[HEADER:%.*]]
96+
; CHECK: header:
97+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_INC:%.*]], [[HEADER]] ]
98+
; CHECK-NEXT: [[IV2:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[IV2_INC:%.*]], [[HEADER]] ]
99+
; CHECK-NEXT: [[IV_INC]] = add i32 [[IV]], 1
100+
; CHECK-NEXT: [[IV2_INC]] = add i32 [[IV2]], 1
101+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[IV]], [[N:%.*]]
102+
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[HEADER]]
103+
; CHECK: exit:
104+
; CHECK-NEXT: ret i32 [[IV]]
105+
;
106+
entry:
107+
br label %header
108+
109+
header:
110+
%iv = phi i32 [0, %entry], [%iv.inc, %header]
111+
%iv2 = phi i32 [0, %entry], [%iv2.inc, %header]
112+
%iv.inc = add i32 %iv, 1
113+
%iv2.inc = add i32 %iv2, 1
114+
%cmp = icmp eq i32 %iv, %N
115+
%cmp2 = icmp sle i32 %iv2.inc, %N
116+
call void @llvm.assume(i1 %cmp2)
117+
%cmp3 = icmp sge i32 %iv2.inc, 0
118+
call void @llvm.assume(i1 %cmp3)
119+
br i1 %cmp, label %exit, label %header
120+
121+
exit:
122+
ret i32 %iv
123+
}
124+
125+
; phi is used in assume and in compare.
126+
define i32 @test5(i32 %N, i32 %M) nounwind {
127+
; CHECK-LABEL: @test5(
128+
; CHECK-NEXT: entry:
129+
; CHECK-NEXT: br label [[HEADER:%.*]]
130+
; CHECK: header:
131+
; CHECK-NEXT: [[IV:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_INC:%.*]], [[HEADER]] ]
132+
; CHECK-NEXT: [[IV2:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[IV2_INC:%.*]], [[HEADER]] ]
133+
; CHECK-NEXT: [[IV_INC]] = add i32 [[IV]], 1
134+
; CHECK-NEXT: [[IV2_INC]] = add i32 [[IV2]], 1
135+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[IV]], [[N:%.*]]
136+
; CHECK-NEXT: [[CMP3:%.*]] = icmp sge i32 [[IV2_INC]], [[M:%.*]]
137+
; CHECK-NEXT: [[CMP4:%.*]] = and i1 [[CMP]], [[CMP3]]
138+
; CHECK-NEXT: br i1 [[CMP4]], label [[EXIT:%.*]], label [[HEADER]]
139+
; CHECK: exit:
140+
; CHECK-NEXT: ret i32 [[IV]]
141+
;
142+
entry:
143+
br label %header
144+
145+
header:
146+
%iv = phi i32 [0, %entry], [%iv.inc, %header]
147+
%iv2 = phi i32 [0, %entry], [%iv2.inc, %header]
148+
%iv.inc = add i32 %iv, 1
149+
%iv2.inc = add i32 %iv2, 1
150+
%cmp = icmp eq i32 %iv, %N
151+
%cmp2 = icmp sle i32 %iv2.inc, %N
152+
call void @llvm.assume(i1 %cmp2)
153+
%cmp3 = icmp sge i32 %iv2.inc, %M
154+
%cmp4 = and i1 %cmp, %cmp3
155+
br i1 %cmp4, label %exit, label %header
156+
157+
exit:
158+
ret i32 %iv
159+
}
160+
91161
declare i64 @foo(ptr) nounwind readonly willreturn
92162
declare void @llvm.assume(i1 noundef) nounwind willreturn

0 commit comments

Comments
 (0)