Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-fneg.mir
blob1cabc4da5ed81a6a6925e259a9a0311d96cb51ca
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=tahiti -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=SI %s
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=VI %s
4 # RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
5 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
6 # RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -global-isel-abort=0 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s
8 ---
9 name: fneg_s32_ss
10 legalized: true
11 regBankSelected: true
12 tracksRegLiveness: true
14 body: |
15   bb.0:
16     liveins: $sgpr0
17     ; SI-LABEL: name: fneg_s32_ss
18     ; SI: liveins: $sgpr0
19     ; SI-NEXT: {{  $}}
20     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
21     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
22     ; SI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
23     ; SI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
24     ;
25     ; VI-LABEL: name: fneg_s32_ss
26     ; VI: liveins: $sgpr0
27     ; VI-NEXT: {{  $}}
28     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
29     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
30     ; VI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
31     ; VI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
32     ;
33     ; GFX9-LABEL: name: fneg_s32_ss
34     ; GFX9: liveins: $sgpr0
35     ; GFX9-NEXT: {{  $}}
36     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
37     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
38     ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
39     ; GFX9-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
40     ;
41     ; GFX10-LABEL: name: fneg_s32_ss
42     ; GFX10: liveins: $sgpr0
43     ; GFX10-NEXT: {{  $}}
44     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
45     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
46     ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
47     ; GFX10-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
48     %0:sgpr(s32) = COPY $sgpr0
49     %1:sgpr(s32) = G_FNEG %0
50     $sgpr0 = COPY %1
51 ...
53 ---
54 name: fneg_s32_vv
55 legalized: true
56 regBankSelected: true
57 tracksRegLiveness: true
59 body: |
60   bb.0:
61     liveins: $vgpr0
62     ; SI-LABEL: name: fneg_s32_vv
63     ; SI: liveins: $vgpr0
64     ; SI-NEXT: {{  $}}
65     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
66     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
67     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
68     ; SI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
69     ;
70     ; VI-LABEL: name: fneg_s32_vv
71     ; VI: liveins: $vgpr0
72     ; VI-NEXT: {{  $}}
73     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
74     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
75     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
76     ; VI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
77     ;
78     ; GFX9-LABEL: name: fneg_s32_vv
79     ; GFX9: liveins: $vgpr0
80     ; GFX9-NEXT: {{  $}}
81     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
82     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
83     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
84     ; GFX9-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
85     ;
86     ; GFX10-LABEL: name: fneg_s32_vv
87     ; GFX10: liveins: $vgpr0
88     ; GFX10-NEXT: {{  $}}
89     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
90     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
91     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
92     ; GFX10-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
93     %0:vgpr(s32) = COPY $vgpr0
94     %1:vgpr(s32) = G_FNEG %0
95     $vgpr0 = COPY %1
96 ...
98 ---
99 name: fneg_s32_vs
100 legalized: true
101 regBankSelected: true
102 tracksRegLiveness: true
104 body: |
105   bb.0:
106     liveins: $sgpr0
107     ; SI-LABEL: name: fneg_s32_vs
108     ; SI: liveins: $sgpr0
109     ; SI-NEXT: {{  $}}
110     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
111     ; SI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]]
112     ; SI-NEXT: $vgpr0 = COPY [[FNEG]](s32)
113     ;
114     ; VI-LABEL: name: fneg_s32_vs
115     ; VI: liveins: $sgpr0
116     ; VI-NEXT: {{  $}}
117     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
118     ; VI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]]
119     ; VI-NEXT: $vgpr0 = COPY [[FNEG]](s32)
120     ;
121     ; GFX9-LABEL: name: fneg_s32_vs
122     ; GFX9: liveins: $sgpr0
123     ; GFX9-NEXT: {{  $}}
124     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
125     ; GFX9-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]]
126     ; GFX9-NEXT: $vgpr0 = COPY [[FNEG]](s32)
127     ;
128     ; GFX10-LABEL: name: fneg_s32_vs
129     ; GFX10: liveins: $sgpr0
130     ; GFX10-NEXT: {{  $}}
131     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
132     ; GFX10-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]]
133     ; GFX10-NEXT: $vgpr0 = COPY [[FNEG]](s32)
134     %0:sgpr(s32) = COPY $sgpr0
135     %1:vgpr(s32) = G_FNEG %0
136     $vgpr0 = COPY %1
140 name: fneg_s16_ss
141 legalized: true
142 regBankSelected: true
143 tracksRegLiveness: true
145 body: |
146   bb.0:
147     liveins: $sgpr0
148     ; SI-LABEL: name: fneg_s16_ss
149     ; SI: liveins: $sgpr0
150     ; SI-NEXT: {{  $}}
151     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
152     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
153     ; SI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
154     ; SI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
155     ;
156     ; VI-LABEL: name: fneg_s16_ss
157     ; VI: liveins: $sgpr0
158     ; VI-NEXT: {{  $}}
159     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
160     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
161     ; VI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
162     ; VI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
163     ;
164     ; GFX9-LABEL: name: fneg_s16_ss
165     ; GFX9: liveins: $sgpr0
166     ; GFX9-NEXT: {{  $}}
167     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
168     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
169     ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
170     ; GFX9-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
171     ;
172     ; GFX10-LABEL: name: fneg_s16_ss
173     ; GFX10: liveins: $sgpr0
174     ; GFX10-NEXT: {{  $}}
175     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
176     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
177     ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
178     ; GFX10-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
179     %0:sgpr(s32) = COPY $sgpr0
180     %1:sgpr(s16) = G_TRUNC %0
181     %2:sgpr(s16) = G_FNEG %1
182     %3:sgpr(s32) = G_ANYEXT %2
183     $sgpr0 = COPY %3
187 name: fneg_s16_vv
188 legalized: true
189 regBankSelected: true
190 tracksRegLiveness: true
192 body: |
193   bb.0:
194     liveins: $vgpr0
195     ; SI-LABEL: name: fneg_s16_vv
196     ; SI: liveins: $vgpr0
197     ; SI-NEXT: {{  $}}
198     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
199     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
200     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
201     ; SI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
202     ;
203     ; VI-LABEL: name: fneg_s16_vv
204     ; VI: liveins: $vgpr0
205     ; VI-NEXT: {{  $}}
206     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
207     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
208     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
209     ; VI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
210     ;
211     ; GFX9-LABEL: name: fneg_s16_vv
212     ; GFX9: liveins: $vgpr0
213     ; GFX9-NEXT: {{  $}}
214     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
215     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
216     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
217     ; GFX9-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
218     ;
219     ; GFX10-LABEL: name: fneg_s16_vv
220     ; GFX10: liveins: $vgpr0
221     ; GFX10-NEXT: {{  $}}
222     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
223     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
224     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
225     ; GFX10-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
226     %0:vgpr(s32) = COPY $vgpr0
227     %1:vgpr(s16) = G_TRUNC %0
228     %2:vgpr(s16) = G_FNEG %1
229     %3:vgpr(s32) = G_ANYEXT %2
230     $vgpr0 = COPY %3
234 name: fneg_s16_vs
235 legalized: true
236 regBankSelected: true
237 tracksRegLiveness: true
239 body: |
240   bb.0:
241     liveins: $sgpr0
243     ; SI-LABEL: name: fneg_s16_vs
244     ; SI: liveins: $sgpr0
245     ; SI-NEXT: {{  $}}
246     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
247     ; SI-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
248     ; SI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[TRUNC]]
249     ; SI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FNEG]](s16)
250     ; SI-NEXT: $vgpr0 = COPY [[COPY1]](s32)
251     ;
252     ; VI-LABEL: name: fneg_s16_vs
253     ; VI: liveins: $sgpr0
254     ; VI-NEXT: {{  $}}
255     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
256     ; VI-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
257     ; VI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[TRUNC]]
258     ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FNEG]](s16)
259     ; VI-NEXT: $vgpr0 = COPY [[COPY1]](s32)
260     ;
261     ; GFX9-LABEL: name: fneg_s16_vs
262     ; GFX9: liveins: $sgpr0
263     ; GFX9-NEXT: {{  $}}
264     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
265     ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
266     ; GFX9-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[TRUNC]]
267     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FNEG]](s16)
268     ; GFX9-NEXT: $vgpr0 = COPY [[COPY1]](s32)
269     ;
270     ; GFX10-LABEL: name: fneg_s16_vs
271     ; GFX10: liveins: $sgpr0
272     ; GFX10-NEXT: {{  $}}
273     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
274     ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
275     ; GFX10-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[TRUNC]]
276     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FNEG]](s16)
277     ; GFX10-NEXT: $vgpr0 = COPY [[COPY1]](s32)
278     %0:sgpr(s32) = COPY $sgpr0
279     %1:sgpr(s16) = G_TRUNC %0
280     %2:vgpr(s16) = G_FNEG %1
281     %3:vgpr(s32) = G_ANYEXT %2
282     $vgpr0 = COPY %3
286 name: fneg_v2s16_ss
287 legalized: true
288 regBankSelected: true
289 tracksRegLiveness: true
291 body: |
292   bb.0:
293     liveins: $sgpr0_sgpr1
294     ; SI-LABEL: name: fneg_v2s16_ss
295     ; SI: liveins: $sgpr0_sgpr1
296     ; SI-NEXT: {{  $}}
297     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
298     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
299     ; SI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
300     ; SI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
301     ;
302     ; VI-LABEL: name: fneg_v2s16_ss
303     ; VI: liveins: $sgpr0_sgpr1
304     ; VI-NEXT: {{  $}}
305     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
306     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
307     ; VI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
308     ; VI-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
309     ;
310     ; GFX9-LABEL: name: fneg_v2s16_ss
311     ; GFX9: liveins: $sgpr0_sgpr1
312     ; GFX9-NEXT: {{  $}}
313     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
314     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
315     ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
316     ; GFX9-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
317     ;
318     ; GFX10-LABEL: name: fneg_v2s16_ss
319     ; GFX10: liveins: $sgpr0_sgpr1
320     ; GFX10-NEXT: {{  $}}
321     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
322     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
323     ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
324     ; GFX10-NEXT: $sgpr0 = COPY [[S_XOR_B32_]]
325     %0:sgpr(<2 x s16>) = COPY $sgpr0
326     %1:sgpr(<2 x s16>) = G_FNEG %0
327     $sgpr0 = COPY %1
331 name: fneg_v2s16_vv
332 legalized: true
333 regBankSelected: true
334 tracksRegLiveness: true
336 body: |
337   bb.0:
338     liveins: $vgpr0
339     ; SI-LABEL: name: fneg_v2s16_vv
340     ; SI: liveins: $vgpr0
341     ; SI-NEXT: {{  $}}
342     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
343     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
344     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
345     ; SI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
346     ;
347     ; VI-LABEL: name: fneg_v2s16_vv
348     ; VI: liveins: $vgpr0
349     ; VI-NEXT: {{  $}}
350     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
351     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
352     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
353     ; VI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
354     ;
355     ; GFX9-LABEL: name: fneg_v2s16_vv
356     ; GFX9: liveins: $vgpr0
357     ; GFX9-NEXT: {{  $}}
358     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
359     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
360     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
361     ; GFX9-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
362     ;
363     ; GFX10-LABEL: name: fneg_v2s16_vv
364     ; GFX10: liveins: $vgpr0
365     ; GFX10-NEXT: {{  $}}
366     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
367     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
368     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
369     ; GFX10-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
370     %0:vgpr(<2 x s16>) = COPY $vgpr0
371     %1:vgpr(<2 x s16>) = G_FNEG %0
372     $vgpr0 = COPY %1
376 name: fneg_v2s16_vs
377 legalized: true
378 regBankSelected: true
379 tracksRegLiveness: true
381 body: |
382   bb.0:
383     liveins: $sgpr0
384     ; SI-LABEL: name: fneg_v2s16_vs
385     ; SI: liveins: $sgpr0
386     ; SI-NEXT: {{  $}}
387     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
388     ; SI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FNEG [[COPY]]
389     ; SI-NEXT: $vgpr0 = COPY [[FNEG]](<2 x s16>)
390     ;
391     ; VI-LABEL: name: fneg_v2s16_vs
392     ; VI: liveins: $sgpr0
393     ; VI-NEXT: {{  $}}
394     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
395     ; VI-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FNEG [[COPY]]
396     ; VI-NEXT: $vgpr0 = COPY [[FNEG]](<2 x s16>)
397     ;
398     ; GFX9-LABEL: name: fneg_v2s16_vs
399     ; GFX9: liveins: $sgpr0
400     ; GFX9-NEXT: {{  $}}
401     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
402     ; GFX9-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FNEG [[COPY]]
403     ; GFX9-NEXT: $vgpr0 = COPY [[FNEG]](<2 x s16>)
404     ;
405     ; GFX10-LABEL: name: fneg_v2s16_vs
406     ; GFX10: liveins: $sgpr0
407     ; GFX10-NEXT: {{  $}}
408     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
409     ; GFX10-NEXT: [[FNEG:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FNEG [[COPY]]
410     ; GFX10-NEXT: $vgpr0 = COPY [[FNEG]](<2 x s16>)
411     %0:sgpr(<2 x s16>) = COPY $sgpr0
412     %1:vgpr(<2 x s16>) = G_FNEG %0
413     $vgpr0 = COPY %1
417 name: fneg_s64_ss
418 legalized: true
419 regBankSelected: true
420 tracksRegLiveness: true
422 body: |
423   bb.0:
424     liveins: $sgpr0_sgpr1
425     ; SI-LABEL: name: fneg_s64_ss
426     ; SI: liveins: $sgpr0_sgpr1
427     ; SI-NEXT: {{  $}}
428     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
429     ; SI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
430     ; SI-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
431     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
432     ; SI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
433     ; SI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_XOR_B32_]], %subreg.sub1
434     ; SI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
435     ;
436     ; VI-LABEL: name: fneg_s64_ss
437     ; VI: liveins: $sgpr0_sgpr1
438     ; VI-NEXT: {{  $}}
439     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
440     ; VI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
441     ; VI-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
442     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
443     ; VI-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
444     ; VI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_XOR_B32_]], %subreg.sub1
445     ; VI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
446     ;
447     ; GFX9-LABEL: name: fneg_s64_ss
448     ; GFX9: liveins: $sgpr0_sgpr1
449     ; GFX9-NEXT: {{  $}}
450     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
451     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
452     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
453     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
454     ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
455     ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_XOR_B32_]], %subreg.sub1
456     ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
457     ;
458     ; GFX10-LABEL: name: fneg_s64_ss
459     ; GFX10: liveins: $sgpr0_sgpr1
460     ; GFX10-NEXT: {{  $}}
461     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
462     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
463     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
464     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
465     ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
466     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_XOR_B32_]], %subreg.sub1
467     ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
468     %0:sgpr(s64) = COPY $sgpr0_sgpr1
469     %1:sgpr(s64) = G_FNEG %0
470     S_ENDPGM 0, implicit %1
474 name: fneg_s64_vv
475 legalized: true
476 regBankSelected: true
477 tracksRegLiveness: true
479 body: |
480   bb.0:
481     liveins: $vgpr0_vgpr1
482     ; SI-LABEL: name: fneg_s64_vv
483     ; SI: liveins: $vgpr0_vgpr1
484     ; SI-NEXT: {{  $}}
485     ; SI-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
486     ; SI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
487     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
488     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
489     ; SI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
490     ; SI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_XOR_B32_e64_]], %subreg.sub1
491     ; SI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
492     ;
493     ; VI-LABEL: name: fneg_s64_vv
494     ; VI: liveins: $vgpr0_vgpr1
495     ; VI-NEXT: {{  $}}
496     ; VI-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
497     ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
498     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
499     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
500     ; VI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
501     ; VI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_XOR_B32_e64_]], %subreg.sub1
502     ; VI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
503     ;
504     ; GFX9-LABEL: name: fneg_s64_vv
505     ; GFX9: liveins: $vgpr0_vgpr1
506     ; GFX9-NEXT: {{  $}}
507     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
508     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
509     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
510     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
511     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
512     ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_XOR_B32_e64_]], %subreg.sub1
513     ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
514     ;
515     ; GFX10-LABEL: name: fneg_s64_vv
516     ; GFX10: liveins: $vgpr0_vgpr1
517     ; GFX10-NEXT: {{  $}}
518     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
519     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
520     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
521     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
522     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
523     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_XOR_B32_e64_]], %subreg.sub1
524     ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
525     %0:vgpr(s64) = COPY $vgpr0_vgpr1
526     %1:vgpr(s64) = G_FNEG %0
527     S_ENDPGM 0, implicit %1
531 name: fneg_s64_vs
532 legalized: true
533 regBankSelected: true
534 tracksRegLiveness: true
536 body: |
537   bb.0:
538     liveins: $sgpr0_sgpr1
539     ; SI-LABEL: name: fneg_s64_vs
540     ; SI: liveins: $sgpr0_sgpr1
541     ; SI-NEXT: {{  $}}
542     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
543     ; SI-NEXT: [[FNEG:%[0-9]+]]:vgpr(s64) = G_FNEG [[COPY]]
544     ; SI-NEXT: S_ENDPGM 0, implicit [[FNEG]](s64)
545     ;
546     ; VI-LABEL: name: fneg_s64_vs
547     ; VI: liveins: $sgpr0_sgpr1
548     ; VI-NEXT: {{  $}}
549     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
550     ; VI-NEXT: [[FNEG:%[0-9]+]]:vgpr(s64) = G_FNEG [[COPY]]
551     ; VI-NEXT: S_ENDPGM 0, implicit [[FNEG]](s64)
552     ;
553     ; GFX9-LABEL: name: fneg_s64_vs
554     ; GFX9: liveins: $sgpr0_sgpr1
555     ; GFX9-NEXT: {{  $}}
556     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
557     ; GFX9-NEXT: [[FNEG:%[0-9]+]]:vgpr(s64) = G_FNEG [[COPY]]
558     ; GFX9-NEXT: S_ENDPGM 0, implicit [[FNEG]](s64)
559     ;
560     ; GFX10-LABEL: name: fneg_s64_vs
561     ; GFX10: liveins: $sgpr0_sgpr1
562     ; GFX10-NEXT: {{  $}}
563     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
564     ; GFX10-NEXT: [[FNEG:%[0-9]+]]:vgpr(s64) = G_FNEG [[COPY]]
565     ; GFX10-NEXT: S_ENDPGM 0, implicit [[FNEG]](s64)
566     %0:sgpr(s64) = COPY $sgpr0_sgpr1
567     %1:vgpr(s64) = G_FNEG %0
568     S_ENDPGM 0, implicit %1
573 name: fneg_fabs_s32_ss
574 legalized: true
575 regBankSelected: true
576 tracksRegLiveness: true
578 body: |
579   bb.0:
580     liveins: $sgpr0_sgpr1
581     ; SI-LABEL: name: fneg_fabs_s32_ss
582     ; SI: liveins: $sgpr0_sgpr1
583     ; SI-NEXT: {{  $}}
584     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
585     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
586     ; SI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
587     ; SI-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_]]
588     ;
589     ; VI-LABEL: name: fneg_fabs_s32_ss
590     ; VI: liveins: $sgpr0_sgpr1
591     ; VI-NEXT: {{  $}}
592     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
593     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
594     ; VI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
595     ; VI-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_]]
596     ;
597     ; GFX9-LABEL: name: fneg_fabs_s32_ss
598     ; GFX9: liveins: $sgpr0_sgpr1
599     ; GFX9-NEXT: {{  $}}
600     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
601     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
602     ; GFX9-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
603     ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_]]
604     ;
605     ; GFX10-LABEL: name: fneg_fabs_s32_ss
606     ; GFX10: liveins: $sgpr0_sgpr1
607     ; GFX10-NEXT: {{  $}}
608     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
609     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
610     ; GFX10-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
611     ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_OR_B32_]]
612     %0:sgpr(s32) = COPY $sgpr0
613     %1:sgpr(s32) = G_FABS %0
614     %2:sgpr(s32) = G_FNEG %1
615     S_ENDPGM 0, implicit %2
619 name: fneg_fabs_s32_vv
620 legalized: true
621 regBankSelected: true
622 tracksRegLiveness: true
624 body: |
625   bb.0:
626     liveins: $vgpr0
627     ; SI-LABEL: name: fneg_fabs_s32_vv
628     ; SI: liveins: $vgpr0
629     ; SI-NEXT: {{  $}}
630     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
631     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
632     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
633     ; SI-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]
634     ;
635     ; VI-LABEL: name: fneg_fabs_s32_vv
636     ; VI: liveins: $vgpr0
637     ; VI-NEXT: {{  $}}
638     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
639     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
640     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
641     ; VI-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]
642     ;
643     ; GFX9-LABEL: name: fneg_fabs_s32_vv
644     ; GFX9: liveins: $vgpr0
645     ; GFX9-NEXT: {{  $}}
646     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
647     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
648     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
649     ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]
650     ;
651     ; GFX10-LABEL: name: fneg_fabs_s32_vv
652     ; GFX10: liveins: $vgpr0
653     ; GFX10-NEXT: {{  $}}
654     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
655     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
656     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
657     ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]
658     %0:vgpr(s32) = COPY $vgpr0
659     %1:vgpr(s32) = G_FABS %0
660     %2:vgpr(s32) = G_FNEG %0
661     S_ENDPGM 0, implicit %2
665 name: fneg_fabs_s32_vs
666 legalized: true
667 regBankSelected: true
668 tracksRegLiveness: true
670 body: |
671   bb.0:
672     liveins: $sgpr0
673     ; SI-LABEL: name: fneg_fabs_s32_vs
674     ; SI: liveins: $sgpr0
675     ; SI-NEXT: {{  $}}
676     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
677     ; SI-NEXT: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
678     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147483648
679     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s32) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](s32), implicit $exec
680     ; SI-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]](s32)
681     ;
682     ; VI-LABEL: name: fneg_fabs_s32_vs
683     ; VI: liveins: $sgpr0
684     ; VI-NEXT: {{  $}}
685     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
686     ; VI-NEXT: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
687     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147483648
688     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s32) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](s32), implicit $exec
689     ; VI-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]](s32)
690     ;
691     ; GFX9-LABEL: name: fneg_fabs_s32_vs
692     ; GFX9: liveins: $sgpr0
693     ; GFX9-NEXT: {{  $}}
694     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
695     ; GFX9-NEXT: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
696     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147483648
697     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s32) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](s32), implicit $exec
698     ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]](s32)
699     ;
700     ; GFX10-LABEL: name: fneg_fabs_s32_vs
701     ; GFX10: liveins: $sgpr0
702     ; GFX10-NEXT: {{  $}}
703     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
704     ; GFX10-NEXT: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
705     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147483648
706     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s32) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](s32), implicit $exec
707     ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]](s32)
708     %0:sgpr(s32) = COPY $sgpr0
709     %1:vgpr(s32) = G_FABS %0
710     %2:vgpr(s32) = G_FNEG %1
711     S_ENDPGM 0, implicit %2
715 name: fneg_fabs_s16_ss
716 legalized: true
717 regBankSelected: true
718 tracksRegLiveness: true
720 body: |
721   bb.0:
722     liveins: $sgpr0
723     ; SI-LABEL: name: fneg_fabs_s16_ss
724     ; SI: liveins: $sgpr0
725     ; SI-NEXT: {{  $}}
726     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
727     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
728     ; SI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
729     ; SI-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
730     ;
731     ; VI-LABEL: name: fneg_fabs_s16_ss
732     ; VI: liveins: $sgpr0
733     ; VI-NEXT: {{  $}}
734     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
735     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
736     ; VI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
737     ; VI-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
738     ;
739     ; GFX9-LABEL: name: fneg_fabs_s16_ss
740     ; GFX9: liveins: $sgpr0
741     ; GFX9-NEXT: {{  $}}
742     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
743     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
744     ; GFX9-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
745     ; GFX9-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
746     ;
747     ; GFX10-LABEL: name: fneg_fabs_s16_ss
748     ; GFX10: liveins: $sgpr0
749     ; GFX10-NEXT: {{  $}}
750     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
751     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
752     ; GFX10-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
753     ; GFX10-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
754     %0:sgpr(s32) = COPY $sgpr0
755     %1:sgpr(s16) = G_TRUNC %0
756     %2:sgpr(s16) = G_FABS %1
757     %3:sgpr(s16) = G_FNEG %2
758     %4:sgpr(s32) = G_ANYEXT %3
759     $sgpr0 = COPY %4
763 name: fneg_fabs_s16_vv
764 legalized: true
765 regBankSelected: true
766 tracksRegLiveness: true
768 body: |
769   bb.0:
770     liveins: $vgpr0
771     ; SI-LABEL: name: fneg_fabs_s16_vv
772     ; SI: liveins: $vgpr0
773     ; SI-NEXT: {{  $}}
774     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
775     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
776     ; SI-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
777     ; SI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_OR_B32_e64_]]
778     ; SI-NEXT: $vgpr0 = COPY [[COPY1]]
779     ;
780     ; VI-LABEL: name: fneg_fabs_s16_vv
781     ; VI: liveins: $vgpr0
782     ; VI-NEXT: {{  $}}
783     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
784     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
785     ; VI-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
786     ; VI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_OR_B32_e64_]]
787     ; VI-NEXT: $vgpr0 = COPY [[COPY1]]
788     ;
789     ; GFX9-LABEL: name: fneg_fabs_s16_vv
790     ; GFX9: liveins: $vgpr0
791     ; GFX9-NEXT: {{  $}}
792     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
793     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
794     ; GFX9-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
795     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_OR_B32_e64_]]
796     ; GFX9-NEXT: $vgpr0 = COPY [[COPY1]]
797     ;
798     ; GFX10-LABEL: name: fneg_fabs_s16_vv
799     ; GFX10: liveins: $vgpr0
800     ; GFX10-NEXT: {{  $}}
801     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
802     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 32768
803     ; GFX10-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
804     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[V_OR_B32_e64_]]
805     ; GFX10-NEXT: $vgpr0 = COPY [[COPY1]]
806     %0:vgpr(s32) = COPY $vgpr0
807     %1:vgpr(s16) = G_TRUNC %0
808     %2:vgpr(s16) = G_FABS %1
809     %3:vgpr(s16) = G_FNEG %2
810     %4:sgpr(s32) = G_ANYEXT %3
811     $vgpr0 = COPY %4
815 name: fneg_fabs_s16_vs
816 legalized: true
817 regBankSelected: true
818 tracksRegLiveness: true
820 body: |
821   bb.0:
822     liveins: $sgpr0
824     ; SI-LABEL: name: fneg_fabs_s16_vs
825     ; SI: liveins: $sgpr0
826     ; SI-NEXT: {{  $}}
827     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
828     ; SI-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
829     ; SI-NEXT: [[FNEG:%[0-9]+]]:sgpr(s16) = G_FNEG [[TRUNC]]
830     ; SI-NEXT: [[FNEG1:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[FNEG]]
831     ; SI-NEXT: [[COPY1:%[0-9]+]]:sreg_32(s32) = COPY [[FNEG1]](s16)
832     ; SI-NEXT: $vgpr0 = COPY [[COPY1]](s32)
833     ;
834     ; VI-LABEL: name: fneg_fabs_s16_vs
835     ; VI: liveins: $sgpr0
836     ; VI-NEXT: {{  $}}
837     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
838     ; VI-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
839     ; VI-NEXT: [[FNEG:%[0-9]+]]:sgpr(s16) = G_FNEG [[TRUNC]]
840     ; VI-NEXT: [[FNEG1:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[FNEG]]
841     ; VI-NEXT: [[COPY1:%[0-9]+]]:sreg_32(s32) = COPY [[FNEG1]](s16)
842     ; VI-NEXT: $vgpr0 = COPY [[COPY1]](s32)
843     ;
844     ; GFX9-LABEL: name: fneg_fabs_s16_vs
845     ; GFX9: liveins: $sgpr0
846     ; GFX9-NEXT: {{  $}}
847     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
848     ; GFX9-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
849     ; GFX9-NEXT: [[FNEG:%[0-9]+]]:sgpr(s16) = G_FNEG [[TRUNC]]
850     ; GFX9-NEXT: [[FNEG1:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[FNEG]]
851     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32(s32) = COPY [[FNEG1]](s16)
852     ; GFX9-NEXT: $vgpr0 = COPY [[COPY1]](s32)
853     ;
854     ; GFX10-LABEL: name: fneg_fabs_s16_vs
855     ; GFX10: liveins: $sgpr0
856     ; GFX10-NEXT: {{  $}}
857     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
858     ; GFX10-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
859     ; GFX10-NEXT: [[FNEG:%[0-9]+]]:sgpr(s16) = G_FNEG [[TRUNC]]
860     ; GFX10-NEXT: [[FNEG1:%[0-9]+]]:vgpr_32(s16) = G_FNEG [[FNEG]]
861     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32(s32) = COPY [[FNEG1]](s16)
862     ; GFX10-NEXT: $vgpr0 = COPY [[COPY1]](s32)
863     %0:sgpr(s32) = COPY $sgpr0
864     %1:sgpr(s16) = G_TRUNC %0
865     %2:sgpr(s16) = G_FNEG %1
866     %3:vgpr(s16) = G_FNEG %2
867     %4:sgpr(s32) = G_ANYEXT %3
868     $vgpr0 = COPY %4
872 name: fneg_fabs_v2s16_ss
873 legalized: true
874 regBankSelected: true
875 tracksRegLiveness: true
877 body: |
878   bb.0:
879     liveins: $sgpr0_sgpr1
880     ; SI-LABEL: name: fneg_fabs_v2s16_ss
881     ; SI: liveins: $sgpr0_sgpr1
882     ; SI-NEXT: {{  $}}
883     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
884     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
885     ; SI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
886     ; SI-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
887     ;
888     ; VI-LABEL: name: fneg_fabs_v2s16_ss
889     ; VI: liveins: $sgpr0_sgpr1
890     ; VI-NEXT: {{  $}}
891     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
892     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
893     ; VI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
894     ; VI-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
895     ;
896     ; GFX9-LABEL: name: fneg_fabs_v2s16_ss
897     ; GFX9: liveins: $sgpr0_sgpr1
898     ; GFX9-NEXT: {{  $}}
899     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
900     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
901     ; GFX9-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
902     ; GFX9-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
903     ;
904     ; GFX10-LABEL: name: fneg_fabs_v2s16_ss
905     ; GFX10: liveins: $sgpr0_sgpr1
906     ; GFX10-NEXT: {{  $}}
907     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
908     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
909     ; GFX10-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY]], [[S_MOV_B32_]], implicit-def dead $scc
910     ; GFX10-NEXT: $sgpr0 = COPY [[S_OR_B32_]]
911     %0:sgpr(<2 x s16>) = COPY $sgpr0
912     %1:sgpr(<2 x s16>) = G_FABS %0
913     %2:sgpr(<2 x s16>) = G_FNEG %1
914     $sgpr0 = COPY %2
918 name: fneg_fabs_v2s16_vv
919 legalized: true
920 regBankSelected: true
921 tracksRegLiveness: true
923 body: |
924   bb.0:
925     liveins: $vgpr0
926     ; SI-LABEL: name: fneg_fabs_v2s16_vv
927     ; SI: liveins: $vgpr0
928     ; SI-NEXT: {{  $}}
929     ; SI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
930     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
931     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
932     ; SI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
933     ;
934     ; VI-LABEL: name: fneg_fabs_v2s16_vv
935     ; VI: liveins: $vgpr0
936     ; VI-NEXT: {{  $}}
937     ; VI-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
938     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
939     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
940     ; VI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
941     ;
942     ; GFX9-LABEL: name: fneg_fabs_v2s16_vv
943     ; GFX9: liveins: $vgpr0
944     ; GFX9-NEXT: {{  $}}
945     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
946     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
947     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
948     ; GFX9-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
949     ;
950     ; GFX10-LABEL: name: fneg_fabs_v2s16_vv
951     ; GFX10: liveins: $vgpr0
952     ; GFX10-NEXT: {{  $}}
953     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
954     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147516416
955     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_MOV_B32_]], [[COPY]], implicit $exec
956     ; GFX10-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]]
957     %0:vgpr(<2 x s16>) = COPY $vgpr0
958     %1:vgpr(<2 x s16>) = G_FABS %0
959     %2:vgpr(<2 x s16>) = G_FNEG %0
960     $vgpr0 = COPY %2
964 name: fneg_fabs_v2s16_vs
965 legalized: true
966 regBankSelected: true
967 tracksRegLiveness: true
969 body: |
970   bb.0:
971     liveins: $sgpr0
972     ; SI-LABEL: name: fneg_fabs_v2s16_vs
973     ; SI: liveins: $sgpr0
974     ; SI-NEXT: {{  $}}
975     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
976     ; SI-NEXT: [[FABS:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FABS [[COPY]]
977     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147516416
978     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(<2 x s16>) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](<2 x s16>), implicit $exec
979     ; SI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]](<2 x s16>)
980     ;
981     ; VI-LABEL: name: fneg_fabs_v2s16_vs
982     ; VI: liveins: $sgpr0
983     ; VI-NEXT: {{  $}}
984     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
985     ; VI-NEXT: [[FABS:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FABS [[COPY]]
986     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147516416
987     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(<2 x s16>) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](<2 x s16>), implicit $exec
988     ; VI-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]](<2 x s16>)
989     ;
990     ; GFX9-LABEL: name: fneg_fabs_v2s16_vs
991     ; GFX9: liveins: $sgpr0
992     ; GFX9-NEXT: {{  $}}
993     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
994     ; GFX9-NEXT: [[FABS:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FABS [[COPY]]
995     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147516416
996     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(<2 x s16>) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](<2 x s16>), implicit $exec
997     ; GFX9-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]](<2 x s16>)
998     ;
999     ; GFX10-LABEL: name: fneg_fabs_v2s16_vs
1000     ; GFX10: liveins: $sgpr0
1001     ; GFX10-NEXT: {{  $}}
1002     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
1003     ; GFX10-NEXT: [[FABS:%[0-9]+]]:vgpr_32(<2 x s16>) = G_FABS [[COPY]]
1004     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s16) = S_MOV_B32 2147516416
1005     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(<2 x s16>) = V_XOR_B32_e64 [[S_MOV_B32_]](s16), [[FABS]](<2 x s16>), implicit $exec
1006     ; GFX10-NEXT: $vgpr0 = COPY [[V_XOR_B32_e64_]](<2 x s16>)
1007     %0:sgpr(<2 x s16>) = COPY $sgpr0
1008     %1:vgpr(<2 x s16>) = G_FABS %0
1009     %2:vgpr(<2 x s16>) = G_FNEG %1
1010     $vgpr0 = COPY %2
1014 name: fneg_fabs_s64_ss
1015 legalized: true
1016 regBankSelected: true
1017 tracksRegLiveness: true
1019 body: |
1020   bb.0:
1021     liveins: $sgpr0_sgpr1
1022     ; SI-LABEL: name: fneg_fabs_s64_ss
1023     ; SI: liveins: $sgpr0_sgpr1
1024     ; SI-NEXT: {{  $}}
1025     ; SI-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1026     ; SI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1027     ; SI-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1028     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1029     ; SI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
1030     ; SI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_OR_B32_]], %subreg.sub1
1031     ; SI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1032     ;
1033     ; VI-LABEL: name: fneg_fabs_s64_ss
1034     ; VI: liveins: $sgpr0_sgpr1
1035     ; VI-NEXT: {{  $}}
1036     ; VI-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1037     ; VI-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1038     ; VI-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1039     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1040     ; VI-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
1041     ; VI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_OR_B32_]], %subreg.sub1
1042     ; VI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1043     ;
1044     ; GFX9-LABEL: name: fneg_fabs_s64_ss
1045     ; GFX9: liveins: $sgpr0_sgpr1
1046     ; GFX9-NEXT: {{  $}}
1047     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1048     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1049     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1050     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1051     ; GFX9-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
1052     ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_OR_B32_]], %subreg.sub1
1053     ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1054     ;
1055     ; GFX10-LABEL: name: fneg_fabs_s64_ss
1056     ; GFX10: liveins: $sgpr0_sgpr1
1057     ; GFX10-NEXT: {{  $}}
1058     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_64 = COPY $sgpr0_sgpr1
1059     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub0
1060     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY [[COPY]].sub1
1061     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1062     ; GFX10-NEXT: [[S_OR_B32_:%[0-9]+]]:sreg_32 = S_OR_B32 [[COPY2]], [[S_MOV_B32_]], implicit-def dead $scc
1063     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[S_OR_B32_]], %subreg.sub1
1064     ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1065     %0:sgpr(s64) = COPY $sgpr0_sgpr1
1066     %1:sgpr(s64) = G_FABS %0
1067     %2:sgpr(s64) = G_FNEG %1
1068     S_ENDPGM 0, implicit %2
1072 name: fneg_fabs_s64_vv
1073 legalized: true
1074 regBankSelected: true
1075 tracksRegLiveness: true
1077 body: |
1078   bb.0:
1079     liveins: $vgpr0_vgpr1
1080     ; SI-LABEL: name: fneg_fabs_s64_vv
1081     ; SI: liveins: $vgpr0_vgpr1
1082     ; SI-NEXT: {{  $}}
1083     ; SI-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1084     ; SI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1085     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1086     ; SI-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
1087     ; SI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1088     ; SI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_OR_B32_e64_]], %subreg.sub1
1089     ; SI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1090     ;
1091     ; VI-LABEL: name: fneg_fabs_s64_vv
1092     ; VI: liveins: $vgpr0_vgpr1
1093     ; VI-NEXT: {{  $}}
1094     ; VI-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1095     ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1096     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1097     ; VI-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
1098     ; VI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1099     ; VI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_OR_B32_e64_]], %subreg.sub1
1100     ; VI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1101     ;
1102     ; GFX9-LABEL: name: fneg_fabs_s64_vv
1103     ; GFX9: liveins: $vgpr0_vgpr1
1104     ; GFX9-NEXT: {{  $}}
1105     ; GFX9-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1106     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1107     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1108     ; GFX9-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
1109     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1110     ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_OR_B32_e64_]], %subreg.sub1
1111     ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1112     ;
1113     ; GFX10-LABEL: name: fneg_fabs_s64_vv
1114     ; GFX10: liveins: $vgpr0_vgpr1
1115     ; GFX10-NEXT: {{  $}}
1116     ; GFX10-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
1117     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1
1118     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648
1119     ; GFX10-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 [[S_MOV_B32_]], [[COPY1]], implicit $exec
1120     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0
1121     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[V_OR_B32_e64_]], %subreg.sub1
1122     ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]]
1123     %0:vgpr(s64) = COPY $vgpr0_vgpr1
1124     %1:vgpr(s64) = G_FABS %0
1125     %2:vgpr(s64) = G_FNEG %1
1126     S_ENDPGM 0, implicit %2
1130 name: fneg_fabs_s64_vs
1131 legalized: true
1132 regBankSelected: true
1133 tracksRegLiveness: true
1135 body: |
1136   bb.0:
1137     liveins: $sgpr0_sgpr1
1138     ; SI-LABEL: name: fneg_fabs_s64_vs
1139     ; SI: liveins: $sgpr0_sgpr1
1140     ; SI-NEXT: {{  $}}
1141     ; SI-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
1142     ; SI-NEXT: [[FABS:%[0-9]+]]:vreg_64(s64) = G_FABS [[COPY]]
1143     ; SI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub1(s64)
1144     ; SI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 2147483648
1145     ; SI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s16) = V_XOR_B32_e64 [[S_MOV_B32_]](s32), [[COPY1]](s32), implicit $exec
1146     ; SI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub0(s64)
1147     ; SI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64(s64) = REG_SEQUENCE [[COPY2]](s32), %subreg.sub0, [[V_XOR_B32_e64_]](s16), %subreg.sub1
1148     ; SI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]](s64)
1149     ;
1150     ; VI-LABEL: name: fneg_fabs_s64_vs
1151     ; VI: liveins: $sgpr0_sgpr1
1152     ; VI-NEXT: {{  $}}
1153     ; VI-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
1154     ; VI-NEXT: [[FABS:%[0-9]+]]:vreg_64(s64) = G_FABS [[COPY]]
1155     ; VI-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub1(s64)
1156     ; VI-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 2147483648
1157     ; VI-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s16) = V_XOR_B32_e64 [[S_MOV_B32_]](s32), [[COPY1]](s32), implicit $exec
1158     ; VI-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub0(s64)
1159     ; VI-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64(s64) = REG_SEQUENCE [[COPY2]](s32), %subreg.sub0, [[V_XOR_B32_e64_]](s16), %subreg.sub1
1160     ; VI-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]](s64)
1161     ;
1162     ; GFX9-LABEL: name: fneg_fabs_s64_vs
1163     ; GFX9: liveins: $sgpr0_sgpr1
1164     ; GFX9-NEXT: {{  $}}
1165     ; GFX9-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
1166     ; GFX9-NEXT: [[FABS:%[0-9]+]]:vreg_64(s64) = G_FABS [[COPY]]
1167     ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub1(s64)
1168     ; GFX9-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 2147483648
1169     ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s16) = V_XOR_B32_e64 [[S_MOV_B32_]](s32), [[COPY1]](s32), implicit $exec
1170     ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub0(s64)
1171     ; GFX9-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64(s64) = REG_SEQUENCE [[COPY2]](s32), %subreg.sub0, [[V_XOR_B32_e64_]](s16), %subreg.sub1
1172     ; GFX9-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]](s64)
1173     ;
1174     ; GFX10-LABEL: name: fneg_fabs_s64_vs
1175     ; GFX10: liveins: $sgpr0_sgpr1
1176     ; GFX10-NEXT: {{  $}}
1177     ; GFX10-NEXT: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
1178     ; GFX10-NEXT: [[FABS:%[0-9]+]]:vreg_64(s64) = G_FABS [[COPY]]
1179     ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub1(s64)
1180     ; GFX10-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32(s32) = S_MOV_B32 2147483648
1181     ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32(s16) = V_XOR_B32_e64 [[S_MOV_B32_]](s32), [[COPY1]](s32), implicit $exec
1182     ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32(s32) = COPY [[FABS]].sub0(s64)
1183     ; GFX10-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64(s64) = REG_SEQUENCE [[COPY2]](s32), %subreg.sub0, [[V_XOR_B32_e64_]](s16), %subreg.sub1
1184     ; GFX10-NEXT: S_ENDPGM 0, implicit [[REG_SEQUENCE]](s64)
1185     %0:sgpr(s64) = COPY $sgpr0_sgpr1
1186     %1:vgpr(s64) = G_FABS %0
1187     %2:vgpr(s64) = G_FNEG %1
1188     S_ENDPGM 0, implicit %2