Skip to content

Commit e0e7243

Browse files
Constrained-convert.ll test file is updated as per the comments
1 parent f83218c commit e0e7243

File tree

1 file changed

+178
-129
lines changed

1 file changed

+178
-129
lines changed
Lines changed: 178 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,181 +1,230 @@
11
; RUN: llc -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s
22
; RUN: %if spirv-tools %{ llc -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}
33

4-
; CHECK-DAG: OpName %[[#sf:]] "conv"
5-
; CHECK-DAG: OpName %[[#sf1:]] "conv1"
6-
; CHECK-DAG: OpName %[[#sf2:]] "conv2"
7-
; CHECK-DAG: OpName %[[#sf3:]] "conv3"
8-
; CHECK-DAG: OpName %[[#sf4:]] "conv4"
9-
; CHECK-DAG: OpName %[[#uf1:]] "conv5"
10-
; CHECK-DAG: OpName %[[#uf2:]] "conv6"
11-
; CHECK-DAG: OpName %[[#uf3:]] "conv7"
12-
; CHECK-DAG: OpName %[[#uf4:]] "conv8"
13-
; CHECK-DAG: OpName %[[#uf5:]] "conv9"
14-
; CHECK-DAG: OpName %[[#fs1:]] "conv10"
15-
; CHECK-DAG: OpName %[[#fs2:]] "conv11"
16-
; CHECK-DAG: OpName %[[#fs3:]] "conv12"
17-
; CHECK-DAG: OpName %[[#fs4:]] "conv13"
18-
; CHECK-DAG: OpName %[[#fs5:]] "conv14"
19-
; CHECK-DAG: OpName %[[#fu1:]] "conv15"
20-
; CHECK-DAG: OpName %[[#fu2:]] "conv16"
21-
; CHECK-DAG: OpName %[[#fu3:]] "conv17"
22-
; CHECK-DAG: OpName %[[#fu4:]] "conv18"
23-
; CHECK-DAG: OpName %[[#fu5:]] "conv19"
24-
; CHECK-DAG: OpName %[[#fe1:]] "conv20"
25-
; CHECK-DAG: OpName %[[#fe2:]] "conv21"
26-
; CHECK-DAG: OpName %[[#ft1:]] "conv22"
27-
; CHECK-DAG: OpName %[[#ft2:]] "conv23"
28-
29-
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
30-
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
31-
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
4+
define float @sitofp_f32_i32(i32 %in) {
5+
; CHECK-DAG: OpName %[[#]] "conv"
326
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
33-
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
34-
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
35-
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
36-
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
37-
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
38-
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
39-
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
40-
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
41-
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
42-
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
43-
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
44-
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
45-
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
46-
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
47-
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
48-
49-
; CHECK-DAG: OpDecorate %[[#sf]] FPRoundingMode RTE
50-
; CHECK-DAG: OpDecorate %[[#sf1]] FPRoundingMode RTZ
51-
; CHECK-DAG: OpDecorate %[[#sf2]] FPRoundingMode RTP
52-
; CHECK-DAG: OpDecorate %[[#sf3]] FPRoundingMode RTN
53-
; CHECK-DAG: OpDecorate %[[#sf4]] FPRoundingMode RTE
54-
; CHECK-DAG: OpDecorate %[[#uf1]] FPRoundingMode RTE
55-
; CHECK-DAG: OpDecorate %[[#uf2]] FPRoundingMode RTZ
56-
; CHECK-DAG: OpDecorate %[[#uf3]] FPRoundingMode RTP
57-
; CHECK-DAG: OpDecorate %[[#uf4]] FPRoundingMode RTN
58-
; CHECK-DAG: OpDecorate %[[#uf5]] FPRoundingMode RTE
59-
; CHECK-DAG: OpDecorate %[[#ft1]] FPRoundingMode RTZ
60-
; CHECK-DAG: OpDecorate %[[#ft2]] FPRoundingMode RTE
61-
62-
define dso_local spir_kernel void @test1(i32 %in) {
7+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTE
8+
; CHECK-DAG: OpReturnValue %[[#]]
639
entry:
64-
%conv = tail call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
65-
ret void
10+
%conv = tail call float @llvm.experimental.constrained.sitofp.f32.i32(i32 %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
11+
ret float %conv
6612
}
67-
define dso_local spir_kernel void @test2(i16 %in) {
13+
14+
define float @sitofp_f32_i16(i16 %in) {
15+
; CHECK-DAG: OpName %[[#]] "conv1"
16+
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
17+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTZ
18+
; CHECK-DAG: OpReturnValue %[[#]]
6819
entry:
69-
%conv1 = tail call float @llvm.experimental.constrained.sitofp.f32.i16(i16 %in, metadata !"round.towardzero", metadata !"fpexcept.strict")
70-
ret void
20+
%conv1 = tail call float @llvm.experimental.constrained.sitofp.f32.i16(i16 %in, metadata !"round.towardzero", metadata !"fpexcept.strict")
21+
ret float %conv1
7122
}
72-
define dso_local spir_kernel void @test3(i16 %in) {
23+
24+
define double @sitofp_f64_i16(i16 %in) {
25+
; CHECK-DAG: OpName %[[#]] "conv2"
26+
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
27+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTP
28+
; CHECK-DAG: OpReturnValue %[[#]]
7329
entry:
74-
%conv2 = tail call double @llvm.experimental.constrained.sitofp.f64.i16(i16 %in, metadata !"round.upward", metadata !"fpexcept.strict")
75-
ret void
30+
%conv2 = tail call double @llvm.experimental.constrained.sitofp.f64.i16(i16 %in, metadata !"round.upward", metadata !"fpexcept.strict")
31+
ret double %conv2
7632
}
77-
define dso_local spir_kernel void @test4(i16 %in) {
33+
34+
define double @sitofp_f64_i32(i16 %in) {
35+
; CHECK-DAG: OpName %[[#]] "conv3"
36+
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
37+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTN
38+
; CHECK-DAG: OpReturnValue %[[#]]
7839
entry:
79-
%conv3 = tail call double @llvm.experimental.constrained.sitofp.f64.i32(i16 %in, metadata !"round.downward", metadata !"fpexcept.strict")
80-
ret void
40+
%conv3 = tail call double @llvm.experimental.constrained.sitofp.f64.i32(i16 %in, metadata !"round.downward", metadata !"fpexcept.strict")
41+
ret double %conv3
8142
}
82-
define dso_local spir_kernel void @test5(<4 x i16> %in) {
43+
44+
define <4 x double> @sitofp_v4f64_v4i32(<4 x i16> %in) {
45+
; CHECK-DAG: OpName %[[#]] "conv4"
46+
; CHECK-DAG: OpConvertSToF %[[#]] %[[#]]
47+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTE
48+
; CHECK-DAG: OpReturnValue %[[#]]
8349
entry:
84-
%conv4 = tail call <4 x double > @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i16> %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
85-
ret void
50+
%conv4 = tail call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i16> %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
51+
ret <4 x double> %conv4
8652
}
87-
define dso_local spir_kernel void @test6(i32 %in) {
53+
54+
define float @uitofp_f32_i32(i32 %in) {
55+
; CHECK-DAG: OpName %[[#]] "conv5"
56+
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
57+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTE
58+
; CHECK-DAG: OpReturnValue %[[#]]
8859
entry:
89-
%conv5 = tail call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
90-
ret void
60+
%conv5 = tail call float @llvm.experimental.constrained.uitofp.f32.i32(i32 %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
61+
ret float %conv5
9162
}
92-
define dso_local spir_kernel void @test7(i32 %in) {
63+
64+
define double @uitofp_f64_i32(i32 %in) {
65+
; CHECK-DAG: OpName %[[#]] "conv6"
66+
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
67+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTZ
68+
; CHECK-DAG: OpReturnValue %[[#]]
9369
entry:
94-
%conv6 = tail call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %in, metadata !"round.towardzero", metadata !"fpexcept.strict")
95-
ret void
70+
%conv6 = tail call double @llvm.experimental.constrained.uitofp.f64.i32(i32 %in, metadata !"round.towardzero", metadata !"fpexcept.strict")
71+
ret double %conv6
9672
}
97-
define dso_local spir_kernel void @test8(i16 %in) {
73+
74+
define float @uitofp_f32_i16(i16 %in) {
75+
; CHECK-DAG: OpName %[[#]] "conv7"
76+
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
77+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTP
78+
; CHECK-DAG: OpReturnValue %[[#]]
9879
entry:
99-
%conv7 = tail call float @llvm.experimental.constrained.uitofp.f32.i16(i16 %in, metadata !"round.upward", metadata !"fpexcept.strict")
100-
ret void
80+
%conv7 = tail call float @llvm.experimental.constrained.uitofp.f32.i16(i16 %in, metadata !"round.upward", metadata !"fpexcept.strict")
81+
ret float %conv7
10182
}
102-
define dso_local spir_kernel void @test9(i16 %in) {
83+
84+
define double @uitofp_f64_i16(i16 %in) {
85+
; CHECK-DAG: OpName %[[#]] "conv8"
86+
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
87+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTN
88+
; CHECK-DAG: OpReturnValue %[[#]]
10389
entry:
104-
%conv8 = tail call double @llvm.experimental.constrained.uitofp.f64.i16(i16 %in, metadata !"round.downward", metadata !"fpexcept.strict")
105-
ret void
90+
%conv8 = tail call double @llvm.experimental.constrained.uitofp.f64.i16(i16 %in, metadata !"round.downward", metadata !"fpexcept.strict")
91+
ret double %conv8
10692
}
107-
define dso_local spir_kernel void @test10(<4 x i32> %in) {
93+
94+
define <4 x float> @uitofp_v4f32_v4i32(<4 x i32> %in) {
95+
; CHECK-DAG: OpName %[[#]] "conv9"
96+
; CHECK-DAG: OpConvertUToF %[[#]] %[[#]]
97+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTE
98+
; CHECK-DAG: OpReturnValue %[[#]]
10899
entry:
109-
%conv9 = tail call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
110-
ret void
100+
%conv9 = tail call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
101+
ret <4 x float> %conv9
111102
}
112-
define dso_local spir_kernel void @test11(float %in) {
103+
104+
define i32 @fptosi_i32_f32(float %in) {
105+
; CHECK-DAG: OpName %[[#]] "conv10"
106+
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
107+
; CHECK-DAG: OpReturnValue %[[#]]
113108
entry:
114-
%conv10 = tail call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %in, metadata !"fpexcept.strict")
115-
ret void
109+
%conv10 = tail call i32 @llvm.experimental.constrained.fptosi.i32.f32(float %in, metadata !"fpexcept.strict")
110+
ret i32 %conv10
116111
}
117-
define dso_local spir_kernel void @test12(double %in) {
112+
113+
define i32 @fptosi_i32_f64(double %in) {
114+
; CHECK-DAG: OpName %[[#]] "conv11"
115+
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
116+
; CHECK-DAG: OpReturnValue %[[#]]
118117
entry:
119-
%conv11 = tail call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %in, metadata !"fpexcept.strict")
120-
ret void
118+
%conv11 = tail call i32 @llvm.experimental.constrained.fptosi.i32.f64(double %in, metadata !"fpexcept.strict")
119+
ret i32 %conv11
121120
}
122-
define dso_local spir_kernel void @test13(float %in) {
121+
122+
define i16 @fptosi_i16_f32(float %in) {
123+
; CHECK-DAG: OpName %[[#]] "conv12"
124+
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
125+
; CHECK-DAG: OpReturnValue %[[#]]
123126
entry:
124-
%conv12 = tail call i16 @llvm.experimental.constrained.fptosi.i16.f64(float %in, metadata !"fpexcept.strict")
125-
ret void
127+
%conv12 = tail call i16 @llvm.experimental.constrained.fptosi.i16.f64(float %in, metadata !"fpexcept.strict")
128+
ret i16 %conv12
126129
}
127-
define dso_local spir_kernel void @test14(double %in) {
130+
131+
define i16 @fptosi_i16_f64(double %in) {
132+
; CHECK-DAG: OpName %[[#]] "conv13"
133+
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
134+
; CHECK-DAG: OpReturnValue %[[#]]
128135
entry:
129-
%conv13 = tail call i16 @llvm.experimental.constrained.fptosi.i16.f64(double %in, metadata !"fpexcept.strict")
130-
ret void
136+
%conv13 = tail call i16 @llvm.experimental.constrained.fptosi.i16.f64(double %in, metadata !"fpexcept.strict")
137+
ret i16 %conv13
131138
}
132-
define dso_local spir_kernel void @test15(<4 x double> %in) {
139+
140+
define <4 x i16> @fptosi_v4i16_v4f64(<4 x double> %in) {
141+
; CHECK-DAG: OpName %[[#]] "conv14"
142+
; CHECK-DAG: OpConvertFToS %[[#]] %[[#]]
143+
; CHECK-DAG: OpReturnValue %[[#]]
133144
entry:
134-
%conv14 = tail call <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f64(<4 x double> %in, metadata !"fpexcept.strict")
135-
ret void
145+
%conv14 = tail call <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f64(<4 x double> %in, metadata !"fpexcept.strict")
146+
ret <4 x i16> %conv14
136147
}
137-
define dso_local spir_kernel void @test16(float %in) {
148+
149+
define i32 @fptoui_i32_f32(float %in) {
150+
; CHECK-DAG: OpName %[[#]] "conv15"
151+
; CHECK-DAG: OpConvertFToU %[[#]] %[[#]]
152+
; CHECK-DAG: OpReturnValue %[[#]]
138153
entry:
139-
%conv15 = tail call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %in, metadata !"fpexcept.strict")
140-
ret void
154+
%conv15 = tail call i32 @llvm.experimental.constrained.fptoui.i32.f32(float %in, metadata !"fpexcept.strict")
155+
ret i32 %conv15
141156
}
142-
define dso_local spir_kernel void @test17(double %in) {
157+
158+
define i32 @fptoui_i32_f64(double %in) {
159+
; CHECK-DAG: OpName %[[#]] "conv16"
160+
; CHECK-DAG: OpConvertFToU %[[#]] %[[#]]
161+
; CHECK-DAG: OpReturnValue %[[#]]
143162
entry:
144-
%conv16 = tail call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %in, metadata !"fpexcept.strict")
145-
ret void
163+
%conv16 = tail call i32 @llvm.experimental.constrained.fptoui.i32.f64(double %in, metadata !"fpexcept.strict")
164+
ret i32 %conv16
146165
}
147-
define dso_local spir_kernel void @test18(float %in) {
166+
167+
define i16 @fptoui_i16_f32(float %in) {
168+
; CHECK-DAG: OpName %[[#]] "conv17"
169+
; CHECK-DAG: OpConvertFToU %[[#]] %[[#]]
170+
; CHECK-DAG: OpReturnValue %[[#]]
148171
entry:
149-
%conv17 = tail call i16 @llvm.experimental.constrained.fptoui.i16.f32(float %in, metadata !"fpexcept.strict")
150-
ret void
172+
%conv17 = tail call i16 @llvm.experimental.constrained.fptoui.i16.f32(float %in, metadata !"fpexcept.strict")
173+
ret i16 %conv17
151174
}
152-
define dso_local spir_kernel void @test19(double %in) {
175+
176+
define i16 @fptoui_i16_f64(double %in) {
177+
; CHECK-DAG: OpName %[[#]] "conv18"
178+
; CHECK-DAG: OpConvertFToU %[[#]] %[[#]]
179+
; CHECK-DAG: OpReturnValue %[[#]]
153180
entry:
154-
%conv18 = tail call i16 @llvm.experimental.constrained.fptoui.i16.f64(double %in, metadata !"fpexcept.strict")
155-
ret void
181+
%conv18 = tail call i16 @llvm.experimental.constrained.fptoui.i16.f64(double %in, metadata !"fpexcept.strict")
182+
ret i16 %conv18
156183
}
157-
define dso_local spir_kernel void @test20( <4 x double> %in) {
184+
185+
define <4 x i32> @fptoui_v4i32_v4f64(<4 x double> %in) {
186+
; CHECK-DAG: OpName %[[#]] "conv19"
187+
; CHECK-DAG: OpConvertFToU %[[#]] %[[#]]
188+
; CHECK-DAG: OpReturnValue %[[#]]
158189
entry:
159-
%conv19 = tail call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double> %in, metadata !"fpexcept.strict")
160-
ret void
190+
%conv19 = tail call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double> %in, metadata !"fpexcept.strict")
191+
ret <4 x i32> %conv19
161192
}
162-
define dso_local spir_kernel void @test21(float %in) {
193+
194+
define double @fpext_f64_f32(float %in) {
195+
; CHECK-DAG: OpName %[[#]] "conv20"
196+
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
197+
; CHECK-DAG: OpReturnValue %[[#]]
163198
entry:
164-
%conv20 = tail call double @llvm.experimental.constrained.fpext.f64.f32(float %in, metadata !"fpexcept.strict")
165-
ret void
199+
%conv20 = tail call double @llvm.experimental.constrained.fpext.f64.f32(float %in, metadata !"fpexcept.strict")
200+
ret double %conv20
166201
}
167-
define dso_local spir_kernel void @test22(<4 x float> %in) {
202+
203+
define <4 x double> @fpext_v4f64_v4f32(<4 x float> %in) {
204+
; CHECK-DAG: OpName %[[#]] "conv21"
205+
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
206+
; CHECK-DAG: OpReturnValue %[[#]]
168207
entry:
169-
%conv21 = tail call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32( <4 x float> %in, metadata !"fpexcept.strict")
170-
ret void
208+
%conv21 = tail call <4 x double> @llvm.experimental.constrained.fpext.v4f64.v4f32(<4 x float> %in, metadata !"fpexcept.strict")
209+
ret <4 x double> %conv21
171210
}
172-
define dso_local spir_kernel void @test23(<4 x double> %in) {
211+
212+
define <4 x float> @fptrunc_v4f32_v4f64(<4 x double> %in) {
213+
; CHECK-DAG: OpName %[[#]] "conv22"
214+
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
215+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTZ
216+
; CHECK-DAG: OpReturnValue %[[#]]
173217
entry:
174-
%conv22 = tail call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64( <4 x double> %in,metadata !"round.towardzero", metadata !"fpexcept.strict")
175-
ret void
218+
%conv22 = tail call <4 x float> @llvm.experimental.constrained.fptrunc.v4f32.v4f64(<4 x double> %in, metadata !"round.towardzero", metadata !"fpexcept.strict")
219+
ret <4 x float> %conv22
176220
}
177-
define dso_local spir_kernel void @test24(double %in) {
221+
222+
define float @fptrunc_f32_f64(double %in) {
223+
; CHECK-DAG: OpName %[[#]] "conv23"
224+
; CHECK-DAG: OpFConvert %[[#]] %[[#]]
225+
; CHECK-DAG: OpDecorate %[[#]] FPRoundingMode RTE
226+
; CHECK-DAG: OpReturnValue %[[#]]
178227
entry:
179-
%conv23 = tail call float @llvm.experimental.constrained.fptrunc.f32.f64( double %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
180-
ret void
228+
%conv23 = tail call float @llvm.experimental.constrained.fptrunc.f32.f64(double %in, metadata !"round.tonearest", metadata !"fpexcept.strict")
229+
ret float %conv23
181230
}

0 commit comments

Comments
 (0)