[TableGen] Fix validateOperandClass for non Phyical Reg (#118146)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-udiv.mir
blobf8578a694e2d41284d1b58de7797bc4c9ed2fa96
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -o - -mtriple=aarch64-unknown-unknown -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs %s | FileCheck %s
3 ---
4 name: udiv_by_scalar_const
5 body:             |
6   bb.1:
7   liveins: $w0
8     ; CHECK-LABEL: name: udiv_by_scalar_const
9     ; CHECK: liveins: $w0
10     ; CHECK-NEXT: {{  $}}
11     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
12     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
13     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 818089009
14     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2
15     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
16     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(s32) = G_UMULH [[LSHR]], [[C1]]
17     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UMULH]], [[C2]](s32)
18     ; CHECK-NEXT: $w0 = COPY [[LSHR1]](s32)
19     %0:_(s32) = COPY $w0
20     %cst:_(s32) = G_CONSTANT i32 42
21     %2:_(s32) = G_UDIV %0(s32), %cst(s32)
22     $w0 = COPY %2(s32)
23 ...
24 ---
25 name:            combine_vec_udiv_uniform
26 alignment:       4
27 tracksRegLiveness: true
28 liveins:
29   - { reg: '$q0' }
30 body:             |
31   bb.1:
32     liveins: $q0
34     ; CHECK-LABEL: name: combine_vec_udiv_uniform
35     ; CHECK: liveins: $q0
36     ; CHECK-NEXT: {{  $}}
37     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
38     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 25645
39     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 4
40     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16)
41     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16)
42     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[COPY]], [[BUILD_VECTOR]]
43     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY]], [[UMULH]]
44     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
45     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16)
46     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[SUB]], [[BUILD_VECTOR2]](<8 x s16>)
47     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[LSHR]], [[UMULH]]
48     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[ADD]], [[BUILD_VECTOR1]](<8 x s16>)
49     ; CHECK-NEXT: $q0 = COPY [[LSHR1]](<8 x s16>)
50     ; CHECK-NEXT: RET_ReallyLR implicit $q0
51     %0:_(<8 x s16>) = COPY $q0
52     %2:_(s16) = G_CONSTANT i16 23
53     %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16), %2(s16)
54     %3:_(<8 x s16>) = G_UDIV %0, %1
55     $q0 = COPY %3(<8 x s16>)
56     RET_ReallyLR implicit $q0
58 ...
59 ---
60 name:            combine_vec_udiv_nonuniform
61 alignment:       4
62 tracksRegLiveness: true
63 liveins:
64   - { reg: '$q0' }
65 body:             |
66   bb.1:
67     liveins: $q0
69     ; CHECK-LABEL: name: combine_vec_udiv_nonuniform
70     ; CHECK: liveins: $q0
71     ; CHECK-NEXT: {{  $}}
72     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
73     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
74     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
75     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 25645
76     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 4
77     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 -3855
78     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 5
79     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s16) = G_CONSTANT i16 8195
80     ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s16) = G_CONSTANT i16 13
81     ; CHECK-NEXT: [[C8:%[0-9]+]]:_(s16) = G_CONSTANT i16 3
82     ; CHECK-NEXT: [[C9:%[0-9]+]]:_(s16) = G_CONSTANT i16 9363
83     ; CHECK-NEXT: [[C10:%[0-9]+]]:_(s16) = G_CONSTANT i16 512
84     ; CHECK-NEXT: [[C11:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32767
85     ; CHECK-NEXT: [[C12:%[0-9]+]]:_(s16) = G_CONSTANT i16 15
86     ; CHECK-NEXT: [[C13:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32639
87     ; CHECK-NEXT: [[C14:%[0-9]+]]:_(s16) = G_CONSTANT i16 2
88     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C8]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16)
89     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C2]](s16), [[C4]](s16), [[C6]](s16), [[C9]](s16), [[C10]](s16), [[C11]](s16), [[C13]](s16), [[C14]](s16)
90     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16), [[C1]](s16)
91     ; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C3]](s16), [[C5]](s16), [[C7]](s16), [[C1]](s16), [[C1]](s16), [[C12]](s16), [[C12]](s16), [[C1]](s16)
92     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[BUILD_VECTOR]](<8 x s16>)
93     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[LSHR]], [[BUILD_VECTOR1]]
94     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY]], [[UMULH]]
95     ; CHECK-NEXT: [[UMULH1:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[SUB]], [[BUILD_VECTOR2]]
96     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UMULH1]], [[UMULH]]
97     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[ADD]], [[BUILD_VECTOR3]](<8 x s16>)
98     ; CHECK-NEXT: $q0 = COPY [[LSHR1]](<8 x s16>)
99     ; CHECK-NEXT: RET_ReallyLR implicit $q0
100     %0:_(<8 x s16>) = COPY $q0
101     %2:_(s16) = G_CONSTANT i16 23
102     %3:_(s16) = G_CONSTANT i16 34
103     %4:_(s16) = G_CONSTANT i16 -23
104     %5:_(s16) = G_CONSTANT i16 56
105     %6:_(s16) = G_CONSTANT i16 128
106     %7:_(s16) = G_CONSTANT i16 -1
107     %8:_(s16) = G_CONSTANT i16 -256
108     %9:_(s16) = G_CONSTANT i16 -32768
109     %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16), %5(s16), %6(s16), %7(s16), %8(s16), %9(s16)
110     %10:_(<8 x s16>) = G_UDIV %0, %1
111     $q0 = COPY %10(<8 x s16>)
112     RET_ReallyLR implicit $q0
116 name:            combine_vec_udiv_nonuniform2
117 alignment:       4
118 tracksRegLiveness: true
119 liveins:
120   - { reg: '$q0' }
121 body:             |
122   bb.1:
123     liveins: $q0
125     ; CHECK-LABEL: name: combine_vec_udiv_nonuniform2
126     ; CHECK: liveins: $q0
127     ; CHECK-NEXT: {{  $}}
128     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
129     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
130     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 16393
131     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
132     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 13
133     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 -5617
134     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 5
135     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s16) = G_CONSTANT i16 -7281
136     ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32749
137     ; CHECK-NEXT: [[C8:%[0-9]+]]:_(s16) = G_CONSTANT i16 15
138     ; CHECK-NEXT: [[C9:%[0-9]+]]:_(s16) = G_CONSTANT i16 -10347
139     ; CHECK-NEXT: [[C10:%[0-9]+]]:_(s16) = G_CONSTANT i16 8197
140     ; CHECK-NEXT: [[C11:%[0-9]+]]:_(s16) = G_CONSTANT i16 -13107
141     ; CHECK-NEXT: [[C12:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32747
142     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16), [[C2]](s16)
143     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C1]](s16), [[C4]](s16), [[C6]](s16), [[C7]](s16), [[C9]](s16), [[C10]](s16), [[C11]](s16), [[C12]](s16)
144     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C3]](s16), [[C5]](s16), [[C5]](s16), [[C8]](s16), [[C5]](s16), [[C3]](s16), [[C5]](s16), [[C8]](s16)
145     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[COPY]], [[BUILD_VECTOR]](<8 x s16>)
146     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[LSHR]], [[BUILD_VECTOR1]]
147     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[UMULH]], [[BUILD_VECTOR2]](<8 x s16>)
148     ; CHECK-NEXT: $q0 = COPY [[LSHR1]](<8 x s16>)
149     ; CHECK-NEXT: RET_ReallyLR implicit $q0
150     %0:_(<8 x s16>) = COPY $q0
151     %2:_(s16) = G_CONSTANT i16 -34
152     %3:_(s16) = G_CONSTANT i16 35
153     %4:_(s16) = G_CONSTANT i16 36
154     %5:_(s16) = G_CONSTANT i16 -37
155     %6:_(s16) = G_CONSTANT i16 38
156     %7:_(s16) = G_CONSTANT i16 -39
157     %8:_(s16) = G_CONSTANT i16 40
158     %9:_(s16) = G_CONSTANT i16 -41
159     %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16), %5(s16), %6(s16), %7(s16), %8(s16), %9(s16)
160     %10:_(<8 x s16>) = G_UDIV %0, %1
161     $q0 = COPY %10(<8 x s16>)
162     RET_ReallyLR implicit $q0
166 name:            combine_vec_udiv_nonuniform3
167 alignment:       4
168 tracksRegLiveness: true
169 liveins:
170   - { reg: '$q0' }
171 body:             |
172   bb.1:
173     liveins: $q0
175     ; CHECK-LABEL: name: combine_vec_udiv_nonuniform3
176     ; CHECK: liveins: $q0
177     ; CHECK-NEXT: {{  $}}
178     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
179     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 9363
180     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 2
181     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 25645
182     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 4
183     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 18351
184     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 12137
185     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s16) = G_CONSTANT i16 2115
186     ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s16) = G_CONSTANT i16 23705
187     ; CHECK-NEXT: [[C8:%[0-9]+]]:_(s16) = G_CONSTANT i16 5
188     ; CHECK-NEXT: [[C9:%[0-9]+]]:_(s16) = G_CONSTANT i16 1041
189     ; CHECK-NEXT: [[C10:%[0-9]+]]:_(s16) = G_CONSTANT i16 517
190     ; CHECK-NEXT: [[C11:%[0-9]+]]:_(s16) = G_CONSTANT i16 6
191     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C2]](s16), [[C4]](s16), [[C5]](s16), [[C6]](s16), [[C7]](s16), [[C9]](s16), [[C10]](s16)
192     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C1]](s16), [[C3]](s16), [[C3]](s16), [[C3]](s16), [[C3]](s16), [[C8]](s16), [[C8]](s16), [[C11]](s16)
193     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[COPY]], [[BUILD_VECTOR]]
194     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY]], [[UMULH]]
195     ; CHECK-NEXT: [[C12:%[0-9]+]]:_(s16) = G_CONSTANT i16 1
196     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C12]](s16), [[C12]](s16), [[C12]](s16), [[C12]](s16), [[C12]](s16), [[C12]](s16), [[C12]](s16), [[C12]](s16)
197     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[SUB]], [[BUILD_VECTOR2]](<8 x s16>)
198     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[LSHR]], [[UMULH]]
199     ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[ADD]], [[BUILD_VECTOR1]](<8 x s16>)
200     ; CHECK-NEXT: $q0 = COPY [[LSHR1]](<8 x s16>)
201     ; CHECK-NEXT: RET_ReallyLR implicit $q0
202     %0:_(<8 x s16>) = COPY $q0
203     %2:_(s16) = G_CONSTANT i16 7
204     %3:_(s16) = G_CONSTANT i16 23
205     %4:_(s16) = G_CONSTANT i16 25
206     %5:_(s16) = G_CONSTANT i16 27
207     %6:_(s16) = G_CONSTANT i16 31
208     %7:_(s16) = G_CONSTANT i16 47
209     %8:_(s16) = G_CONSTANT i16 63
210     %9:_(s16) = G_CONSTANT i16 127
211     %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16), %5(s16), %6(s16), %7(s16), %8(s16), %9(s16)
212     %10:_(<8 x s16>) = G_UDIV %0, %1
213     $q0 = COPY %10(<8 x s16>)
214     RET_ReallyLR implicit $q0
218 name:            combine_vec_udiv_nonuniform4
219 alignment:       4
220 tracksRegLiveness: true
221 liveins:
222   - { reg: '$q0' }
223 body:             |
224   bb.1:
225     liveins: $q0
227     ; CHECK-LABEL: name: combine_vec_udiv_nonuniform4
228     ; CHECK: liveins: $q0
229     ; CHECK-NEXT: {{  $}}
230     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<16 x s8>) = COPY $q0
231     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s8) = G_CONSTANT i8 0
232     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s8) = G_CONSTANT i8 -85
233     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s8) = G_CONSTANT i8 7
234     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[C1]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)
235     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[C2]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8), [[C]](s8)
236     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<16 x s8>) = G_UMULH [[COPY]], [[BUILD_VECTOR]]
237     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<16 x s8>) = G_LSHR [[UMULH]], [[BUILD_VECTOR1]](<16 x s8>)
238     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
239     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
240     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<16 x s1>) = G_BUILD_VECTOR [[C3]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1), [[C4]](s1)
241     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(<16 x s8>) = G_SELECT [[BUILD_VECTOR2]](<16 x s1>), [[COPY]], [[LSHR]]
242     ; CHECK-NEXT: $q0 = COPY [[SELECT]](<16 x s8>)
243     ; CHECK-NEXT: RET_ReallyLR implicit $q0
244     %0:_(<16 x s8>) = COPY $q0
245     %2:_(s8) = G_CONSTANT i8 -64
246     %3:_(s8) = G_CONSTANT i8 1
247     %1:_(<16 x s8>) = G_BUILD_VECTOR %2(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8), %3(s8)
248     %4:_(<16 x s8>) = G_UDIV %0, %1
249     $q0 = COPY %4(<16 x s8>)
250     RET_ReallyLR implicit $q0
254 name:            pr38477
255 alignment:       4
256 tracksRegLiveness: true
257 liveins:
258   - { reg: '$q0' }
259 body:             |
260   bb.1:
261     liveins: $q0
263     ; CHECK-LABEL: name: pr38477
264     ; CHECK: liveins: $q0
265     ; CHECK-NEXT: {{  $}}
266     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $q0
267     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 0
268     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s16) = G_CONSTANT i16 4957
269     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s16) = G_CONSTANT i16 -32768
270     ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s16) = G_CONSTANT i16 6
271     ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s16) = G_CONSTANT i16 -8079
272     ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s16) = G_CONSTANT i16 4103
273     ; CHECK-NEXT: [[C6:%[0-9]+]]:_(s16) = G_CONSTANT i16 12
274     ; CHECK-NEXT: [[C7:%[0-9]+]]:_(s16) = G_CONSTANT i16 16385
275     ; CHECK-NEXT: [[C8:%[0-9]+]]:_(s16) = G_CONSTANT i16 14
276     ; CHECK-NEXT: [[C9:%[0-9]+]]:_(s16) = G_CONSTANT i16 -29991
277     ; CHECK-NEXT: [[C10:%[0-9]+]]:_(s16) = G_CONSTANT i16 2048
278     ; CHECK-NEXT: [[C11:%[0-9]+]]:_(s16) = G_CONSTANT i16 2115
279     ; CHECK-NEXT: [[C12:%[0-9]+]]:_(s16) = G_CONSTANT i16 4
280     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C1]](s16), [[C4]](s16), [[C5]](s16), [[C7]](s16), [[C9]](s16), [[C10]](s16), [[C11]](s16)
281     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C2]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C]](s16), [[C2]](s16)
282     ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[C]](s16), [[C3]](s16), [[C3]](s16), [[C6]](s16), [[C8]](s16), [[C3]](s16), [[C]](s16), [[C12]](s16)
283     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[COPY]], [[BUILD_VECTOR]]
284     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<8 x s16>) = G_SUB [[COPY]], [[UMULH]]
285     ; CHECK-NEXT: [[UMULH1:%[0-9]+]]:_(<8 x s16>) = G_UMULH [[SUB]], [[BUILD_VECTOR1]]
286     ; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<8 x s16>) = G_ADD [[UMULH1]], [[UMULH]]
287     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<8 x s16>) = G_LSHR [[ADD]], [[BUILD_VECTOR2]](<8 x s16>)
288     ; CHECK-NEXT: [[C13:%[0-9]+]]:_(s1) = G_CONSTANT i1 true
289     ; CHECK-NEXT: [[C14:%[0-9]+]]:_(s1) = G_CONSTANT i1 false
290     ; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<8 x s1>) = G_BUILD_VECTOR [[C13]](s1), [[C14]](s1), [[C14]](s1), [[C14]](s1), [[C14]](s1), [[C14]](s1), [[C14]](s1), [[C14]](s1)
291     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(<8 x s16>) = G_SELECT [[BUILD_VECTOR3]](<8 x s1>), [[COPY]], [[LSHR]]
292     ; CHECK-NEXT: $q0 = COPY [[SELECT]](<8 x s16>)
293     ; CHECK-NEXT: RET_ReallyLR implicit $q0
294     %0:_(<8 x s16>) = COPY $q0
295     %2:_(s16) = G_CONSTANT i16 1
296     %3:_(s16) = G_CONSTANT i16 119
297     %4:_(s16) = G_CONSTANT i16 73
298     %5:_(s16) = G_CONSTANT i16 -111
299     %6:_(s16) = G_CONSTANT i16 -3
300     %7:_(s16) = G_CONSTANT i16 118
301     %8:_(s16) = G_CONSTANT i16 32
302     %9:_(s16) = G_CONSTANT i16 31
303     %1:_(<8 x s16>) = G_BUILD_VECTOR %2(s16), %3(s16), %4(s16), %5(s16), %6(s16), %7(s16), %8(s16), %9(s16)
304     %10:_(<8 x s16>) = G_UDIV %0, %1
305     $q0 = COPY %10(<8 x s16>)
306     RET_ReallyLR implicit $q0
309 name:            udiv_exact
310 body:             |
311   bb.1:
312     liveins: $w0
314     ; CHECK-LABEL: name: udiv_exact
315     ; CHECK: liveins: $w0
316     ; CHECK-NEXT: {{  $}}
317     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
318     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
319     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -991146299
320     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = exact G_LSHR [[COPY]], [[C]](s32)
321     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[LSHR]], [[C1]]
322     ; CHECK-NEXT: $w0 = COPY [[MUL]](s32)
323     ; CHECK-NEXT: RET_ReallyLR implicit $w0
324     %0:_(s32) = COPY $w0
325     %1:_(s32) = G_CONSTANT i32 104
326     %2:_(s32) = exact G_UDIV %0, %1
327     $w0 = COPY %2(s32)
328     RET_ReallyLR implicit $w0
332 name:            udiv_noexact
333 body:             |
334   bb.1:
335     liveins: $w0
337     ; CHECK-LABEL: name: udiv_noexact
338     ; CHECK: liveins: $w0
339     ; CHECK-NEXT: {{  $}}
340     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
341     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1321528399
342     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 5
343     ; CHECK-NEXT: [[UMULH:%[0-9]+]]:_(s32) = G_UMULH [[COPY]], [[C]]
344     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UMULH]], [[C1]](s32)
345     ; CHECK-NEXT: $w0 = COPY [[LSHR]](s32)
346     ; CHECK-NEXT: RET_ReallyLR implicit $w0
347     %0:_(s32) = COPY $w0
348     %1:_(s32) = G_CONSTANT i32 104
349     %2:_(s32) = G_UDIV %0, %1
350     $w0 = COPY %2(s32)
351     RET_ReallyLR implicit $w0
355 name:            udiv_exact_minsize
356 body:             |
357   bb.1:
358     liveins: $w0
360     ; CHECK-LABEL: name: udiv_exact_minsize
361     ; CHECK: liveins: $w0
362     ; CHECK-NEXT: {{  $}}
363     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
364     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
365     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -991146299
366     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = exact G_LSHR [[COPY]], [[C]](s32)
367     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(s32) = G_MUL [[LSHR]], [[C1]]
368     ; CHECK-NEXT: $w0 = COPY [[MUL]](s32)
369     ; CHECK-NEXT: RET_ReallyLR implicit $w0
370     %0:_(s32) = COPY $w0
371     %1:_(s32) = G_CONSTANT i32 104
372     %2:_(s32) = exact G_UDIV %0, %1
373     $w0 = COPY %2(s32)
374     RET_ReallyLR implicit $w0
378 name:            div_v4s32
379 body:             |
380   bb.1:
381     liveins: $q0
383     ; CHECK-LABEL: name: div_v4s32
384     ; CHECK: liveins: $q0
385     ; CHECK-NEXT: {{  $}}
386     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
387     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
388     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -991146299
389     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 954437177
390     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
391     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C2]](s32), [[C1]](s32), [[C2]](s32)
392     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<4 x s32>) = exact G_LSHR [[COPY]], [[BUILD_VECTOR]](<4 x s32>)
393     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[LSHR]], [[BUILD_VECTOR1]]
394     ; CHECK-NEXT: $q0 = COPY [[MUL]](<4 x s32>)
395     ; CHECK-NEXT: RET_ReallyLR implicit $q0
396     %0:_(<4 x s32>) = COPY $q0
397     %c1:_(s32) = G_CONSTANT i32 104
398     %c2:_(s32) = G_CONSTANT i32 72
399     %1:_(<4 x s32>) = G_BUILD_VECTOR %c1(s32), %c2(s32), %c1(s32), %c2(s32)
400     %3:_(<4 x s32>) = exact G_UDIV %0, %1
401     $q0 = COPY %3(<4 x s32>)
402     RET_ReallyLR implicit $q0
406 name:            div_v4s32_splat
407 body:             |
408   bb.1:
409     liveins: $q0
411     ; CHECK-LABEL: name: div_v4s32_splat
412     ; CHECK: liveins: $q0
413     ; CHECK-NEXT: {{  $}}
414     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
415     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 3
416     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -991146299
417     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
418     ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C1]](s32), [[C1]](s32), [[C1]](s32), [[C1]](s32)
419     ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(<4 x s32>) = exact G_LSHR [[COPY]], [[BUILD_VECTOR]](<4 x s32>)
420     ; CHECK-NEXT: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[LSHR]], [[BUILD_VECTOR1]]
421     ; CHECK-NEXT: $q0 = COPY [[MUL]](<4 x s32>)
422     ; CHECK-NEXT: RET_ReallyLR implicit $q0
423     %0:_(<4 x s32>) = COPY $q0
424     %c1:_(s32) = G_CONSTANT i32 104
425     %1:_(<4 x s32>) = G_BUILD_VECTOR %c1(s32), %c1(s32), %c1(s32), %c1(s32)
426     %3:_(<4 x s32>) = exact G_UDIV %0, %1
427     $q0 = COPY %3(<4 x s32>)
428     RET_ReallyLR implicit $q0