Skip to content

Commit e3eb16a

Browse files
committed
pre-commit tests
1 parent d7ec80c commit e3eb16a

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed

llvm/test/CodeGen/NVPTX/i8x4-instructions.ll

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1425,4 +1425,30 @@ entry:
14251425
ret void
14261426
}
14271427

1428+
define <4 x float> @test_uitofp_v4i8(<4 x i8> %a) {
1429+
; CHECK-LABEL: test_uitofp_v4i8(
1430+
; CHECK: {
1431+
; CHECK-NEXT: .reg .b16 %rs<5>;
1432+
; CHECK-NEXT: .reg .b32 %r<10>;
1433+
; CHECK-EMPTY:
1434+
; CHECK-NEXT: // %bb.0:
1435+
; CHECK-NEXT: ld.param.b32 %r1, [test_uitofp_v4i8_param_0];
1436+
; CHECK-NEXT: prmt.b32 %r2, %r1, 0, 0x7773U;
1437+
; CHECK-NEXT: cvt.u16.u32 %rs1, %r2;
1438+
; CHECK-NEXT: cvt.rn.f32.u16 %r3, %rs1;
1439+
; CHECK-NEXT: prmt.b32 %r4, %r1, 0, 0x7772U;
1440+
; CHECK-NEXT: cvt.u16.u32 %rs2, %r4;
1441+
; CHECK-NEXT: cvt.rn.f32.u16 %r5, %rs2;
1442+
; CHECK-NEXT: prmt.b32 %r6, %r1, 0, 0x7771U;
1443+
; CHECK-NEXT: cvt.u16.u32 %rs3, %r6;
1444+
; CHECK-NEXT: cvt.rn.f32.u16 %r7, %rs3;
1445+
; CHECK-NEXT: prmt.b32 %r8, %r1, 0, 0x7770U;
1446+
; CHECK-NEXT: cvt.u16.u32 %rs4, %r8;
1447+
; CHECK-NEXT: cvt.rn.f32.u16 %r9, %rs4;
1448+
; CHECK-NEXT: st.param.v4.b32 [func_retval0], {%r9, %r7, %r5, %r3};
1449+
; CHECK-NEXT: ret;
1450+
%f = uitofp <4 x i8> %a to <4 x float>
1451+
ret <4 x float> %f
1452+
}
1453+
14281454
attributes #0 = { nounwind }

llvm/test/CodeGen/NVPTX/trunc-tofp.ll

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mcpu=sm_80 | FileCheck %s
3+
; RUN: %if ptxas %{ llc < %s -mcpu=sm_80 | %ptxas-verify -arch=sm_80 %}
4+
5+
target triple = "nvptx64-nvidia-cuda"
6+
7+
define float @uitofp_trunc_nuw(i32 %x, i32 %y) {
8+
; CHECK-LABEL: uitofp_trunc_nuw(
9+
; CHECK: {
10+
; CHECK-NEXT: .reg .b16 %rs<2>;
11+
; CHECK-NEXT: .reg .b32 %r<5>;
12+
; CHECK-EMPTY:
13+
; CHECK-NEXT: // %bb.0:
14+
; CHECK-NEXT: ld.param.b32 %r1, [uitofp_trunc_nuw_param_0];
15+
; CHECK-NEXT: ld.param.b32 %r2, [uitofp_trunc_nuw_param_1];
16+
; CHECK-NEXT: add.s32 %r3, %r1, %r2;
17+
; CHECK-NEXT: cvt.u16.u32 %rs1, %r3;
18+
; CHECK-NEXT: cvt.rn.f32.u16 %r4, %rs1;
19+
; CHECK-NEXT: st.param.b32 [func_retval0], %r4;
20+
; CHECK-NEXT: ret;
21+
%v = add i32 %x, %y
22+
%t = trunc nuw i32 %v to i16
23+
%f = uitofp i16 %t to float
24+
ret float %f
25+
}
26+
27+
define float @sitofp_trunc_nsw(i32 %x, i32 %y) {
28+
; CHECK-LABEL: sitofp_trunc_nsw(
29+
; CHECK: {
30+
; CHECK-NEXT: .reg .b16 %rs<2>;
31+
; CHECK-NEXT: .reg .b32 %r<5>;
32+
; CHECK-EMPTY:
33+
; CHECK-NEXT: // %bb.0:
34+
; CHECK-NEXT: ld.param.b32 %r1, [sitofp_trunc_nsw_param_0];
35+
; CHECK-NEXT: ld.param.b32 %r2, [sitofp_trunc_nsw_param_1];
36+
; CHECK-NEXT: add.s32 %r3, %r1, %r2;
37+
; CHECK-NEXT: cvt.u16.u32 %rs1, %r3;
38+
; CHECK-NEXT: cvt.rn.f32.s16 %r4, %rs1;
39+
; CHECK-NEXT: st.param.b32 [func_retval0], %r4;
40+
; CHECK-NEXT: ret;
41+
%v = add i32 %x, %y
42+
%t = trunc nsw i32 %v to i16
43+
%f = sitofp i16 %t to float
44+
ret float %f
45+
}
46+
47+
;; Cannot safely fold here because the sign of the comparison does not match the
48+
;; sign of the wrap flag.
49+
define float @uitofp_trunc_nsw(i32 %x, i32 %y) {
50+
; CHECK-LABEL: uitofp_trunc_nsw(
51+
; CHECK: {
52+
; CHECK-NEXT: .reg .b16 %rs<2>;
53+
; CHECK-NEXT: .reg .b32 %r<5>;
54+
; CHECK-EMPTY:
55+
; CHECK-NEXT: // %bb.0:
56+
; CHECK-NEXT: ld.param.b32 %r1, [uitofp_trunc_nsw_param_0];
57+
; CHECK-NEXT: ld.param.b32 %r2, [uitofp_trunc_nsw_param_1];
58+
; CHECK-NEXT: add.s32 %r3, %r1, %r2;
59+
; CHECK-NEXT: cvt.u16.u32 %rs1, %r3;
60+
; CHECK-NEXT: cvt.rn.f32.u16 %r4, %rs1;
61+
; CHECK-NEXT: st.param.b32 [func_retval0], %r4;
62+
; CHECK-NEXT: ret;
63+
%v = add i32 %x, %y
64+
%t = trunc nsw i32 %v to i16
65+
%f = uitofp i16 %t to float
66+
ret float %f
67+
}
68+
69+
;; Cannot safely fold here because the sign of the comparison does not match the
70+
;; sign of the wrap flag.
71+
define float @sitofp_trunc_nuw(i32 %x, i32 %y) {
72+
; CHECK-LABEL: sitofp_trunc_nuw(
73+
; CHECK: {
74+
; CHECK-NEXT: .reg .b16 %rs<2>;
75+
; CHECK-NEXT: .reg .b32 %r<5>;
76+
; CHECK-EMPTY:
77+
; CHECK-NEXT: // %bb.0:
78+
; CHECK-NEXT: ld.param.b32 %r1, [sitofp_trunc_nuw_param_0];
79+
; CHECK-NEXT: ld.param.b32 %r2, [sitofp_trunc_nuw_param_1];
80+
; CHECK-NEXT: add.s32 %r3, %r1, %r2;
81+
; CHECK-NEXT: cvt.u16.u32 %rs1, %r3;
82+
; CHECK-NEXT: cvt.rn.f32.s16 %r4, %rs1;
83+
; CHECK-NEXT: st.param.b32 [func_retval0], %r4;
84+
; CHECK-NEXT: ret;
85+
%v = add i32 %x, %y
86+
%t = trunc nuw i32 %v to i16
87+
%f = sitofp i16 %t to float
88+
ret float %f
89+
}

0 commit comments

Comments
 (0)