| 
1 | 1 | ; RUN: llc -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s  | 
2 | 2 | ; RUN: %if spirv-tools %{ llc -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}  | 
3 | 3 | 
 
  | 
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"  | 
32 | 6 | ; 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 %[[#]]  | 
63 | 9 | 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  | 
66 | 12 | }  | 
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 %[[#]]  | 
68 | 19 | 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  | 
71 | 22 | }  | 
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 %[[#]]  | 
73 | 29 | 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  | 
76 | 32 | }  | 
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 %[[#]]  | 
78 | 39 | 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  | 
81 | 42 | }  | 
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 %[[#]]  | 
83 | 49 | 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  | 
86 | 52 | }  | 
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 %[[#]]  | 
88 | 59 | 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  | 
91 | 62 | }  | 
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 %[[#]]  | 
93 | 69 | 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  | 
96 | 72 | }  | 
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 %[[#]]  | 
98 | 79 | 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  | 
101 | 82 | }  | 
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 %[[#]]  | 
103 | 89 | 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  | 
106 | 92 | }  | 
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 %[[#]]  | 
108 | 99 | 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  | 
111 | 102 | }  | 
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 %[[#]]  | 
113 | 108 | 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  | 
116 | 111 | }  | 
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 %[[#]]  | 
118 | 117 | 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  | 
121 | 120 | }  | 
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 %[[#]]  | 
123 | 126 | 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  | 
126 | 129 | }  | 
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 %[[#]]  | 
128 | 135 | 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  | 
131 | 138 | }  | 
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 %[[#]]  | 
133 | 144 | 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  | 
136 | 147 | }  | 
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 %[[#]]  | 
138 | 153 | 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  | 
141 | 156 | }  | 
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 %[[#]]  | 
143 | 162 | 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  | 
146 | 165 | }  | 
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 %[[#]]  | 
148 | 171 | 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  | 
151 | 174 | }  | 
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 %[[#]]  | 
153 | 180 | 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  | 
156 | 183 | }  | 
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 %[[#]]  | 
158 | 189 | 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  | 
161 | 192 | }  | 
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 %[[#]]  | 
163 | 198 | 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  | 
166 | 201 | }  | 
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 %[[#]]  | 
168 | 207 | 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  | 
171 | 210 | }  | 
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 %[[#]]  | 
173 | 217 | 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  | 
176 | 220 | }  | 
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 %[[#]]  | 
178 | 227 | 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  | 
181 | 230 | }  | 
0 commit comments