[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / strict_ldexp.f32.ll
blob456f0bd2434fb8abebd7903604afc5809833da99
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6,GFX6-SDAG %s
3 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-SDAG %s
4 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-SDAG %s
5 ; RUN: llc -global-isel=0 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-SDAG %s
7 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tahiti < %s | FileCheck -check-prefixes=GCN,GFX6,GFX6-GISEL %s
8 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=tonga < %s | FileCheck -check-prefixes=GCN,GFX8,GFX8-GISEL %s
9 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx900 < %s | FileCheck -check-prefixes=GCN,GFX9,GFX9-GISEL %s
10 ; RUN: llc -global-isel=1 -mtriple=amdgcn -mcpu=gfx1100 < %s | FileCheck -check-prefixes=GCN,GFX11,GFX11-GISEL %s
12 ; define float @test_ldexp_f32_i16(ptr addrspace(1) %out, float %a, i16 %b) #0 {
13 ;   %result = call float @llvm.experimental.constrained.ldexp.f32.i16(float %a, i16 %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
14 ;   ret float %result
15 ; }
17 define float @test_ldexp_f32_i32(ptr addrspace(1) %out, float %a, i32 %b) #0 {
18 ; GFX6-LABEL: test_ldexp_f32_i32:
19 ; GFX6:       ; %bb.0:
20 ; GFX6-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
21 ; GFX6-NEXT:    v_ldexp_f32_e32 v0, v2, v3
22 ; GFX6-NEXT:    s_setpc_b64 s[30:31]
24 ; GFX8-LABEL: test_ldexp_f32_i32:
25 ; GFX8:       ; %bb.0:
26 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
27 ; GFX8-NEXT:    v_ldexp_f32 v0, v2, v3
28 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
30 ; GFX9-LABEL: test_ldexp_f32_i32:
31 ; GFX9:       ; %bb.0:
32 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33 ; GFX9-NEXT:    v_ldexp_f32 v0, v2, v3
34 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
36 ; GFX11-LABEL: test_ldexp_f32_i32:
37 ; GFX11:       ; %bb.0:
38 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
39 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v3
40 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
41   %result = call float @llvm.experimental.constrained.ldexp.f32.i32(float %a, i32 %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
42   ret float %result
45 ; define <2 x float> @test_ldexp_v2f32_v2i16(ptr addrspace(1) %out, <2 x float> %a, <2 x i16> %b) #0 {
46 ;   %result = call <2 x float> @llvm.experimental.constrained.ldexp.v2f32.v2i16(<2 x float> %a, <2 x i16> %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
47 ;   ret <2 x float> %result
48 ; }
50 define <2 x float> @test_ldexp_v2f32_v2i32(ptr addrspace(1) %out, <2 x float> %a, <2 x i32> %b) #0 {
51 ; GFX6-SDAG-LABEL: test_ldexp_v2f32_v2i32:
52 ; GFX6-SDAG:       ; %bb.0:
53 ; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
54 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v1, v3, v5
55 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v0, v2, v4
56 ; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]
58 ; GFX8-SDAG-LABEL: test_ldexp_v2f32_v2i32:
59 ; GFX8-SDAG:       ; %bb.0:
60 ; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v1, v3, v5
62 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v0, v2, v4
63 ; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]
65 ; GFX9-SDAG-LABEL: test_ldexp_v2f32_v2i32:
66 ; GFX9-SDAG:       ; %bb.0:
67 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
68 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v1, v3, v5
69 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v0, v2, v4
70 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
72 ; GFX11-LABEL: test_ldexp_v2f32_v2i32:
73 ; GFX11:       ; %bb.0:
74 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
75 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v4
76 ; GFX11-NEXT:    v_ldexp_f32 v1, v3, v5
77 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
79 ; GFX6-GISEL-LABEL: test_ldexp_v2f32_v2i32:
80 ; GFX6-GISEL:       ; %bb.0:
81 ; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
82 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v0, v2, v4
83 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v1, v3, v5
84 ; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]
86 ; GFX8-GISEL-LABEL: test_ldexp_v2f32_v2i32:
87 ; GFX8-GISEL:       ; %bb.0:
88 ; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
89 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v0, v2, v4
90 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v1, v3, v5
91 ; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]
93 ; GFX9-GISEL-LABEL: test_ldexp_v2f32_v2i32:
94 ; GFX9-GISEL:       ; %bb.0:
95 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
96 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v0, v2, v4
97 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v1, v3, v5
98 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
99   %result = call <2 x float> @llvm.experimental.constrained.ldexp.v2f32.v2i32(<2 x float> %a, <2 x i32> %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
100   ret <2 x float> %result
103 define <3 x float> @test_ldexp_v3f32_v3i32(ptr addrspace(1) %out, <3 x float> %a, <3 x i32> %b) #0 {
104 ; GFX6-SDAG-LABEL: test_ldexp_v3f32_v3i32:
105 ; GFX6-SDAG:       ; %bb.0:
106 ; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
107 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v4, v4, v7
108 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v1, v3, v6
109 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v0, v2, v5
110 ; GFX6-SDAG-NEXT:    v_mov_b32_e32 v2, v4
111 ; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]
113 ; GFX8-SDAG-LABEL: test_ldexp_v3f32_v3i32:
114 ; GFX8-SDAG:       ; %bb.0:
115 ; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
116 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v4, v4, v7
117 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v1, v3, v6
118 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v0, v2, v5
119 ; GFX8-SDAG-NEXT:    v_mov_b32_e32 v2, v4
120 ; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]
122 ; GFX9-SDAG-LABEL: test_ldexp_v3f32_v3i32:
123 ; GFX9-SDAG:       ; %bb.0:
124 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
125 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v4, v4, v7
126 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v1, v3, v6
127 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v0, v2, v5
128 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, v4
129 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
131 ; GFX11-LABEL: test_ldexp_v3f32_v3i32:
132 ; GFX11:       ; %bb.0:
133 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
134 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v5
135 ; GFX11-NEXT:    v_ldexp_f32 v1, v3, v6
136 ; GFX11-NEXT:    v_ldexp_f32 v2, v4, v7
137 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
139 ; GFX6-GISEL-LABEL: test_ldexp_v3f32_v3i32:
140 ; GFX6-GISEL:       ; %bb.0:
141 ; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
142 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v0, v2, v5
143 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v1, v3, v6
144 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v2, v4, v7
145 ; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]
147 ; GFX8-GISEL-LABEL: test_ldexp_v3f32_v3i32:
148 ; GFX8-GISEL:       ; %bb.0:
149 ; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
150 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v0, v2, v5
151 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v1, v3, v6
152 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v2, v4, v7
153 ; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]
155 ; GFX9-GISEL-LABEL: test_ldexp_v3f32_v3i32:
156 ; GFX9-GISEL:       ; %bb.0:
157 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
158 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v0, v2, v5
159 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v1, v3, v6
160 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v2, v4, v7
161 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
162   %result = call <3 x float> @llvm.experimental.constrained.ldexp.v3f32.v3i32(<3 x float> %a, <3 x i32> %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
163   ret <3 x float> %result
166 define <4 x float> @test_ldexp_v4f32_v4i32(ptr addrspace(1) %out, <4 x float> %a, <4 x i32> %b) #0 {
167 ; GFX6-SDAG-LABEL: test_ldexp_v4f32_v4i32:
168 ; GFX6-SDAG:       ; %bb.0:
169 ; GFX6-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
170 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v5, v5, v9
171 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v4, v4, v8
172 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v1, v3, v7
173 ; GFX6-SDAG-NEXT:    v_ldexp_f32_e32 v0, v2, v6
174 ; GFX6-SDAG-NEXT:    v_mov_b32_e32 v2, v4
175 ; GFX6-SDAG-NEXT:    v_mov_b32_e32 v3, v5
176 ; GFX6-SDAG-NEXT:    s_setpc_b64 s[30:31]
178 ; GFX8-SDAG-LABEL: test_ldexp_v4f32_v4i32:
179 ; GFX8-SDAG:       ; %bb.0:
180 ; GFX8-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v5, v5, v9
182 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v4, v4, v8
183 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v1, v3, v7
184 ; GFX8-SDAG-NEXT:    v_ldexp_f32 v0, v2, v6
185 ; GFX8-SDAG-NEXT:    v_mov_b32_e32 v2, v4
186 ; GFX8-SDAG-NEXT:    v_mov_b32_e32 v3, v5
187 ; GFX8-SDAG-NEXT:    s_setpc_b64 s[30:31]
189 ; GFX9-SDAG-LABEL: test_ldexp_v4f32_v4i32:
190 ; GFX9-SDAG:       ; %bb.0:
191 ; GFX9-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
192 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v5, v5, v9
193 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v4, v4, v8
194 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v1, v3, v7
195 ; GFX9-SDAG-NEXT:    v_ldexp_f32 v0, v2, v6
196 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v2, v4
197 ; GFX9-SDAG-NEXT:    v_mov_b32_e32 v3, v5
198 ; GFX9-SDAG-NEXT:    s_setpc_b64 s[30:31]
200 ; GFX11-LABEL: test_ldexp_v4f32_v4i32:
201 ; GFX11:       ; %bb.0:
202 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
203 ; GFX11-NEXT:    v_ldexp_f32 v0, v2, v6
204 ; GFX11-NEXT:    v_ldexp_f32 v1, v3, v7
205 ; GFX11-NEXT:    v_ldexp_f32 v2, v4, v8
206 ; GFX11-NEXT:    v_ldexp_f32 v3, v5, v9
207 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
209 ; GFX6-GISEL-LABEL: test_ldexp_v4f32_v4i32:
210 ; GFX6-GISEL:       ; %bb.0:
211 ; GFX6-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
212 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v0, v2, v6
213 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v1, v3, v7
214 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v2, v4, v8
215 ; GFX6-GISEL-NEXT:    v_ldexp_f32_e32 v3, v5, v9
216 ; GFX6-GISEL-NEXT:    s_setpc_b64 s[30:31]
218 ; GFX8-GISEL-LABEL: test_ldexp_v4f32_v4i32:
219 ; GFX8-GISEL:       ; %bb.0:
220 ; GFX8-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
221 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v0, v2, v6
222 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v1, v3, v7
223 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v2, v4, v8
224 ; GFX8-GISEL-NEXT:    v_ldexp_f32 v3, v5, v9
225 ; GFX8-GISEL-NEXT:    s_setpc_b64 s[30:31]
227 ; GFX9-GISEL-LABEL: test_ldexp_v4f32_v4i32:
228 ; GFX9-GISEL:       ; %bb.0:
229 ; GFX9-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
230 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v0, v2, v6
231 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v1, v3, v7
232 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v2, v4, v8
233 ; GFX9-GISEL-NEXT:    v_ldexp_f32 v3, v5, v9
234 ; GFX9-GISEL-NEXT:    s_setpc_b64 s[30:31]
235   %result = call <4 x float> @llvm.experimental.constrained.ldexp.v4f32.v4i32(<4 x float> %a, <4 x i32> %b, metadata !"round.dynamic", metadata !"fpexcept.strict")
236   ret <4 x float> %result
239 declare float @llvm.experimental.constrained.ldexp.f32.i16(float, i16, metadata, metadata) #1
240 declare float @llvm.experimental.constrained.ldexp.f32.i32(float, i32, metadata, metadata) #1
241 declare <2 x float> @llvm.experimental.constrained.ldexp.v2f32.v2i16(<2 x float>, <2 x i16>, metadata, metadata) #1
242 declare <2 x float> @llvm.experimental.constrained.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>, metadata, metadata) #1
243 declare <3 x float> @llvm.experimental.constrained.ldexp.v3f32.v3i32(<3 x float>, <3 x i32>, metadata, metadata) #1
244 declare <4 x float> @llvm.experimental.constrained.ldexp.v4f32.v4i32(<4 x float>, <4 x i32>, metadata, metadata) #1
246 attributes #0 = { strictfp }
247 attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: readwrite) }
248 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
249 ; GCN: {{.*}}
250 ; GFX11-GISEL: {{.*}}
251 ; GFX11-SDAG: {{.*}}