Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-scalar-float-sop2.mir
blob48b4534c871ee0cb92301d6a8b5109e00ef1a569
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx1150 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX1150 %s
4 ---
5 name:            fadd_f32
6 legalized:       true
7 regBankSelected: true
8 body:             |
9   bb.0:
10     liveins: $sgpr0, $sgpr1
12     ; GFX1150-LABEL: name: fadd_f32
13     ; GFX1150: liveins: $sgpr0, $sgpr1
14     ; GFX1150-NEXT: {{  $}}
15     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
16     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
17     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_ADD_F32 [[COPY]], [[COPY1]], implicit $mode
18     ; GFX1150-NEXT: $sgpr0 = COPY %2
19     %0:sgpr(s32) = COPY $sgpr0
20     %1:sgpr(s32) = COPY $sgpr1
21     %2:sgpr(s32) = G_FADD %0, %1
22     $sgpr0 = COPY %2(s32)
24 ...
25 ---
26 name:            fsub_f32
27 legalized:       true
28 regBankSelected: true
29 body:             |
30   bb.0:
31     liveins: $sgpr0, $sgpr1
33     ; GFX1150-LABEL: name: fsub_f32
34     ; GFX1150: liveins: $sgpr0, $sgpr1
35     ; GFX1150-NEXT: {{  $}}
36     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
37     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
38     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_SUB_F32 [[COPY]], [[COPY1]], implicit $mode
39     ; GFX1150-NEXT: $sgpr0 = COPY %2
40     %0:sgpr(s32) = COPY $sgpr0
41     %1:sgpr(s32) = COPY $sgpr1
42     %2:sgpr(s32) = G_FSUB %0, %1
43     $sgpr0 = COPY %2(s32)
45 ...
46 ---
47 name:            fmul_f32
48 legalized:       true
49 regBankSelected: true
50 body:             |
51   bb.0:
52     liveins: $sgpr0, $sgpr1
54     ; GFX1150-LABEL: name: fmul_f32
55     ; GFX1150: liveins: $sgpr0, $sgpr1
56     ; GFX1150-NEXT: {{  $}}
57     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
58     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
59     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_MUL_F32 [[COPY]], [[COPY1]], implicit $mode
60     ; GFX1150-NEXT: $sgpr0 = COPY %2
61     %0:sgpr(s32) = COPY $sgpr0
62     %1:sgpr(s32) = COPY $sgpr1
63     %2:sgpr(s32) = G_FMUL %0, %1
64     $sgpr0 = COPY %2(s32)
66 ...
67 ---
68 name:            fmin_f32
69 legalized:       true
70 regBankSelected: true
71 body:             |
72   bb.0:
73     liveins: $sgpr0, $sgpr1
75     ; GFX1150-LABEL: name: fmin_f32
76     ; GFX1150: liveins: $sgpr0, $sgpr1
77     ; GFX1150-NEXT: {{  $}}
78     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
79     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
80     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_MIN_F32 [[COPY]], [[COPY1]], implicit $mode
81     ; GFX1150-NEXT: $sgpr0 = COPY %2
82     %0:sgpr(s32) = COPY $sgpr0
83     %1:sgpr(s32) = COPY $sgpr1
84     %2:sgpr(s32) = G_FMINNUM %0, %1
85     $sgpr0 = COPY %2(s32)
87 ...
88 ---
89 name:            fmax_f32
90 legalized:       true
91 regBankSelected: true
92 body:             |
93   bb.0:
94     liveins: $sgpr0, $sgpr1
96     ; GFX1150-LABEL: name: fmax_f32
97     ; GFX1150: liveins: $sgpr0, $sgpr1
98     ; GFX1150-NEXT: {{  $}}
99     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
100     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
101     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_MAX_F32 [[COPY]], [[COPY1]], implicit $mode
102     ; GFX1150-NEXT: $sgpr0 = COPY %2
103     %0:sgpr(s32) = COPY $sgpr0
104     %1:sgpr(s32) = COPY $sgpr1
105     %2:sgpr(s32) = G_FMAXNUM %0, %1
106     $sgpr0 = COPY %2(s32)
110 name:            fadd_f16
111 legalized:       true
112 regBankSelected: true
113 body:             |
114   bb.0:
115     liveins: $sgpr0, $sgpr1
117     ; GFX1150-LABEL: name: fadd_f16
118     ; GFX1150: liveins: $sgpr0, $sgpr1
119     ; GFX1150-NEXT: {{  $}}
120     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
121     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
122     ; GFX1150-NEXT: %4:sreg_32 = nofpexcept S_ADD_F16 [[COPY]], [[COPY1]], implicit $mode
123     ; GFX1150-NEXT: $sgpr0 = COPY %4
124     %0:sgpr(s32) = COPY $sgpr0
125     %1:sgpr(s16) = G_TRUNC %0(s32)
126     %2:sgpr(s32) = COPY $sgpr1
127     %3:sgpr(s16) = G_TRUNC %2(s32)
128     %4:sgpr(s16) = G_FADD %1, %3
129     %5:sgpr(s32) = G_ANYEXT %4(s16)
130     $sgpr0 = COPY %5(s32)
134 name:            fsub_f16
135 legalized:       true
136 regBankSelected: true
137 body:             |
138  bb.0:
139     liveins: $sgpr0, $sgpr1
141     ; GFX1150-LABEL: name: fsub_f16
142     ; GFX1150: liveins: $sgpr0, $sgpr1
143     ; GFX1150-NEXT: {{  $}}
144     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
145     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
146     ; GFX1150-NEXT: %4:sreg_32 = nofpexcept S_SUB_F16 [[COPY]], [[COPY1]], implicit $mode
147     ; GFX1150-NEXT: $sgpr0 = COPY %4
148     %0:sgpr(s32) = COPY $sgpr0
149     %1:sgpr(s16) = G_TRUNC %0(s32)
150     %2:sgpr(s32) = COPY $sgpr1
151     %3:sgpr(s16) = G_TRUNC %2(s32)
152     %4:sgpr(s16) = G_FSUB %1, %3
153     %5:sgpr(s32) = G_ANYEXT %4(s16)
154     $sgpr0 = COPY %5(s32)
158 name:            fmul_f16
159 legalized:       true
160 regBankSelected: true
161 body:             |
162   bb.0:
163     liveins: $sgpr0, $sgpr1
165     ; GFX1150-LABEL: name: fmul_f16
166     ; GFX1150: liveins: $sgpr0, $sgpr1
167     ; GFX1150-NEXT: {{  $}}
168     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
169     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
170     ; GFX1150-NEXT: %4:sreg_32 = nofpexcept S_MUL_F16 [[COPY]], [[COPY1]], implicit $mode
171     ; GFX1150-NEXT: $sgpr0 = COPY %4
172     %0:sgpr(s32) = COPY $sgpr0
173     %1:sgpr(s16) = G_TRUNC %0(s32)
174     %2:sgpr(s32) = COPY $sgpr1
175     %3:sgpr(s16) = G_TRUNC %2(s32)
176     %4:sgpr(s16) = G_FMUL %1, %3
177     %5:sgpr(s32) = G_ANYEXT %4(s16)
178     $sgpr0 = COPY %5(s32)
182 name:            fmin_f16
183 legalized:       true
184 regBankSelected: true
185 body:             |
186   bb.0:
187     liveins: $sgpr0, $sgpr1
189     ; GFX1150-LABEL: name: fmin_f16
190     ; GFX1150: liveins: $sgpr0, $sgpr1
191     ; GFX1150-NEXT: {{  $}}
192     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
193     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
194     ; GFX1150-NEXT: %4:sreg_32 = nofpexcept S_MIN_F16 [[COPY]], [[COPY1]], implicit $mode
195     ; GFX1150-NEXT: $sgpr0 = COPY %4
196     %0:sgpr(s32) = COPY $sgpr0
197     %1:sgpr(s16) = G_TRUNC %0(s32)
198     %2:sgpr(s32) = COPY $sgpr1
199     %3:sgpr(s16) = G_TRUNC %2(s32)
200     %4:sgpr(s16) = G_FMINNUM %1, %3
201     %5:sgpr(s32) = G_ANYEXT %4(s16)
202     $sgpr0 = COPY %5(s32)
206 name:            fmax_f16
207 legalized:       true
208 regBankSelected: true
209 body:             |
210   bb.0:
211     liveins: $sgpr0, $sgpr1
213     ; GFX1150-LABEL: name: fmax_f16
214     ; GFX1150: liveins: $sgpr0, $sgpr1
215     ; GFX1150-NEXT: {{  $}}
216     %0:sgpr(s32) = COPY $sgpr0
217     %1:sgpr(s16) = G_TRUNC %0(s32)
218     %2:sgpr(s32) = COPY $sgpr1
219     %3:sgpr(s16) = G_TRUNC %2(s32)
220     %4:sgpr(s16) = G_FMAXNUM %1, %3
221     %5:sgpr(s32) = G_ANYEXT %4(s16)
225 name:            s_cvt_pkrtz_v2f16_f32
226 legalized:       true
227 regBankSelected: true
228 body:             |
229   bb.0:
230     liveins: $sgpr0, $sgpr1
232     ; GFX1150-LABEL: name: s_cvt_pkrtz_v2f16_f32
233     ; GFX1150: liveins: $sgpr0, $sgpr1
234     ; GFX1150-NEXT: {{  $}}
235     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
236     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
237     ; GFX1150-NEXT: %2:sreg_32 = nofpexcept S_CVT_PK_RTZ_F16_F32 [[COPY]], [[COPY1]], implicit $mode
238     ; GFX1150-NEXT: $sgpr0 = COPY %2
239     %0:sgpr(s32) = COPY $sgpr0
240     %1:sgpr(s32) = COPY $sgpr1
241     %2:sgpr(<2 x s16>) = G_INTRINSIC intrinsic(@llvm.amdgcn.cvt.pkrtz), %0(s32), %1(s32)
242     $sgpr0 = COPY %2(<2 x s16>)
246 name:            fmac_f32
247 legalized:       true
248 regBankSelected: true
249 body:             |
250   bb.0:
251     liveins: $sgpr0, $sgpr1, $sgpr2
253     ; GFX1150-LABEL: name: fmac_f32
254     ; GFX1150: liveins: $sgpr0, $sgpr1, $sgpr2
255     ; GFX1150-NEXT: {{  $}}
256     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
257     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
258     ; GFX1150-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
259     ; GFX1150-NEXT: %3:sreg_32 = nofpexcept S_FMAC_F32 [[COPY1]], [[COPY2]], [[COPY]], implicit $mode
260     ; GFX1150-NEXT: $sgpr0 = COPY %3
261     %0:sgpr(s32) = COPY $sgpr0
262     %1:sgpr(s32) = COPY $sgpr1
263     %2:sgpr(s32) = COPY $sgpr2
264     %3:sgpr(s32) = G_FMA %1, %2, %0
265     $sgpr0 = COPY %3(s32)
269 name:            fmac_f16
270 legalized:       true
271 regBankSelected: true
272 body:             |
273   bb.0:
274     liveins: $sgpr0, $sgpr1, $sgpr2
276     ; GFX1150-LABEL: name: fmac_f16
277     ; GFX1150: liveins: $sgpr0, $sgpr1, $sgpr2
278     ; GFX1150-NEXT: {{  $}}
279     ; GFX1150-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
280     ; GFX1150-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1
281     ; GFX1150-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2
282     ; GFX1150-NEXT: %6:sreg_32 = nofpexcept S_FMAC_F16 [[COPY1]], [[COPY2]], [[COPY]], implicit $mode
283     ; GFX1150-NEXT: $sgpr0 = COPY %6
284     %0:sgpr(s32) = COPY $sgpr0
285     %1:sgpr(s16) = G_TRUNC %0(s32)
286     %2:sgpr(s32) = COPY $sgpr1
287     %3:sgpr(s16) = G_TRUNC %2(s32)
288     %4:sgpr(s32) = COPY $sgpr2
289     %5:sgpr(s16) = G_TRUNC %4(s32)
290     %6:sgpr(s16) = G_FMA %3, %5, %1
291     %7:sgpr(s32) = G_ANYEXT %6(s16)
292     $sgpr0 = COPY %7(s32)