Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / remove-incompatible-functions.ll
blob020e878173a694d48d65d600734b8d05589fab8d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=amdgcn -mcpu=bonaire -stop-after=amdgpu-remove-incompatible-functions\
3 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX7,IR %s
4 ; RUN: FileCheck --check-prefix=WARN-GFX7 %s < %t
5 ; RUN: llc -march=amdgcn -mcpu=bonaire -verify-machineinstrs < %s
7 ; RUN: llc -march=amdgcn -mcpu=fiji -stop-after=amdgpu-remove-incompatible-functions\
8 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX8,IR %s
9 ; RUN: FileCheck --check-prefix=WARN-GFX8 %s < %t
10 ; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s
12 ; RUN: llc -march=amdgcn -mcpu=gfx906 -stop-after=amdgpu-remove-incompatible-functions\
13 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX9,GFX906,IR %s
14 ; RUN: FileCheck --check-prefix=WARN-GFX906 %s < %t
15 ; RUN: llc -march=amdgcn -mcpu=gfx906 -verify-machineinstrs < %s
17 ; RUN: llc -march=amdgcn -mcpu=gfx90a -stop-after=amdgpu-remove-incompatible-functions\
18 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX9,GFX90A,IR %s
19 ; RUN: FileCheck --check-prefix=WARN-GFX90A %s < %t
20 ; RUN: llc -march=amdgcn -mcpu=gfx90a -verify-machineinstrs < %s
22 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -stop-after=amdgpu-remove-incompatible-functions\
23 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX10,IR %s
24 ; RUN: FileCheck --check-prefix=WARN-GFX10 %s < %t
25 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -verify-machineinstrs < %s
27 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -stop-after=amdgpu-remove-incompatible-functions\
28 ; RUN:   -pass-remarks=amdgpu-remove-incompatible-functions < %s 2>%t | FileCheck -check-prefixes=GFX11,IR %s
29 ; RUN: FileCheck --check-prefix=WARN-GFX11 %s < %t
30 ; RUN: llc -march=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s
32 ; Note: This test checks the IR, but also has a run line to codegen the file just to check we
33 ; do not crash when trying to select those functions.
35 ; WARN-GFX7: removing function 'needs_dpp': +dpp is not supported on the current target
36 ; WARN-GFX7: removing function 'needs_16bit_insts': +16-bit-insts is not supported on the current target
37 ; WARN-GFX7: removing function 'needs_gfx8_insts': +gfx8-insts is not supported on the current target
38 ; WARN-GFX7: removing function 'needs_gfx9_insts': +gfx9-insts is not supported on the current target
39 ; WARN-GFX7: removing function 'needs_gfx10_insts': +gfx10-insts is not supported on the current target
40 ; WARN-GFX7: removing function 'needs_gfx11_insts': +gfx11-insts is not supported on the current target
41 ; WARN-GFX7: removing function 'needs_dot1_insts': +dot1-insts is not supported on the current target
42 ; WARN-GFX7: removing function 'needs_dot2_insts': +dot2-insts is not supported on the current target
43 ; WARN-GFX7: removing function 'needs_dot3_insts': +dot3-insts is not supported on the current target
44 ; WARN-GFX7: removing function 'needs_dot4_insts': +dot4-insts is not supported on the current target
45 ; WARN-GFX7: removing function 'needs_dot5_insts': +dot5-insts is not supported on the current target
46 ; WARN-GFX7: removing function 'needs_dot6_insts': +dot6-insts is not supported on the current target
47 ; WARN-GFX7: removing function 'needs_dot7_insts': +dot7-insts is not supported on the current target
48 ; WARN-GFX7: removing function 'needs_dot8_insts': +dot8-insts is not supported on the current target
49 ; WARN-GFX7-NOT: not supported
51 ; WARN-GFX8: removing function 'needs_gfx9_insts': +gfx9-insts is not supported on the current target
52 ; WARN-GFX8: removing function 'needs_gfx10_insts': +gfx10-insts is not supported on the current target
53 ; WARN-GFX8: removing function 'needs_gfx11_insts': +gfx11-insts is not supported on the current target
54 ; WARN-GFX8: removing function 'needs_dot1_insts': +dot1-insts is not supported on the current target
55 ; WARN-GFX8: removing function 'needs_dot2_insts': +dot2-insts is not supported on the current target
56 ; WARN-GFX8: removing function 'needs_dot3_insts': +dot3-insts is not supported on the current target
57 ; WARN-GFX8: removing function 'needs_dot4_insts': +dot4-insts is not supported on the current target
58 ; WARN-GFX8: removing function 'needs_dot5_insts': +dot5-insts is not supported on the current target
59 ; WARN-GFX8: removing function 'needs_dot6_insts': +dot6-insts is not supported on the current target
60 ; WARN-GFX8: removing function 'needs_dot7_insts': +dot7-insts is not supported on the current target
61 ; WARN-GFX8: removing function 'needs_dot8_insts': +dot8-insts is not supported on the current target
62 ; WARN-GFX8-NOT: not supported
64 ; WARN-GFX906: removing function 'needs_gfx10_insts': +gfx10-insts is not supported on the current target
65 ; WARN-GFX906: removing function 'needs_gfx11_insts': +gfx11-insts is not supported on the current target
66 ; WARN-GFX906: removing function 'needs_dot3_insts': +dot3-insts is not supported on the current target
67 ; WARN-GFX906: removing function 'needs_dot4_insts': +dot4-insts is not supported on the current target
68 ; WARN-GFX906: removing function 'needs_dot5_insts': +dot5-insts is not supported on the current target
69 ; WARN-GFX906: removing function 'needs_dot6_insts': +dot6-insts is not supported on the current target
70 ; WARN-GFX906: removing function 'needs_dot8_insts': +dot8-insts is not supported on the current target
71 ; WARN-GFX906-NOT: not supported
73 ; WARN-GFX90A: removing function 'needs_gfx10_insts': +gfx10-insts is not supported on the current target
74 ; WARN-GFX90A: removing function 'needs_gfx11_insts': +gfx11-insts is not supported on the current target
75 ; WARN-GFX90A: removing function 'needs_dot8_insts': +dot8-insts is not supported on the current target
76 ; WARN-GFX90A-NOT: not supported
78 ; WARN-GFX10: removing function 'needs_gfx11_insts': +gfx11-insts is not supported on the current target
79 ; WARN-GFX10: removing function 'needs_dot3_insts': +dot3-insts is not supported on the current target
80 ; WARN-GFX10: removing function 'needs_dot4_insts': +dot4-insts is not supported on the current target
81 ; WARN-GFX10: removing function 'needs_dot8_insts': +dot8-insts is not supported on the current target
82 ; WARN-GFX10-NOT: not supported
84 ; WARN-GFX11: removing function 'needs_dot1_insts': +dot1-insts is not supported on the current target
85 ; WARN-GFX11: removing function 'needs_dot2_insts': +dot2-insts is not supported on the current target
86 ; WARN-GFX11: removing function 'needs_dot3_insts': +dot3-insts is not supported on the current target
87 ; WARN-GFX11: removing function 'needs_dot4_insts': +dot4-insts is not supported on the current target
88 ; WARN-GFX11: removing function 'needs_dot6_insts': +dot6-insts is not supported on the current target
89 ; WARN-GFX11-NOT: not supported
91 ; GFX7:   @GVRefs {{.*}} zeroinitializer
92 ; GFX8:   @GVRefs {{.*}} [ptr @needs_dpp, ptr @needs_16bit_insts, ptr @needs_gfx8_insts, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null, ptr null]
93 ; GFX906: @GVRefs {{.*}} [ptr @needs_dpp, ptr @needs_16bit_insts, ptr @needs_gfx8_insts, ptr @needs_gfx9_insts, ptr null, ptr null, ptr @needs_dot1_insts, ptr @needs_dot2_insts, ptr null, ptr null, ptr null, ptr null, ptr @needs_dot7_insts, ptr null]
94 ; GFX90A: @GVRefs {{.*}} [ptr @needs_dpp, ptr @needs_16bit_insts, ptr @needs_gfx8_insts, ptr @needs_gfx9_insts, ptr null, ptr null, ptr @needs_dot1_insts, ptr @needs_dot2_insts, ptr @needs_dot3_insts, ptr @needs_dot4_insts, ptr @needs_dot5_insts, ptr @needs_dot6_insts, ptr @needs_dot7_insts, ptr null]
95 ; GFX10:  @GVRefs {{.*}} [ptr @needs_dpp, ptr @needs_16bit_insts, ptr @needs_gfx8_insts, ptr @needs_gfx9_insts, ptr @needs_gfx10_insts, ptr null, ptr @needs_dot1_insts, ptr @needs_dot2_insts, ptr null, ptr null, ptr @needs_dot5_insts, ptr @needs_dot6_insts, ptr @needs_dot7_insts, ptr null]
96 ; GFX11:  @GVRefs {{.*}} [ptr @needs_dpp, ptr @needs_16bit_insts, ptr @needs_gfx8_insts, ptr @needs_gfx9_insts, ptr @needs_gfx10_insts, ptr @needs_gfx11_insts, ptr null, ptr null, ptr null, ptr null, ptr @needs_dot5_insts, ptr null, ptr @needs_dot7_insts, ptr @needs_dot8_insts]
97 @GVRefs = internal global [14 x ptr] [
98   ptr @needs_dpp,
99   ptr @needs_16bit_insts,
100   ptr @needs_gfx8_insts,
101   ptr @needs_gfx9_insts,
102   ptr @needs_gfx10_insts,
103   ptr @needs_gfx11_insts,
104   ptr @needs_dot1_insts,
105   ptr @needs_dot2_insts,
106   ptr @needs_dot3_insts,
107   ptr @needs_dot4_insts,
108   ptr @needs_dot5_insts,
109   ptr @needs_dot6_insts,
110   ptr @needs_dot7_insts,
111   ptr @needs_dot8_insts
114 ; GFX7: @ConstantExpr = internal global i64 0
115 @ConstantExpr = internal global i64 ptrtoint (ptr @needs_dpp to i64)
117 define void @needs_dpp(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #0 {
118 ; GFX7-NOT:   define void @needs_dpp(
119 ; GFX8:       define void @needs_dpp(
120 ; GFX9:       define void @needs_dpp(
121 ; GFX10:      define void @needs_dpp(
122 ; GFX11:      define void @needs_dpp(
123 entry:
124   %cmp = icmp eq i64 %a, 0
125   br i1 %cmp, label %if, label %else
128   %ld = load i64, ptr %in
129   br label %endif
131 else:
132   %add = add i64 %a, %b
133   br label %endif
135 endif:
136   %phi = phi i64 [%ld, %if], [%add, %else]
137   store i64 %phi, ptr %out
138   ret void
141 define void @needs_16bit_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #1 {
142 ; GFX7-NOT:   define void @needs_16bit_insts(
143 ; GFX8:       define void @needs_16bit_insts(
144 ; GFX9:       define void @needs_16bit_insts(
145 ; GFX10:      define void @needs_16bit_insts(
146 ; GFX11:      define void @needs_16bit_insts(
147 entry:
148   %cmp = icmp eq i64 %a, 0
149   br i1 %cmp, label %if, label %else
152   %ld = load i64, ptr %in
153   br label %endif
155 else:
156   %add = add i64 %a, %b
157   br label %endif
159 endif:
160   %phi = phi i64 [%ld, %if], [%add, %else]
161   store i64 %phi, ptr %out
162   ret void
165 define void @needs_gfx8_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #2 {
166 ; GFX7-NOT:   define void @needs_gfx8_insts(
167 ; GFX8:       define void @needs_gfx8_insts(
168 ; GFX9:       define void @needs_gfx8_insts(
169 ; GFX10:      define void @needs_gfx8_insts(
170 ; GFX11:      define void @needs_gfx8_insts(
171 entry:
172   %cmp = icmp eq i64 %a, 0
173   br i1 %cmp, label %if, label %else
176   %ld = load i64, ptr %in
177   br label %endif
179 else:
180   %add = add i64 %a, %b
181   br label %endif
183 endif:
184   %phi = phi i64 [%ld, %if], [%add, %else]
185   store i64 %phi, ptr %out
186   ret void
189 define void @needs_gfx9_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #3 {
190 ; GFX7-NOT:   define void @needs_gfx9_insts(
191 ; GFX8-NOT:   define void @needs_gfx9_insts(
192 ; GFX9:       define void @needs_gfx9_insts(
193 ; GFX10:      define void @needs_gfx9_insts(
194 ; GFX11:      define void @needs_gfx9_insts(
195 entry:
196   %cmp = icmp eq i64 %a, 0
197   br i1 %cmp, label %if, label %else
200   %ld = load i64, ptr %in
201   br label %endif
203 else:
204   %add = add i64 %a, %b
205   br label %endif
207 endif:
208   %phi = phi i64 [%ld, %if], [%add, %else]
209   store i64 %phi, ptr %out
210   ret void
213 define void @needs_gfx10_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #4 {
214 ; GFX7-NOT:   define void @needs_gfx10_insts(
215 ; GFX8-NOT:   define void @needs_gfx10_insts(
216 ; GFX9-NOT:   define void @needs_gfx10_insts(
217 ; GFX10:      define void @needs_gfx10_insts(
218 ; GFX11:      define void @needs_gfx10_insts(
219 entry:
220   %cmp = icmp eq i64 %a, 0
221   br i1 %cmp, label %if, label %else
224   %ld = load i64, ptr %in
225   br label %endif
227 else:
228   %add = add i64 %a, %b
229   br label %endif
231 endif:
232   %phi = phi i64 [%ld, %if], [%add, %else]
233   store i64 %phi, ptr %out
234   ret void
237 define void @needs_gfx11_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #5 {
238 ; GFX7-NOT:   define void @needs_gfx11_insts(
239 ; GFX8-NOT:   define void @needs_gfx11_insts(
240 ; GFX9-NOT:   define void @needs_gfx11_insts(
241 ; GFX10-NOT:  define void @needs_gfx11_insts(
242 ; GFX11:      define void @needs_gfx11_insts(
243 entry:
244   %cmp = icmp eq i64 %a, 0
245   br i1 %cmp, label %if, label %else
248   %ld = load i64, ptr %in
249   br label %endif
251 else:
252   %add = add i64 %a, %b
253   br label %endif
255 endif:
256   %phi = phi i64 [%ld, %if], [%add, %else]
257   store i64 %phi, ptr %out
258   ret void
261 define void @needs_dot1_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #6 {
262 ; GFX7-NOT:     define void @needs_dot1_insts(
263 ; GFX8-NOT:     define void @needs_dot1_insts(
264 ; GFX9:         define void @needs_dot1_insts(
265 ; GFX10:        define void @needs_dot1_insts(
266 ; GFX11-NOT:    define void @needs_dot1_insts(
267   %add = add i64 %a, %b
268   store i64 %add, ptr %out
269   ret void
272 define void @needs_dot2_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #7 {
273 ; GFX7-NOT:     define void @needs_dot2_insts(
274 ; GFX8-NOT:     define void @needs_dot2_insts(
275 ; GFX9:         define void @needs_dot2_insts(
276 ; GFX10:        define void @needs_dot2_insts(
277 ; GFX11-NOT:    define void @needs_dot2_insts(
278   %add = add i64 %a, %b
279   store i64 %add, ptr %out
280   ret void
283 define void @needs_dot3_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #8 {
284 ; GFX7-NOT:   define void @needs_dot3_insts(
285 ; GFX8-NOT:   define void @needs_dot3_insts(
286 ; GFX906-NOT: define void @needs_dot3_insts(
287 ; GFX90A:     define void @needs_dot3_insts(
288 ; GFX10-NOT:  define void @needs_dot3_insts(
289 ; GFX11-NOT:  define void @needs_dot3_insts(
290   %add = add i64 %a, %b
291   store i64 %add, ptr %out
292   ret void
296 define void @needs_dot4_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #9 {
297 ; GFX7-NOT:   define void @needs_dot4_insts(
298 ; GFX8-NOT:   define void @needs_dot4_insts(
299 ; GFX906-NOT: define void @needs_dot4_insts(
300 ; GFX90A:     define void @needs_dot4_insts(
301 ; GFX10-NOT:  define void @needs_dot4_insts(
302 ; GFX11-NOT:  define void @needs_dot4_insts(
303   %add = add i64 %a, %b
304   store i64 %add, ptr %out
305   ret void
308 define void @needs_dot5_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #10 {
309 ; GFX7-NOT:   define void @needs_dot5_insts(
310 ; GFX8-NOT:   define void @needs_dot5_insts(
311 ; GFX906-NOT: define void @needs_dot5_insts(
312 ; GFX90A:     define void @needs_dot5_insts(
313 ; GFX10:      define void @needs_dot5_insts(
314 ; GFX11:      define void @needs_dot5_insts(
315   %add = add i64 %a, %b
316   store i64 %add, ptr %out
317   ret void
320 define void @needs_dot6_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #11 {
321 ; GFX7-NOT:   define void @needs_dot6_insts(
322 ; GFX8-NOT:   define void @needs_dot6_insts(
323 ; GFX906-NOT: define void @needs_dot6_insts(
324 ; GFX90A:     define void @needs_dot6_insts(
325 ; GFX10:      define void @needs_dot6_insts(
326 ; GFX11-NOT:  define void @needs_dot6_insts(
327   %add = add i64 %a, %b
328   store i64 %add, ptr %out
329   ret void
332 define void @needs_dot7_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #12 {
333 ; GFX7-NOT:   define void @needs_dot7_insts(
334 ; GFX8-NOT:   define void @needs_dot7_insts(
335 ; GFX9:       define void @needs_dot7_insts(
336 ; GFX10:      define void @needs_dot7_insts(
337 ; GFX11:      define void @needs_dot7_insts(
338   %add = add i64 %a, %b
339   store i64 %add, ptr %out
340   ret void
343 define void @needs_dot8_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) #13 {
344 ; GFX7-NOT:   define void @needs_dot8_insts(
345 ; GFX8-NOT:   define void @needs_dot8_insts(
346 ; GFX9-NOT:   define void @needs_dot8_insts(
347 ; GFX10-NOT:  define void @needs_dot8_insts(
348 ; GFX11:      define void @needs_dot8_insts(
349   %add = add i64 %a, %b
350   store i64 %add, ptr %out
351   ret void
354 ; IR: define void @caller(
355 define void @caller(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c) {
356   ; GFX7: call void null(
357   ; GFX8: call void @needs_dpp(
358   ; GFX9: call void @needs_dpp(
359   ; GFX10: call void @needs_dpp(
360   ; GFX11: call void @needs_dpp(
361   call void @needs_dpp(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
362   ; GFX7: call void null(
363   ; GFX8: call void @needs_16bit_insts(
364   ; GFX9: call void @needs_16bit_insts(
365   ; GFX10: call void @needs_16bit_insts(
366   ; GFX11: call void @needs_16bit_insts(
367   call void @needs_16bit_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
368   ; GFX7: call void null(
369   ; GFX8: call void @needs_gfx8_insts(
370   ; GFX9: call void @needs_gfx8_insts(
371   ; GFX10: call void @needs_gfx8_insts(
372   ; GFX11: call void @needs_gfx8_insts(
373   call void @needs_gfx8_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
374   ; GFX7: call void null(
375   ; GFX8: call void null(
376   ; GFX9: call void @needs_gfx9_insts(
377   ; GFX10: call void @needs_gfx9_insts(
378   ; GFX111: call void @needs_gfx9_insts(c
379   call void @needs_gfx9_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
380   ; GFX7: call void null(
381   ; GFX8: call void null(
382   ; GFX9: call void null(
383   ; GFX10: call void @needs_gfx10_insts(
384   ; GFX111: call void @needs_gfx10_insts(
385   call void @needs_gfx10_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
386   ; GFX7: call void null(
387   ; GFX8: call void null(
388   ; GFX9: call void null(
389   ; GFX10: call void null(
390   ; GFX11: call void @needs_gfx11_insts(
391   call void @needs_gfx11_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
392   ; GFX7: call void null(
393   ; GFX8: call void null(
394   ; GFX9: call void @needs_dot1_insts(
395   ; GFX10: call void @needs_dot1_insts(
396   ; GFX11: call void null(
397   call void @needs_dot1_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
398   ; GFX7: call void null(
399   ; GFX8: call void null(
400   ; GFX9: call void @needs_dot2_insts(
401   ; GFX10: call void @needs_dot2_insts(
402   ; GFX11: call void null(
403   call void @needs_dot2_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
404   ; GFX7: call void null(
405   ; GFX8: call void null(
406   ; GFX906: call void null(
407   ; GFX90A: call void @needs_dot3_insts(
408   ; GFX10: call void null(
409   ; GFX11: call void null(
410   call void @needs_dot3_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
411   ; GFX7: call void null(
412   ; GFX8: call void null(
413   ; GFX906: call void null(
414   ; GFX90A: call void @needs_dot4_insts(
415   ; GFX10: call void null(
416   ; GFX11: call void null(
417   call void @needs_dot4_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
418   ; GFX7: call void null(
419   ; GFX8: call void null(
420   ; GFX906: call void null(
421   ; GFX90A: call void @needs_dot5_insts(
422   ; GFX10: call void @needs_dot5_insts(
423   ; GFX11: call void @needs_dot5_insts(
424   call void @needs_dot5_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
425   ; GFX7: call void null(
426   ; GFX8: call void null(
427   ; GFX906: call void null(
428   ; GFX90A: call void @needs_dot6_insts(
429   ; GFX10: call void @needs_dot6_insts(
430   ; GFX11: call void null(
431   call void @needs_dot6_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
432   ; GFX7: call void null(
433   ; GFX8: call void null(
434   ; GFX9: call void @needs_dot7_insts(
435   ; GFX10: call void @needs_dot7_insts(
436   ; GFX11: call void @needs_dot7_insts(
437   call void @needs_dot7_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
438   ; GFX7: call void null(
439   ; GFX8: call void null(
440   ; GFX9: call void null(
441   ; GFX10: call void null(
442   ; GFX11: call void @needs_dot8_insts(
443   call void @needs_dot8_insts(ptr %out, ptr %in, i64 %a, i64 %b, i64 %c)
444   ; IR: ret void
445   ret void
448 attributes #0 = { "target-features"="+dpp" }
449 attributes #1 = { "target-features"="+16-bit-insts" }
450 attributes #2 = { "target-features"="+gfx8-insts" }
451 attributes #3 = { "target-features"="+gfx9-insts" }
452 attributes #4 = { "target-features"="+gfx10-insts" }
453 attributes #5 = { "target-features"="+gfx11-insts" }
454 attributes #6 = { "target-features"="+dot1-insts" }
455 attributes #7 = { "target-features"="+dot2-insts" }
456 attributes #8 = { "target-features"="+dot3-insts" }
457 attributes #9 = { "target-features"="+dot4-insts" }
458 attributes #10 = { "target-features"="+dot5-insts" }
459 attributes #11 = { "target-features"="+dot6-insts" }
460 attributes #12 = { "target-features"="+dot7-insts" }
461 attributes #13 = { "target-features"="+dot8-insts" }