Skip to content

Commit ac33c33

Browse files
committed
[InstCombine] add tests for FP<->int casts; NFC
This overlaps with at least some existing tests, but the smaller types should be faster for alive2 to verify. We know that at least one of these is currently wrong (miscompile) as shown in #55150.
1 parent d85eb4e commit ac33c33

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

llvm/test/Transforms/InstCombine/sitofp.ll

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,3 +245,85 @@ define i25 @low_masked_input(i25 %A) {
245245
%C = fptoui float %B to i25
246246
ret i25 %C
247247
}
248+
249+
define i11 @s32_half_s11(i32 %x) {
250+
; CHECK-LABEL: @s32_half_s11(
251+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i11
252+
; CHECK-NEXT: ret i11 [[R]]
253+
;
254+
%h = sitofp i32 %x to half
255+
%r = fptosi half %h to i11
256+
ret i11 %r
257+
}
258+
259+
define i11 @s32_half_u11(i32 %x) {
260+
; CHECK-LABEL: @s32_half_u11(
261+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i11
262+
; CHECK-NEXT: ret i11 [[R]]
263+
;
264+
%h = sitofp i32 %x to half
265+
%r = fptoui half %h to i11
266+
ret i11 %r
267+
}
268+
269+
define i11 @u32_half_s11(i32 %x) {
270+
; CHECK-LABEL: @u32_half_s11(
271+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i11
272+
; CHECK-NEXT: ret i11 [[R]]
273+
;
274+
%h = uitofp i32 %x to half
275+
%r = fptosi half %h to i11
276+
ret i11 %r
277+
}
278+
279+
define i11 @u32_half_u11(i32 %x) {
280+
; CHECK-LABEL: @u32_half_u11(
281+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i11
282+
; CHECK-NEXT: ret i11 [[R]]
283+
;
284+
%h = uitofp i32 %x to half
285+
%r = fptoui half %h to i11
286+
ret i11 %r
287+
}
288+
289+
define i12 @s32_half_s12(i32 %x) {
290+
; CHECK-LABEL: @s32_half_s12(
291+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i12
292+
; CHECK-NEXT: ret i12 [[R]]
293+
;
294+
%h = sitofp i32 %x to half
295+
%r = fptosi half %h to i12
296+
ret i12 %r
297+
}
298+
299+
define i12 @s32_half_u12(i32 %x) {
300+
; CHECK-LABEL: @s32_half_u12(
301+
; CHECK-NEXT: [[H:%.*]] = sitofp i32 [[X:%.*]] to half
302+
; CHECK-NEXT: [[R:%.*]] = fptoui half [[H]] to i12
303+
; CHECK-NEXT: ret i12 [[R]]
304+
;
305+
%h = sitofp i32 %x to half
306+
%r = fptoui half %h to i12
307+
ret i12 %r
308+
}
309+
310+
define i12 @u32_half_s12(i32 %x) {
311+
; CHECK-LABEL: @u32_half_s12(
312+
; CHECK-NEXT: [[R:%.*]] = trunc i32 [[X:%.*]] to i12
313+
; CHECK-NEXT: ret i12 [[R]]
314+
;
315+
%h = uitofp i32 %x to half
316+
%r = fptosi half %h to i12
317+
ret i12 %r
318+
}
319+
320+
define i12 @u32_half_u12(i32 %x) {
321+
; CHECK-LABEL: @u32_half_u12(
322+
; CHECK-NEXT: [[H:%.*]] = uitofp i32 [[X:%.*]] to half
323+
; CHECK-NEXT: [[R:%.*]] = fptoui half [[H]] to i12
324+
; CHECK-NEXT: ret i12 [[R]]
325+
;
326+
%h = uitofp i32 %x to half
327+
%r = fptoui half %h to i12
328+
ret i12 %r
329+
}

0 commit comments

Comments
 (0)