Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / regbankselect-smax.mir
blobde16194447d474dc6ff7571e8e1e5ac4e0bc8d58
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=amdgpu-regbankselect -verify-machineinstrs -regbankselect-fast -o - %s  | FileCheck %s
3 # RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=amdgpu-regbankselect -verify-machineinstrs -regbankselect-greedy -o - %s  | FileCheck %s
5 ---
6 name: smax_s32_ss
7 legalized: true
9 body: |
10   bb.0:
11     liveins: $sgpr0, $sgpr1
13     ; CHECK-LABEL: name: smax_s32_ss
14     ; CHECK: liveins: $sgpr0, $sgpr1
15     ; CHECK-NEXT: {{  $}}
16     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
17     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
18     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:sgpr(s32) = G_SMAX [[COPY]], [[COPY1]]
19     %0:_(s32) = COPY $sgpr0
20     %1:_(s32) = COPY $sgpr1
21     %2:_(s32) = G_SMAX %0, %1
22 ...
24 ---
25 name: smax_s32_sv
26 legalized: true
28 body: |
29   bb.0:
30     liveins: $sgpr0, $vgpr0
32     ; CHECK-LABEL: name: smax_s32_sv
33     ; CHECK: liveins: $sgpr0, $vgpr0
34     ; CHECK-NEXT: {{  $}}
35     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
36     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
37     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
38     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(s32) = G_SMAX [[COPY2]], [[COPY1]]
39     %0:_(s32) = COPY $sgpr0
40     %1:_(s32) = COPY $vgpr0
41     %2:_(s32) = G_SMAX %0, %1
42 ...
44 ---
45 name: smax_s32_vs
46 legalized: true
48 body: |
49   bb.0:
50     liveins: $sgpr0, $vgpr0
52     ; CHECK-LABEL: name: smax_s32_vs
53     ; CHECK: liveins: $sgpr0, $vgpr0
54     ; CHECK-NEXT: {{  $}}
55     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
56     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
57     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
58     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(s32) = G_SMAX [[COPY]], [[COPY2]]
59     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](s32)
60     %0:_(s32) = COPY $vgpr0
61     %1:_(s32) = COPY $sgpr0
62     %2:_(s32) = G_SMAX %0, %1
63     $vgpr0 = COPY %2
65 ...
67 ---
68 name: smax_s32_vv
69 legalized: true
71 body: |
72   bb.0:
73     liveins: $vgpr0, $vgpr1
75     ; CHECK-LABEL: name: smax_s32_vv
76     ; CHECK: liveins: $vgpr0, $vgpr1
77     ; CHECK-NEXT: {{  $}}
78     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
79     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
80     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(s32) = G_SMAX [[COPY]], [[COPY1]]
81     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](s32)
82     %0:_(s32) = COPY $vgpr0
83     %1:_(s32) = COPY $vgpr1
84     %2:_(s32) = G_SMAX %0, %1
85     $vgpr0 = COPY %2
86 ...
88 # FIXME: This should use VGPR instruction
89 ---
90 name: smax_s32_ss_vgpr_use
91 legalized: true
93 body: |
94   bb.0:
95     liveins: $sgpr0, $sgpr1
97     ; CHECK-LABEL: name: smax_s32_ss_vgpr_use
98     ; CHECK: liveins: $sgpr0, $sgpr1
99     ; CHECK-NEXT: {{  $}}
100     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
101     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
102     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:sgpr(s32) = G_SMAX [[COPY]], [[COPY1]]
103     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](s32)
104     %0:_(s32) = COPY $sgpr0
105     %1:_(s32) = COPY $sgpr1
106     %2:_(s32) = G_SMAX %0, %1
107     $vgpr0 = COPY %2
111 name: smax_s16_ss
112 legalized: true
114 body: |
115   bb.0:
116     liveins: $sgpr0, $sgpr1
118     ; CHECK-LABEL: name: smax_s16_ss
119     ; CHECK: liveins: $sgpr0, $sgpr1
120     ; CHECK-NEXT: {{  $}}
121     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
122     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
123     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
124     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)
125     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s16)
126     ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC1]](s16)
127     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:sgpr(s32) = G_SMAX [[SEXT]], [[SEXT1]]
128     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SMAX]](s32)
129     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC2]](s16)
130     ; CHECK-NEXT: $sgpr0 = COPY [[ANYEXT]](s32)
131     %0:_(s32) = COPY $sgpr0
132     %1:_(s32) = COPY $sgpr1
133     %2:_(s16) = G_TRUNC %0
134     %3:_(s16) = G_TRUNC %1
135     %4:_(s16) = G_SMAX %2, %3
136     %5:_(s32) = G_ANYEXT %4
137     $sgpr0 = COPY %5
142 name: smax_s16_ss_vgpr_use
143 legalized: true
145 body: |
146   bb.0:
147     liveins: $sgpr0, $sgpr1
149     ; CHECK-LABEL: name: smax_s16_ss_vgpr_use
150     ; CHECK: liveins: $sgpr0, $sgpr1
151     ; CHECK-NEXT: {{  $}}
152     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
153     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
154     ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY]](s32)
155     ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:sgpr(s16) = G_TRUNC [[COPY1]](s32)
156     ; CHECK-NEXT: [[SEXT:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC]](s16)
157     ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:sgpr(s32) = G_SEXT [[TRUNC1]](s16)
158     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:sgpr(s32) = G_SMAX [[SEXT]], [[SEXT1]]
159     ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:sgpr(s16) = G_TRUNC [[SMAX]](s32)
160     ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:sgpr(s32) = G_ANYEXT [[TRUNC2]](s16)
161     ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)
162     %0:_(s32) = COPY $sgpr0
163     %1:_(s32) = COPY $sgpr1
164     %2:_(s16) = G_TRUNC %0
165     %3:_(s16) = G_TRUNC %1
166     %4:_(s16) = G_SMAX %2, %3
167     %5:_(s32) = G_ANYEXT %4
168     $vgpr0 = COPY %5
173 name: smax_v2s16_ss
174 legalized: true
176 body: |
177   bb.0:
178     liveins: $sgpr0, $sgpr1
180     ; CHECK-LABEL: name: smax_v2s16_ss
181     ; CHECK: liveins: $sgpr0, $sgpr1
182     ; CHECK-NEXT: {{  $}}
183     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
184     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr1
185     ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:sgpr(s32) = G_BITCAST [[COPY]](<2 x s16>)
186     ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:sgpr(s32) = G_SEXT_INREG [[BITCAST]], 16
187     ; CHECK-NEXT: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 16
188     ; CHECK-NEXT: [[ASHR:%[0-9]+]]:sgpr(s32) = G_ASHR [[BITCAST]], [[C]](s32)
189     ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:sgpr(s32) = G_BITCAST [[COPY1]](<2 x s16>)
190     ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:sgpr(s32) = G_SEXT_INREG [[BITCAST1]], 16
191     ; CHECK-NEXT: [[C1:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 16
192     ; CHECK-NEXT: [[ASHR1:%[0-9]+]]:sgpr(s32) = G_ASHR [[BITCAST1]], [[C1]](s32)
193     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:sgpr(s32) = G_SMAX [[SEXT_INREG]], [[SEXT_INREG1]]
194     ; CHECK-NEXT: [[SMAX1:%[0-9]+]]:sgpr(s32) = G_SMAX [[ASHR]], [[ASHR1]]
195     ; CHECK-NEXT: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:sgpr(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[SMAX]](s32), [[SMAX1]](s32)
196     ; CHECK-NEXT: $sgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
197     %0:_(<2 x s16>) = COPY $sgpr0
198     %1:_(<2 x s16>) = COPY $sgpr1
199     %2:_(<2 x s16>) = G_SMAX %0, %1
200     $sgpr0 = COPY %2
204 name: smax_v2s16_sv
205 legalized: true
207 body: |
208   bb.0:
209     liveins: $sgpr0, $vgpr0
211     ; CHECK-LABEL: name: smax_v2s16_sv
212     ; CHECK: liveins: $sgpr0, $vgpr0
213     ; CHECK-NEXT: {{  $}}
214     ; CHECK-NEXT: [[COPY:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
215     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
216     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY]](<2 x s16>)
217     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(<2 x s16>) = G_SMAX [[COPY2]], [[COPY1]]
218     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](<2 x s16>)
219     %0:_(<2 x s16>) = COPY $sgpr0
220     %1:_(<2 x s16>) = COPY $vgpr0
221     %2:_(<2 x s16>) = G_SMAX %0, %1
222     $vgpr0 = COPY %2
226 name: smax_v2s16_vs
227 legalized: true
229 body: |
230   bb.0:
231     liveins: $sgpr0, $vgpr0
233     ; CHECK-LABEL: name: smax_v2s16_vs
234     ; CHECK: liveins: $sgpr0, $vgpr0
235     ; CHECK-NEXT: {{  $}}
236     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
237     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:sgpr(<2 x s16>) = COPY $sgpr0
238     ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr(<2 x s16>) = COPY [[COPY1]](<2 x s16>)
239     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(<2 x s16>) = G_SMAX [[COPY]], [[COPY2]]
240     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](<2 x s16>)
241     %0:_(<2 x s16>) = COPY $vgpr0
242     %1:_(<2 x s16>) = COPY $sgpr0
243     %2:_(<2 x s16>) = G_SMAX %0, %1
244     $vgpr0 = COPY %2
248 name: smax_v2s16_vv
249 legalized: true
251 body: |
252   bb.0:
253     liveins: $vgpr0, $vgpr1
255     ; CHECK-LABEL: name: smax_v2s16_vv
256     ; CHECK: liveins: $vgpr0, $vgpr1
257     ; CHECK-NEXT: {{  $}}
258     ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
259     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr1
260     ; CHECK-NEXT: [[SMAX:%[0-9]+]]:vgpr(<2 x s16>) = G_SMAX [[COPY]], [[COPY1]]
261     ; CHECK-NEXT: $vgpr0 = COPY [[SMAX]](<2 x s16>)
262     %0:_(<2 x s16>) = COPY $vgpr0
263     %1:_(<2 x s16>) = COPY $vgpr1
264     %2:_(<2 x s16>) = G_SMAX %0, %1
265     $vgpr0 = COPY %2