Skip to content

Commit a7a8e23

Browse files
committed
[InstCombine] Add more vscale icmp tests (NFC)
In particular cover cases where vscale_range entries are larger than the vscale bitwidth.
1 parent fbf719b commit a7a8e23

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-vscale.ll

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,79 @@ define i1 @vscale_ugt_min() vscale_range(5,10) {
126126
ret i1 %res
127127
}
128128

129+
define i1 @vscale_uge_no_max() vscale_range(5) {
130+
; CHECK-LABEL: @vscale_uge_no_max(
131+
; CHECK-NEXT: ret i1 true
132+
;
133+
%vscale = call i8 @llvm.vscale.i8()
134+
%res = icmp uge i8 %vscale, 5
135+
ret i1 %res
136+
}
137+
138+
define i1 @vscale_ugt_no_max() vscale_range(5) {
139+
; CHECK-LABEL: @vscale_ugt_no_max(
140+
; CHECK-NEXT: ret i1 false
141+
;
142+
%vscale = call i8 @llvm.vscale.i8()
143+
%res = icmp ugt i8 %vscale, 5
144+
ret i1 %res
145+
}
146+
147+
define i1 @vscale_uge_max_overflow() vscale_range(5,256) {
148+
; CHECK-LABEL: @vscale_uge_max_overflow(
149+
; CHECK-NEXT: [[VSCALE:%.*]] = call i8 @llvm.vscale.i8()
150+
; CHECK-NEXT: [[RES:%.*]] = icmp ugt i8 [[VSCALE]], 4
151+
; CHECK-NEXT: ret i1 [[RES]]
152+
;
153+
%vscale = call i8 @llvm.vscale.i8()
154+
%res = icmp uge i8 %vscale, 5
155+
ret i1 %res
156+
}
157+
158+
define i1 @vscale_ugt_max_overflow() vscale_range(5,256) {
159+
; CHECK-LABEL: @vscale_ugt_max_overflow(
160+
; CHECK-NEXT: [[VSCALE:%.*]] = call i8 @llvm.vscale.i8()
161+
; CHECK-NEXT: [[RES:%.*]] = icmp ugt i8 [[VSCALE]], 5
162+
; CHECK-NEXT: ret i1 [[RES]]
163+
;
164+
%vscale = call i8 @llvm.vscale.i8()
165+
%res = icmp ugt i8 %vscale, 5
166+
ret i1 %res
167+
}
168+
169+
define i1 @vscale_eq_min_overflow() vscale_range(256,300) {
170+
; CHECK-LABEL: @vscale_eq_min_overflow(
171+
; CHECK-NEXT: [[VSCALE:%.*]] = call i8 @llvm.vscale.i8()
172+
; CHECK-NEXT: [[RES:%.*]] = icmp eq i8 [[VSCALE]], 42
173+
; CHECK-NEXT: ret i1 [[RES]]
174+
;
175+
%vscale = call i8 @llvm.vscale.i8()
176+
%res = icmp eq i8 %vscale, 42
177+
ret i1 %res
178+
}
179+
180+
define i1 @vscale_ult_min_overflow() vscale_range(256,300) {
181+
; CHECK-LABEL: @vscale_ult_min_overflow(
182+
; CHECK-NEXT: [[VSCALE:%.*]] = call i8 @llvm.vscale.i8()
183+
; CHECK-NEXT: [[RES:%.*]] = icmp ult i8 [[VSCALE]], 42
184+
; CHECK-NEXT: ret i1 [[RES]]
185+
;
186+
%vscale = call i8 @llvm.vscale.i8()
187+
%res = icmp ult i8 %vscale, 42
188+
ret i1 %res
189+
}
190+
191+
define i1 @vscale_ugt_min_overflow() vscale_range(256,300) {
192+
; CHECK-LABEL: @vscale_ugt_min_overflow(
193+
; CHECK-NEXT: [[VSCALE:%.*]] = call i8 @llvm.vscale.i8()
194+
; CHECK-NEXT: [[RES:%.*]] = icmp ult i8 [[VSCALE]], 42
195+
; CHECK-NEXT: ret i1 [[RES]]
196+
;
197+
%vscale = call i8 @llvm.vscale.i8()
198+
%res = icmp ult i8 %vscale, 42
199+
ret i1 %res
200+
}
201+
129202
declare i8 @llvm.vscale.i8()
130203
declare i16 @llvm.vscale.i16()
131204
declare i32 @llvm.vscale.i32()

0 commit comments

Comments
 (0)