[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / fold-operands-remove-m0-redef.mir
blob10b49e684831108277f925f2db0b677910da7fa0
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs -run-pass=si-fold-operands  %s -o - | FileCheck -check-prefix=GCN %s
4 --- |
5   define amdgpu_kernel void @redef_m0_same_copy() { ret void }
6   define amdgpu_kernel void @multi_redef_m0_same_copy() { ret void }
7   define amdgpu_kernel void @redef_m0_different_copy() { ret void }
8   define amdgpu_kernel void @redef_m0_mixed_copy0() { ret void }
9   define amdgpu_kernel void @redef_m0_mixed_copy1() { ret void }
10   define amdgpu_kernel void @redef_m0_same_mov_imm() { ret void }
11   define amdgpu_kernel void @redef_m0_different_inst0() { ret void }
12   define amdgpu_kernel void @redef_m0_different_inst1() { ret void }
13   define amdgpu_kernel void @redef_m0_mixed_read_m0() { ret void }
14   define amdgpu_kernel void @redef_m0_same_copy_call() { ret void }
15   define amdgpu_kernel void @redef_m0_same_copy_multi_block() { ret void }
16   define amdgpu_kernel void @redef_m0_copy_self() { ret void }
17   define amdgpu_kernel void @redef_m0_copy_physreg() { ret void }
19   declare void @func()
20 ...
22 ---
23 name:            redef_m0_same_copy
24 tracksRegLiveness: true
25 machineFunctionInfo:
26   isEntryFunction: true
27 body:             |
28   bb.0:
29     liveins: $vgpr0, $sgpr0
31     ; GCN-LABEL: name: redef_m0_same_copy
32     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
33     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
34     ; GCN: $m0 = COPY [[COPY1]]
35     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
36     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
37     %0:vgpr_32 = COPY $vgpr0
38     %1:sgpr_32 = COPY $sgpr0
39     $m0 = COPY %1
40     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
41     $m0 = COPY %1
42     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
44 ...
46 ---
47 name:            multi_redef_m0_same_copy
48 tracksRegLiveness: true
49 machineFunctionInfo:
50   isEntryFunction: true
51 body:             |
52   bb.0:
53     liveins: $vgpr0, $sgpr0
55     ; GCN-LABEL: name: multi_redef_m0_same_copy
56     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
57     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
58     ; GCN: $m0 = COPY [[COPY1]]
59     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
60     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
61     %0:vgpr_32 = COPY $vgpr0
62     %1:sgpr_32 = COPY $sgpr0
63     $m0 = COPY %1
64     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
65     $m0 = COPY %1
66     $m0 = COPY %1
67     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
69 ...
71 ---
72 name:            redef_m0_different_copy
73 tracksRegLiveness: true
74 machineFunctionInfo:
75   isEntryFunction: true
76 body:             |
77   bb.0:
78     liveins: $vgpr0, $sgpr0, $sgpr1
80     ; GCN-LABEL: name: redef_m0_different_copy
81     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
82     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
83     ; GCN: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1
84     ; GCN: $m0 = COPY [[COPY1]]
85     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
86     ; GCN: $m0 = COPY [[COPY2]]
87     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
88     %0:vgpr_32 = COPY $vgpr0
89     %1:sgpr_32 = COPY $sgpr0
90     %2:sgpr_32 = COPY $sgpr1
91     $m0 = COPY %1
92     %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
93     $m0 = COPY %2
94     %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
96 ...
98 ---
99 name:            redef_m0_mixed_copy0
100 tracksRegLiveness: true
101 machineFunctionInfo:
102   isEntryFunction: true
103 body:             |
104   bb.0:
105     liveins: $vgpr0, $sgpr0, $sgpr1
107     ; GCN-LABEL: name: redef_m0_mixed_copy0
108     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
109     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
110     ; GCN: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1
111     ; GCN: $m0 = COPY [[COPY1]]
112     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
113     ; GCN: $m0 = COPY [[COPY2]]
114     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
115     %0:vgpr_32 = COPY $vgpr0
116     %1:sgpr_32 = COPY $sgpr0
117     %2:sgpr_32 = COPY $sgpr1
118     $m0 = COPY %1
119     %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
120     $m0 = COPY %1
121     $m0 = COPY %2
122     %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
127 name:            redef_m0_mixed_copy1
128 tracksRegLiveness: true
130 machineFunctionInfo:
131   isEntryFunction: true
132 body:             |
133   bb.0:
134     liveins: $vgpr0, $sgpr0, $sgpr1
136     ; GCN-LABEL: name: redef_m0_mixed_copy1
137     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
138     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
139     ; GCN: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1
140     ; GCN: $m0 = COPY [[COPY1]]
141     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
142     ; GCN: $m0 = COPY [[COPY2]]
143     ; GCN: $m0 = COPY [[COPY1]]
144     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
145     %0:vgpr_32 = COPY $vgpr0
146     %1:sgpr_32 = COPY $sgpr0
147     %2:sgpr_32 = COPY $sgpr1
148     $m0 = COPY %1
149     %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
150     $m0 = COPY %2
151     $m0 = COPY %1
152     %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
157 name:            redef_m0_same_mov_imm
158 tracksRegLiveness: true
159 machineFunctionInfo:
160   isEntryFunction: true
161 body:             |
162   bb.0:
163     liveins: $vgpr0, $sgpr0
165     ; GCN-LABEL: name: redef_m0_same_mov_imm
166     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
167     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
168     ; GCN: $m0 = S_MOV_B32 -1
169     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
170     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
171     %0:vgpr_32 = COPY $vgpr0
172     %1:sgpr_32 = COPY $sgpr0
173     $m0 = S_MOV_B32 -1
174     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
175     $m0 = S_MOV_B32 -1
176     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
181 name:            redef_m0_different_inst0
182 tracksRegLiveness: true
183 machineFunctionInfo:
184   isEntryFunction: true
185 body:             |
186   bb.0:
187     liveins: $vgpr0, $sgpr0
189     ; GCN-LABEL: name: redef_m0_different_inst0
190     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
191     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
192     ; GCN: $m0 = COPY [[COPY1]]
193     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
194     ; GCN: $m0 = IMPLICIT_DEF
195     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
196     %0:vgpr_32 = COPY $vgpr0
197     %1:sgpr_32 = COPY $sgpr0
198     $m0 = COPY %1
199     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
200     $m0 = IMPLICIT_DEF
201     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
206 name:            redef_m0_different_inst1
207 tracksRegLiveness: true
208 machineFunctionInfo:
209   isEntryFunction: true
210 body:             |
211   bb.0:
212     liveins: $vgpr0, $sgpr0
214     ; GCN-LABEL: name: redef_m0_different_inst1
215     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
216     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
217     ; GCN: $m0 = COPY [[COPY1]]
218     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
219     ; GCN: S_NOP 0, implicit-def $m0
220     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
221     %0:vgpr_32 = COPY $vgpr0
222     %1:sgpr_32 = COPY $sgpr0
223     $m0 = COPY %1
224     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
225     S_NOP 0, implicit-def $m0
226     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
231 name:            redef_m0_mixed_read_m0
232 tracksRegLiveness: true
233 machineFunctionInfo:
234   isEntryFunction: true
235 body:             |
236   bb.0:
237     liveins: $vgpr0, $sgpr0, $sgpr1
239     ; GCN-LABEL: name: redef_m0_mixed_read_m0
240     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
241     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
242     ; GCN: [[COPY2:%[0-9]+]]:sgpr_32 = COPY $sgpr1
243     ; GCN: $m0 = COPY [[COPY1]]
244     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
245     ; GCN: $m0 = COPY [[COPY2]]
246     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
247     ; GCN: [[DS_READ_B32_2:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 128, 0, implicit $m0, implicit $exec :: (load 4)
248     %0:vgpr_32 = COPY $vgpr0
249     %1:sgpr_32 = COPY $sgpr0
250     %2:sgpr_32 = COPY $sgpr1
251     $m0 = COPY %1
252     %3:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
253     $m0 = COPY %2
254     %4:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
255     $m0 = COPY %2
256     %5:vgpr_32 = DS_READ_B32 %0, 128, 0, implicit $m0, implicit $exec :: (load 4)
260 name:            redef_m0_same_copy_call
261 tracksRegLiveness: true
262 machineFunctionInfo:
263   isEntryFunction: true
264 body:             |
265   bb.0:
266     liveins: $vgpr0, $sgpr0
268     ; GCN-LABEL: name: redef_m0_same_copy_call
269     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
270     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
271     ; GCN: $m0 = COPY [[COPY1]]
272     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
273     ; GCN: dead $sgpr30_sgpr31 = SI_CALL undef $sgpr6_sgpr7, @func, csr_amdgpu_highregs
274     ; GCN: $m0 = COPY [[COPY1]]
275     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
276     %0:vgpr_32 = COPY $vgpr0
277     %1:sgpr_32 = COPY $sgpr0
278     $m0 = COPY %1
279     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
280     dead $sgpr30_sgpr31 = SI_CALL undef $sgpr6_sgpr7, @func, csr_amdgpu_highregs
281     $m0 = COPY %1
282     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
287 name:            redef_m0_same_copy_multi_block
288 tracksRegLiveness: true
289 machineFunctionInfo:
290   isEntryFunction: true
291 body:             |
292   ; GCN-LABEL: name: redef_m0_same_copy_multi_block
293   ; GCN: bb.0:
294   ; GCN:   successors: %bb.1(0x80000000)
295   ; GCN:   [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
296   ; GCN:   [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
297   ; GCN:   $m0 = COPY [[COPY1]]
298   ; GCN:   [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
299   ; GCN: bb.1:
300   ; GCN:   $m0 = COPY [[COPY1]]
301   ; GCN:   [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
302   bb.0:
303     liveins: $vgpr0, $sgpr0
305     %0:vgpr_32 = COPY $vgpr0
306     %1:sgpr_32 = COPY $sgpr0
307     $m0 = COPY %1
308     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
310   bb.1:
311     $m0 = COPY %1
312     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
317 name:            redef_m0_copy_self
318 tracksRegLiveness: true
319 machineFunctionInfo:
320   isEntryFunction: true
321 body:             |
322   bb.0:
323     liveins: $vgpr0, $sgpr0
325     ; GCN-LABEL: name: redef_m0_copy_self
326     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
327     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
328     ; GCN: $m0 = COPY [[COPY1]]
329     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
330     ; GCN: $m0 = COPY $m0
331     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
332     %0:vgpr_32 = COPY $vgpr0
333     %1:sgpr_32 = COPY $sgpr0
334     $m0 = COPY %1
335     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
336     $m0 = COPY $m0
337     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)
342 name:            redef_m0_copy_physreg
343 tracksRegLiveness: true
344 machineFunctionInfo:
345   isEntryFunction: true
346 body:             |
347   bb.0:
348     liveins: $vgpr0, $sgpr0
350     ; GCN-LABEL: name: redef_m0_copy_physreg
351     ; GCN: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
352     ; GCN: [[COPY1:%[0-9]+]]:sgpr_32 = COPY $sgpr0
353     ; GCN: $m0 = COPY $sgpr0
354     ; GCN: [[DS_READ_B32_:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 0, 0, implicit $m0, implicit $exec :: (load 4)
355     ; GCN: $sgpr0 = S_MOV_B32 0
356     ; GCN: $m0 = COPY $sgpr0
357     ; GCN: [[DS_READ_B32_1:%[0-9]+]]:vgpr_32 = DS_READ_B32 [[COPY]], 64, 0, implicit $m0, implicit $exec :: (load 4)
358     %0:vgpr_32 = COPY $vgpr0
359     %1:sgpr_32 = COPY $sgpr0
360     $m0 = COPY $sgpr0
361     %2:vgpr_32 = DS_READ_B32 %0, 0, 0, implicit $m0, implicit $exec :: (load 4)
362     $sgpr0 = S_MOV_B32 0
363     $m0 = COPY $sgpr0
364     %3:vgpr_32 = DS_READ_B32 %0, 64, 0, implicit $m0, implicit $exec :: (load 4)