xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fma.s32.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX6 %s
3# RUN: llc -mtriple=amdgcn -mcpu=gfx906 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9-DL %s
4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
6
7---
8
9name:            fma_f32
10legalized:       true
11regBankSelected: true
12
13body: |
14  bb.0:
15    liveins: $vgpr0, $vgpr1, $vgpr2
16
17    ; GFX6-LABEL: name: fma_f32
18    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
19    ; GFX6-NEXT: {{  $}}
20    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
21    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
22    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
23    ; GFX6-NEXT: %3:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
24    ; GFX6-NEXT: S_ENDPGM 0, implicit %3
25    ; GFX9-DL-LABEL: name: fma_f32
26    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
27    ; GFX9-DL-NEXT: {{  $}}
28    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
29    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
30    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
31    ; GFX9-DL-NEXT: %3:vgpr_32 = nofpexcept V_FMAC_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
32    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %3
33    ; GFX10-LABEL: name: fma_f32
34    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
35    ; GFX10-NEXT: {{  $}}
36    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
37    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
38    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
39    ; GFX10-NEXT: %3:vgpr_32 = nofpexcept V_FMAC_F32_e64 0, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
40    ; GFX10-NEXT: S_ENDPGM 0, implicit %3
41    %0:vgpr(s32) = COPY $vgpr0
42    %1:vgpr(s32) = COPY $vgpr1
43    %2:vgpr(s32) = COPY $vgpr2
44    %3:vgpr(s32) = G_FMA %0, %1, %2
45    S_ENDPGM 0, implicit %3
46
47...
48
49---
50
51name:            fma_f32_fneg_src0
52legalized:       true
53regBankSelected: true
54
55body: |
56  bb.0:
57    liveins: $vgpr0, $vgpr1, $vgpr2
58
59    ; GFX6-LABEL: name: fma_f32_fneg_src0
60    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
61    ; GFX6-NEXT: {{  $}}
62    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
63    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
64    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
65    ; GFX6-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 1, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
66    ; GFX6-NEXT: S_ENDPGM 0, implicit %4
67    ; GFX9-DL-LABEL: name: fma_f32_fneg_src0
68    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
69    ; GFX9-DL-NEXT: {{  $}}
70    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
71    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
72    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
73    ; GFX9-DL-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 1, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
74    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %4
75    ; GFX10-LABEL: name: fma_f32_fneg_src0
76    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
77    ; GFX10-NEXT: {{  $}}
78    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
79    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
80    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
81    ; GFX10-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 1, [[COPY]], 0, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
82    ; GFX10-NEXT: S_ENDPGM 0, implicit %4
83    %0:vgpr(s32) = COPY $vgpr0
84    %1:vgpr(s32) = COPY $vgpr1
85    %2:vgpr(s32) = COPY $vgpr2
86    %3:vgpr(s32) = G_FNEG %0
87    %4:vgpr(s32) = G_FMA %3, %1, %2
88    S_ENDPGM 0, implicit %4
89
90...
91
92---
93
94name:            fma_f32_fneg_src1
95legalized:       true
96regBankSelected: true
97
98body: |
99  bb.0:
100    liveins: $vgpr0, $vgpr1, $vgpr2
101
102    ; GFX6-LABEL: name: fma_f32_fneg_src1
103    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
104    ; GFX6-NEXT: {{  $}}
105    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
106    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
107    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
108    ; GFX6-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 1, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
109    ; GFX6-NEXT: S_ENDPGM 0, implicit %4
110    ; GFX9-DL-LABEL: name: fma_f32_fneg_src1
111    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
112    ; GFX9-DL-NEXT: {{  $}}
113    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
114    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
115    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
116    ; GFX9-DL-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 1, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
117    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %4
118    ; GFX10-LABEL: name: fma_f32_fneg_src1
119    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
120    ; GFX10-NEXT: {{  $}}
121    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
122    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
123    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
124    ; GFX10-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 1, [[COPY1]], 0, [[COPY2]], 0, 0, implicit $mode, implicit $exec
125    ; GFX10-NEXT: S_ENDPGM 0, implicit %4
126    %0:vgpr(s32) = COPY $vgpr0
127    %1:vgpr(s32) = COPY $vgpr1
128    %2:vgpr(s32) = COPY $vgpr2
129    %3:vgpr(s32) = G_FNEG %1
130    %4:vgpr(s32) = G_FMA %0, %3, %2
131    S_ENDPGM 0, implicit %4
132
133...
134
135---
136
137name:            fma_f32_fneg_src2
138legalized:       true
139regBankSelected: true
140
141body: |
142  bb.0:
143    liveins: $vgpr0, $vgpr1, $vgpr2
144
145    ; GFX6-LABEL: name: fma_f32_fneg_src2
146    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
147    ; GFX6-NEXT: {{  $}}
148    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
149    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
150    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
151    ; GFX6-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
152    ; GFX6-NEXT: S_ENDPGM 0, implicit %4
153    ; GFX9-DL-LABEL: name: fma_f32_fneg_src2
154    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
155    ; GFX9-DL-NEXT: {{  $}}
156    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
157    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
158    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
159    ; GFX9-DL-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
160    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %4
161    ; GFX10-LABEL: name: fma_f32_fneg_src2
162    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
163    ; GFX10-NEXT: {{  $}}
164    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
165    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
166    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
167    ; GFX10-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
168    ; GFX10-NEXT: S_ENDPGM 0, implicit %4
169    %0:vgpr(s32) = COPY $vgpr0
170    %1:vgpr(s32) = COPY $vgpr1
171    %2:vgpr(s32) = COPY $vgpr2
172    %3:vgpr(s32) = G_FNEG %2
173    %4:vgpr(s32) = G_FMA %0, %1, %3
174    S_ENDPGM 0, implicit %4
175
176...
177
178---
179
180name:            fma_f32_fabs_src2
181legalized:       true
182regBankSelected: true
183
184body: |
185  bb.0:
186    liveins: $vgpr0, $vgpr1, $vgpr2
187
188    ; GFX6-LABEL: name: fma_f32_fabs_src2
189    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
190    ; GFX6-NEXT: {{  $}}
191    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
192    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
193    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
194    ; GFX6-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 2, [[COPY2]], 0, 0, implicit $mode, implicit $exec
195    ; GFX6-NEXT: S_ENDPGM 0, implicit %4
196    ; GFX9-DL-LABEL: name: fma_f32_fabs_src2
197    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
198    ; GFX9-DL-NEXT: {{  $}}
199    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
200    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
201    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
202    ; GFX9-DL-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 2, [[COPY2]], 0, 0, implicit $mode, implicit $exec
203    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %4
204    ; GFX10-LABEL: name: fma_f32_fabs_src2
205    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
206    ; GFX10-NEXT: {{  $}}
207    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
208    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
209    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
210    ; GFX10-NEXT: %4:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 2, [[COPY2]], 0, 0, implicit $mode, implicit $exec
211    ; GFX10-NEXT: S_ENDPGM 0, implicit %4
212    %0:vgpr(s32) = COPY $vgpr0
213    %1:vgpr(s32) = COPY $vgpr1
214    %2:vgpr(s32) = COPY $vgpr2
215    %3:vgpr(s32) = G_FABS %2
216    %4:vgpr(s32) = G_FMA %0, %1, %3
217    S_ENDPGM 0, implicit %4
218
219...
220
221---
222
223name:            fma_f32_copy_fneg_src2
224legalized:       true
225regBankSelected: true
226
227body: |
228  bb.0:
229    liveins: $vgpr0, $vgpr1, $vgpr2
230
231    ; GFX6-LABEL: name: fma_f32_copy_fneg_src2
232    ; GFX6: liveins: $vgpr0, $vgpr1, $vgpr2
233    ; GFX6-NEXT: {{  $}}
234    ; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
235    ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
236    ; GFX6-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
237    ; GFX6-NEXT: %5:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
238    ; GFX6-NEXT: S_ENDPGM 0, implicit %5
239    ; GFX9-DL-LABEL: name: fma_f32_copy_fneg_src2
240    ; GFX9-DL: liveins: $vgpr0, $vgpr1, $vgpr2
241    ; GFX9-DL-NEXT: {{  $}}
242    ; GFX9-DL-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
243    ; GFX9-DL-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
244    ; GFX9-DL-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
245    ; GFX9-DL-NEXT: %5:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
246    ; GFX9-DL-NEXT: S_ENDPGM 0, implicit %5
247    ; GFX10-LABEL: name: fma_f32_copy_fneg_src2
248    ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr2
249    ; GFX10-NEXT: {{  $}}
250    ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
251    ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
252    ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2
253    ; GFX10-NEXT: %5:vgpr_32 = nofpexcept V_FMA_F32_e64 0, [[COPY]], 0, [[COPY1]], 1, [[COPY2]], 0, 0, implicit $mode, implicit $exec
254    ; GFX10-NEXT: S_ENDPGM 0, implicit %5
255    %0:vgpr(s32) = COPY $vgpr0
256    %1:vgpr(s32) = COPY $vgpr1
257    %2:vgpr(s32) = COPY $vgpr2
258    %3:vgpr(s32) = G_FNEG %2
259    %4:vgpr(s32) = COPY %3
260    %5:vgpr(s32) = G_FMA %0, %1, %4
261    S_ENDPGM 0, implicit %5
262
263...
264