[ELF] Make SyntheticSection parameter order match InputSection
[llvm-project.git] / llvm / test / CodeGen / PowerPC / wide-scalar-shift-legalization.ll
blobe1731ddfd928750e1c6ba2264cf321ee75649ac1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu | FileCheck %s --check-prefixes=ALL,LE,LE-64BIT
3 ; RUN: llc < %s -mcpu=ppc -mtriple=powerpc64-unknown-linux-gnu   | FileCheck %s --check-prefixes=ALL,BE
4 ; RUN: llc < %s -mtriple=ppc32--                       | FileCheck %s --check-prefixes=ALL,LE,LE-32BIT
6 define void @lshr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
7 ; ALL-LABEL: lshr_4bytes:
8 ; ALL:       # %bb.0:
9 ; ALL-NEXT:    lwz 3, 0(3)
10 ; ALL-NEXT:    lwz 4, 0(4)
11 ; ALL-NEXT:    srw 3, 3, 4
12 ; ALL-NEXT:    stw 3, 0(5)
13 ; ALL-NEXT:    blr
14   %src = load i32, ptr %src.ptr, align 1
15   %bitOff = load i32, ptr %bitOff.ptr, align 1
16   %res = lshr i32 %src, %bitOff
17   store i32 %res, ptr %dst, align 1
18   ret void
20 define void @shl_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
21 ; ALL-LABEL: shl_4bytes:
22 ; ALL:       # %bb.0:
23 ; ALL-NEXT:    lwz 3, 0(3)
24 ; ALL-NEXT:    lwz 4, 0(4)
25 ; ALL-NEXT:    slw 3, 3, 4
26 ; ALL-NEXT:    stw 3, 0(5)
27 ; ALL-NEXT:    blr
28   %src = load i32, ptr %src.ptr, align 1
29   %bitOff = load i32, ptr %bitOff.ptr, align 1
30   %res = shl i32 %src, %bitOff
31   store i32 %res, ptr %dst, align 1
32   ret void
34 define void @ashr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
35 ; ALL-LABEL: ashr_4bytes:
36 ; ALL:       # %bb.0:
37 ; ALL-NEXT:    lwz 3, 0(3)
38 ; ALL-NEXT:    lwz 4, 0(4)
39 ; ALL-NEXT:    sraw 3, 3, 4
40 ; ALL-NEXT:    stw 3, 0(5)
41 ; ALL-NEXT:    blr
42   %src = load i32, ptr %src.ptr, align 1
43   %bitOff = load i32, ptr %bitOff.ptr, align 1
44   %res = ashr i32 %src, %bitOff
45   store i32 %res, ptr %dst, align 1
46   ret void
49 define void @lshr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
50 ; LE-64BIT-LABEL: lshr_8bytes:
51 ; LE-64BIT:       # %bb.0:
52 ; LE-64BIT-NEXT:    ld 3, 0(3)
53 ; LE-64BIT-NEXT:    lwz 4, 0(4)
54 ; LE-64BIT-NEXT:    srd 3, 3, 4
55 ; LE-64BIT-NEXT:    std 3, 0(5)
56 ; LE-64BIT-NEXT:    blr
58 ; BE-LABEL: lshr_8bytes:
59 ; BE:       # %bb.0:
60 ; BE-NEXT:    ld 3, 0(3)
61 ; BE-NEXT:    lwz 4, 4(4)
62 ; BE-NEXT:    srd 3, 3, 4
63 ; BE-NEXT:    std 3, 0(5)
64 ; BE-NEXT:    blr
66 ; LE-32BIT-LABEL: lshr_8bytes:
67 ; LE-32BIT:       # %bb.0:
68 ; LE-32BIT-NEXT:    lwz 4, 4(4)
69 ; LE-32BIT-NEXT:    lwz 6, 4(3)
70 ; LE-32BIT-NEXT:    lwz 3, 0(3)
71 ; LE-32BIT-NEXT:    subfic 7, 4, 32
72 ; LE-32BIT-NEXT:    srw 6, 6, 4
73 ; LE-32BIT-NEXT:    addi 8, 4, -32
74 ; LE-32BIT-NEXT:    slw 7, 3, 7
75 ; LE-32BIT-NEXT:    srw 4, 3, 4
76 ; LE-32BIT-NEXT:    srw 3, 3, 8
77 ; LE-32BIT-NEXT:    or 6, 6, 7
78 ; LE-32BIT-NEXT:    or 3, 6, 3
79 ; LE-32BIT-NEXT:    stw 4, 0(5)
80 ; LE-32BIT-NEXT:    stw 3, 4(5)
81 ; LE-32BIT-NEXT:    blr
82   %src = load i64, ptr %src.ptr, align 1
83   %bitOff = load i64, ptr %bitOff.ptr, align 1
84   %res = lshr i64 %src, %bitOff
85   store i64 %res, ptr %dst, align 1
86   ret void
88 define void @shl_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
89 ; LE-64BIT-LABEL: shl_8bytes:
90 ; LE-64BIT:       # %bb.0:
91 ; LE-64BIT-NEXT:    ld 3, 0(3)
92 ; LE-64BIT-NEXT:    lwz 4, 0(4)
93 ; LE-64BIT-NEXT:    sld 3, 3, 4
94 ; LE-64BIT-NEXT:    std 3, 0(5)
95 ; LE-64BIT-NEXT:    blr
97 ; BE-LABEL: shl_8bytes:
98 ; BE:       # %bb.0:
99 ; BE-NEXT:    ld 3, 0(3)
100 ; BE-NEXT:    lwz 4, 4(4)
101 ; BE-NEXT:    sld 3, 3, 4
102 ; BE-NEXT:    std 3, 0(5)
103 ; BE-NEXT:    blr
105 ; LE-32BIT-LABEL: shl_8bytes:
106 ; LE-32BIT:       # %bb.0:
107 ; LE-32BIT-NEXT:    lwz 4, 4(4)
108 ; LE-32BIT-NEXT:    lwz 6, 0(3)
109 ; LE-32BIT-NEXT:    lwz 3, 4(3)
110 ; LE-32BIT-NEXT:    subfic 7, 4, 32
111 ; LE-32BIT-NEXT:    slw 6, 6, 4
112 ; LE-32BIT-NEXT:    addi 8, 4, -32
113 ; LE-32BIT-NEXT:    srw 7, 3, 7
114 ; LE-32BIT-NEXT:    slw 4, 3, 4
115 ; LE-32BIT-NEXT:    slw 3, 3, 8
116 ; LE-32BIT-NEXT:    or 6, 6, 7
117 ; LE-32BIT-NEXT:    or 3, 6, 3
118 ; LE-32BIT-NEXT:    stw 4, 4(5)
119 ; LE-32BIT-NEXT:    stw 3, 0(5)
120 ; LE-32BIT-NEXT:    blr
121   %src = load i64, ptr %src.ptr, align 1
122   %bitOff = load i64, ptr %bitOff.ptr, align 1
123   %res = shl i64 %src, %bitOff
124   store i64 %res, ptr %dst, align 1
125   ret void
127 define void @ashr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
128 ; LE-64BIT-LABEL: ashr_8bytes:
129 ; LE-64BIT:       # %bb.0:
130 ; LE-64BIT-NEXT:    ld 3, 0(3)
131 ; LE-64BIT-NEXT:    lwz 4, 0(4)
132 ; LE-64BIT-NEXT:    srad 3, 3, 4
133 ; LE-64BIT-NEXT:    std 3, 0(5)
134 ; LE-64BIT-NEXT:    blr
136 ; BE-LABEL: ashr_8bytes:
137 ; BE:       # %bb.0:
138 ; BE-NEXT:    ld 3, 0(3)
139 ; BE-NEXT:    lwz 4, 4(4)
140 ; BE-NEXT:    srad 3, 3, 4
141 ; BE-NEXT:    std 3, 0(5)
142 ; BE-NEXT:    blr
144 ; LE-32BIT-LABEL: ashr_8bytes:
145 ; LE-32BIT:       # %bb.0:
146 ; LE-32BIT-NEXT:    lwz 4, 4(4)
147 ; LE-32BIT-NEXT:    lwz 6, 0(3)
148 ; LE-32BIT-NEXT:    addi 7, 4, -32
149 ; LE-32BIT-NEXT:    cmpwi 7, 0
150 ; LE-32BIT-NEXT:    ble 0, .LBB5_2
151 ; LE-32BIT-NEXT:  # %bb.1:
152 ; LE-32BIT-NEXT:    sraw 3, 6, 7
153 ; LE-32BIT-NEXT:    b .LBB5_3
154 ; LE-32BIT-NEXT:  .LBB5_2:
155 ; LE-32BIT-NEXT:    lwz 3, 4(3)
156 ; LE-32BIT-NEXT:    subfic 7, 4, 32
157 ; LE-32BIT-NEXT:    slw 7, 6, 7
158 ; LE-32BIT-NEXT:    srw 3, 3, 4
159 ; LE-32BIT-NEXT:    or 3, 3, 7
160 ; LE-32BIT-NEXT:  .LBB5_3:
161 ; LE-32BIT-NEXT:    sraw 4, 6, 4
162 ; LE-32BIT-NEXT:    stw 4, 0(5)
163 ; LE-32BIT-NEXT:    stw 3, 4(5)
164 ; LE-32BIT-NEXT:    blr
165   %src = load i64, ptr %src.ptr, align 1
166   %bitOff = load i64, ptr %bitOff.ptr, align 1
167   %res = ashr i64 %src, %bitOff
168   store i64 %res, ptr %dst, align 1
169   ret void
172 define void @lshr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
173 ; LE-64BIT-LABEL: lshr_16bytes:
174 ; LE-64BIT:       # %bb.0:
175 ; LE-64BIT-NEXT:    lwz 4, 0(4)
176 ; LE-64BIT-NEXT:    ld 6, 8(3)
177 ; LE-64BIT-NEXT:    subfic 7, 4, 64
178 ; LE-64BIT-NEXT:    ld 3, 0(3)
179 ; LE-64BIT-NEXT:    srd 3, 3, 4
180 ; LE-64BIT-NEXT:    sld 7, 6, 7
181 ; LE-64BIT-NEXT:    or 3, 3, 7
182 ; LE-64BIT-NEXT:    addi 7, 4, -64
183 ; LE-64BIT-NEXT:    srd 4, 6, 4
184 ; LE-64BIT-NEXT:    srd 7, 6, 7
185 ; LE-64BIT-NEXT:    std 4, 8(5)
186 ; LE-64BIT-NEXT:    or 3, 3, 7
187 ; LE-64BIT-NEXT:    std 3, 0(5)
188 ; LE-64BIT-NEXT:    blr
190 ; BE-LABEL: lshr_16bytes:
191 ; BE:       # %bb.0:
192 ; BE-NEXT:    lwz 4, 12(4)
193 ; BE-NEXT:    ld 6, 0(3)
194 ; BE-NEXT:    ld 3, 8(3)
195 ; BE-NEXT:    subfic 7, 4, 64
196 ; BE-NEXT:    srd 3, 3, 4
197 ; BE-NEXT:    sld 7, 6, 7
198 ; BE-NEXT:    addi 8, 4, -64
199 ; BE-NEXT:    or 3, 3, 7
200 ; BE-NEXT:    srd 7, 6, 8
201 ; BE-NEXT:    srd 4, 6, 4
202 ; BE-NEXT:    or 3, 3, 7
203 ; BE-NEXT:    std 4, 0(5)
204 ; BE-NEXT:    std 3, 8(5)
205 ; BE-NEXT:    blr
207 ; LE-32BIT-LABEL: lshr_16bytes:
208 ; LE-32BIT:       # %bb.0:
209 ; LE-32BIT-NEXT:    stwu 1, -48(1)
210 ; LE-32BIT-NEXT:    lwz 7, 0(3)
211 ; LE-32BIT-NEXT:    li 6, 0
212 ; LE-32BIT-NEXT:    lwz 8, 4(3)
213 ; LE-32BIT-NEXT:    lwz 9, 8(3)
214 ; LE-32BIT-NEXT:    lwz 3, 12(3)
215 ; LE-32BIT-NEXT:    lwz 4, 12(4)
216 ; LE-32BIT-NEXT:    stw 6, 28(1)
217 ; LE-32BIT-NEXT:    stw 6, 24(1)
218 ; LE-32BIT-NEXT:    stw 6, 20(1)
219 ; LE-32BIT-NEXT:    stw 6, 16(1)
220 ; LE-32BIT-NEXT:    rlwinm 6, 4, 29, 28, 29
221 ; LE-32BIT-NEXT:    stw 3, 44(1)
222 ; LE-32BIT-NEXT:    addi 3, 1, 32
223 ; LE-32BIT-NEXT:    stw 9, 40(1)
224 ; LE-32BIT-NEXT:    sub 3, 3, 6
225 ; LE-32BIT-NEXT:    stw 8, 36(1)
226 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
227 ; LE-32BIT-NEXT:    stw 7, 32(1)
228 ; LE-32BIT-NEXT:    subfic 9, 4, 32
229 ; LE-32BIT-NEXT:    lwz 6, 4(3)
230 ; LE-32BIT-NEXT:    lwz 7, 0(3)
231 ; LE-32BIT-NEXT:    lwz 8, 12(3)
232 ; LE-32BIT-NEXT:    srw 10, 6, 4
233 ; LE-32BIT-NEXT:    lwz 3, 8(3)
234 ; LE-32BIT-NEXT:    slw 11, 7, 9
235 ; LE-32BIT-NEXT:    slw 6, 6, 9
236 ; LE-32BIT-NEXT:    srw 8, 8, 4
237 ; LE-32BIT-NEXT:    slw 9, 3, 9
238 ; LE-32BIT-NEXT:    srw 3, 3, 4
239 ; LE-32BIT-NEXT:    or 3, 6, 3
240 ; LE-32BIT-NEXT:    stw 3, 8(5)
241 ; LE-32BIT-NEXT:    or 3, 9, 8
242 ; LE-32BIT-NEXT:    srw 4, 7, 4
243 ; LE-32BIT-NEXT:    stw 3, 12(5)
244 ; LE-32BIT-NEXT:    or 3, 11, 10
245 ; LE-32BIT-NEXT:    stw 4, 0(5)
246 ; LE-32BIT-NEXT:    stw 3, 4(5)
247 ; LE-32BIT-NEXT:    addi 1, 1, 48
248 ; LE-32BIT-NEXT:    blr
249   %src = load i128, ptr %src.ptr, align 1
250   %bitOff = load i128, ptr %bitOff.ptr, align 1
251   %res = lshr i128 %src, %bitOff
252   store i128 %res, ptr %dst, align 1
253   ret void
255 define void @shl_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
256 ; LE-64BIT-LABEL: shl_16bytes:
257 ; LE-64BIT:       # %bb.0:
258 ; LE-64BIT-NEXT:    lwz 4, 0(4)
259 ; LE-64BIT-NEXT:    ld 6, 0(3)
260 ; LE-64BIT-NEXT:    subfic 7, 4, 64
261 ; LE-64BIT-NEXT:    ld 3, 8(3)
262 ; LE-64BIT-NEXT:    sld 3, 3, 4
263 ; LE-64BIT-NEXT:    srd 7, 6, 7
264 ; LE-64BIT-NEXT:    or 3, 3, 7
265 ; LE-64BIT-NEXT:    addi 7, 4, -64
266 ; LE-64BIT-NEXT:    sld 4, 6, 4
267 ; LE-64BIT-NEXT:    sld 7, 6, 7
268 ; LE-64BIT-NEXT:    std 4, 0(5)
269 ; LE-64BIT-NEXT:    or 3, 3, 7
270 ; LE-64BIT-NEXT:    std 3, 8(5)
271 ; LE-64BIT-NEXT:    blr
273 ; BE-LABEL: shl_16bytes:
274 ; BE:       # %bb.0:
275 ; BE-NEXT:    lwz 4, 12(4)
276 ; BE-NEXT:    ld 6, 8(3)
277 ; BE-NEXT:    ld 3, 0(3)
278 ; BE-NEXT:    subfic 7, 4, 64
279 ; BE-NEXT:    sld 3, 3, 4
280 ; BE-NEXT:    srd 7, 6, 7
281 ; BE-NEXT:    addi 8, 4, -64
282 ; BE-NEXT:    or 3, 3, 7
283 ; BE-NEXT:    sld 7, 6, 8
284 ; BE-NEXT:    sld 4, 6, 4
285 ; BE-NEXT:    or 3, 3, 7
286 ; BE-NEXT:    std 4, 8(5)
287 ; BE-NEXT:    std 3, 0(5)
288 ; BE-NEXT:    blr
290 ; LE-32BIT-LABEL: shl_16bytes:
291 ; LE-32BIT:       # %bb.0:
292 ; LE-32BIT-NEXT:    stwu 1, -48(1)
293 ; LE-32BIT-NEXT:    lwz 7, 0(3)
294 ; LE-32BIT-NEXT:    li 6, 0
295 ; LE-32BIT-NEXT:    lwz 8, 4(3)
296 ; LE-32BIT-NEXT:    lwz 9, 8(3)
297 ; LE-32BIT-NEXT:    lwz 3, 12(3)
298 ; LE-32BIT-NEXT:    lwz 4, 12(4)
299 ; LE-32BIT-NEXT:    stw 6, 44(1)
300 ; LE-32BIT-NEXT:    stw 6, 40(1)
301 ; LE-32BIT-NEXT:    stw 6, 36(1)
302 ; LE-32BIT-NEXT:    stw 6, 32(1)
303 ; LE-32BIT-NEXT:    rlwinm 6, 4, 29, 28, 29
304 ; LE-32BIT-NEXT:    stw 3, 28(1)
305 ; LE-32BIT-NEXT:    addi 3, 1, 16
306 ; LE-32BIT-NEXT:    stw 9, 24(1)
307 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
308 ; LE-32BIT-NEXT:    stw 8, 20(1)
309 ; LE-32BIT-NEXT:    subfic 8, 4, 32
310 ; LE-32BIT-NEXT:    stw 7, 16(1)
311 ; LE-32BIT-NEXT:    lwzux 3, 6, 3
312 ; LE-32BIT-NEXT:    lwz 9, 4(6)
313 ; LE-32BIT-NEXT:    slw 3, 3, 4
314 ; LE-32BIT-NEXT:    lwz 7, 8(6)
315 ; LE-32BIT-NEXT:    lwz 6, 12(6)
316 ; LE-32BIT-NEXT:    slw 11, 9, 4
317 ; LE-32BIT-NEXT:    srw 9, 9, 8
318 ; LE-32BIT-NEXT:    srw 10, 7, 8
319 ; LE-32BIT-NEXT:    srw 8, 6, 8
320 ; LE-32BIT-NEXT:    slw 7, 7, 4
321 ; LE-32BIT-NEXT:    slw 4, 6, 4
322 ; LE-32BIT-NEXT:    or 3, 3, 9
323 ; LE-32BIT-NEXT:    stw 4, 12(5)
324 ; LE-32BIT-NEXT:    or 4, 7, 8
325 ; LE-32BIT-NEXT:    stw 3, 0(5)
326 ; LE-32BIT-NEXT:    or 3, 11, 10
327 ; LE-32BIT-NEXT:    stw 4, 8(5)
328 ; LE-32BIT-NEXT:    stw 3, 4(5)
329 ; LE-32BIT-NEXT:    addi 1, 1, 48
330 ; LE-32BIT-NEXT:    blr
331   %src = load i128, ptr %src.ptr, align 1
332   %bitOff = load i128, ptr %bitOff.ptr, align 1
333   %res = shl i128 %src, %bitOff
334   store i128 %res, ptr %dst, align 1
335   ret void
337 define void @ashr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
338 ; LE-64BIT-LABEL: ashr_16bytes:
339 ; LE-64BIT:       # %bb.0:
340 ; LE-64BIT-NEXT:    lwz 4, 0(4)
341 ; LE-64BIT-NEXT:    ld 6, 8(3)
342 ; LE-64BIT-NEXT:    subfic 7, 4, 64
343 ; LE-64BIT-NEXT:    ld 3, 0(3)
344 ; LE-64BIT-NEXT:    srd 3, 3, 4
345 ; LE-64BIT-NEXT:    sld 7, 6, 7
346 ; LE-64BIT-NEXT:    or 3, 3, 7
347 ; LE-64BIT-NEXT:    addi 7, 4, -64
348 ; LE-64BIT-NEXT:    srad 4, 6, 4
349 ; LE-64BIT-NEXT:    cmpwi 7, 1
350 ; LE-64BIT-NEXT:    srad 8, 6, 7
351 ; LE-64BIT-NEXT:    std 4, 8(5)
352 ; LE-64BIT-NEXT:    isellt 3, 3, 8
353 ; LE-64BIT-NEXT:    std 3, 0(5)
354 ; LE-64BIT-NEXT:    blr
356 ; BE-LABEL: ashr_16bytes:
357 ; BE:       # %bb.0:
358 ; BE-NEXT:    lwz 4, 12(4)
359 ; BE-NEXT:    ld 6, 0(3)
360 ; BE-NEXT:    addi 7, 4, -64
361 ; BE-NEXT:    cmpwi 7, 1
362 ; BE-NEXT:    blt 0, .LBB8_2
363 ; BE-NEXT:  # %bb.1:
364 ; BE-NEXT:    srad 3, 6, 7
365 ; BE-NEXT:    b .LBB8_3
366 ; BE-NEXT:  .LBB8_2:
367 ; BE-NEXT:    ld 3, 8(3)
368 ; BE-NEXT:    subfic 7, 4, 64
369 ; BE-NEXT:    sld 7, 6, 7
370 ; BE-NEXT:    srd 3, 3, 4
371 ; BE-NEXT:    or 3, 3, 7
372 ; BE-NEXT:  .LBB8_3:
373 ; BE-NEXT:    srad 4, 6, 4
374 ; BE-NEXT:    std 3, 8(5)
375 ; BE-NEXT:    std 4, 0(5)
376 ; BE-NEXT:    blr
378 ; LE-32BIT-LABEL: ashr_16bytes:
379 ; LE-32BIT:       # %bb.0:
380 ; LE-32BIT-NEXT:    stwu 1, -48(1)
381 ; LE-32BIT-NEXT:    lwz 7, 0(3)
382 ; LE-32BIT-NEXT:    addi 6, 1, 32
383 ; LE-32BIT-NEXT:    lwz 8, 4(3)
384 ; LE-32BIT-NEXT:    lwz 9, 8(3)
385 ; LE-32BIT-NEXT:    lwz 3, 12(3)
386 ; LE-32BIT-NEXT:    lwz 4, 12(4)
387 ; LE-32BIT-NEXT:    stw 3, 44(1)
388 ; LE-32BIT-NEXT:    srawi 3, 7, 31
389 ; LE-32BIT-NEXT:    stw 7, 32(1)
390 ; LE-32BIT-NEXT:    rlwinm 7, 4, 29, 28, 29
391 ; LE-32BIT-NEXT:    stw 9, 40(1)
392 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
393 ; LE-32BIT-NEXT:    stw 8, 36(1)
394 ; LE-32BIT-NEXT:    subfic 9, 4, 32
395 ; LE-32BIT-NEXT:    stw 3, 28(1)
396 ; LE-32BIT-NEXT:    stw 3, 24(1)
397 ; LE-32BIT-NEXT:    stw 3, 20(1)
398 ; LE-32BIT-NEXT:    stw 3, 16(1)
399 ; LE-32BIT-NEXT:    sub 3, 6, 7
400 ; LE-32BIT-NEXT:    lwz 6, 4(3)
401 ; LE-32BIT-NEXT:    lwz 7, 0(3)
402 ; LE-32BIT-NEXT:    lwz 8, 12(3)
403 ; LE-32BIT-NEXT:    srw 10, 6, 4
404 ; LE-32BIT-NEXT:    lwz 3, 8(3)
405 ; LE-32BIT-NEXT:    slw 11, 7, 9
406 ; LE-32BIT-NEXT:    slw 6, 6, 9
407 ; LE-32BIT-NEXT:    srw 8, 8, 4
408 ; LE-32BIT-NEXT:    slw 9, 3, 9
409 ; LE-32BIT-NEXT:    srw 3, 3, 4
410 ; LE-32BIT-NEXT:    or 3, 6, 3
411 ; LE-32BIT-NEXT:    stw 3, 8(5)
412 ; LE-32BIT-NEXT:    or 3, 9, 8
413 ; LE-32BIT-NEXT:    sraw 4, 7, 4
414 ; LE-32BIT-NEXT:    stw 3, 12(5)
415 ; LE-32BIT-NEXT:    or 3, 11, 10
416 ; LE-32BIT-NEXT:    stw 4, 0(5)
417 ; LE-32BIT-NEXT:    stw 3, 4(5)
418 ; LE-32BIT-NEXT:    addi 1, 1, 48
419 ; LE-32BIT-NEXT:    blr
420   %src = load i128, ptr %src.ptr, align 1
421   %bitOff = load i128, ptr %bitOff.ptr, align 1
422   %res = ashr i128 %src, %bitOff
423   store i128 %res, ptr %dst, align 1
424   ret void
427 define void @lshr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
428 ; LE-64BIT-LABEL: lshr_32bytes:
429 ; LE-64BIT:       # %bb.0:
430 ; LE-64BIT-NEXT:    li 6, 16
431 ; LE-64BIT-NEXT:    lxvd2x 1, 0, 3
432 ; LE-64BIT-NEXT:    xxlxor 2, 2, 2
433 ; LE-64BIT-NEXT:    addi 7, 1, -64
434 ; LE-64BIT-NEXT:    li 8, 32
435 ; LE-64BIT-NEXT:    lxvd2x 0, 3, 6
436 ; LE-64BIT-NEXT:    lwz 3, 0(4)
437 ; LE-64BIT-NEXT:    li 4, 48
438 ; LE-64BIT-NEXT:    stxvd2x 2, 7, 8
439 ; LE-64BIT-NEXT:    stxvd2x 2, 7, 4
440 ; LE-64BIT-NEXT:    rlwinm 4, 3, 29, 27, 28
441 ; LE-64BIT-NEXT:    stxvd2x 1, 0, 7
442 ; LE-64BIT-NEXT:    clrlwi 3, 3, 26
443 ; LE-64BIT-NEXT:    stxvd2x 0, 7, 6
444 ; LE-64BIT-NEXT:    xori 8, 3, 63
445 ; LE-64BIT-NEXT:    ldux 6, 4, 7
446 ; LE-64BIT-NEXT:    ld 7, 16(4)
447 ; LE-64BIT-NEXT:    ld 9, 8(4)
448 ; LE-64BIT-NEXT:    ld 4, 24(4)
449 ; LE-64BIT-NEXT:    srd 6, 6, 3
450 ; LE-64BIT-NEXT:    sldi 11, 7, 1
451 ; LE-64BIT-NEXT:    srd 10, 9, 3
452 ; LE-64BIT-NEXT:    srd 7, 7, 3
453 ; LE-64BIT-NEXT:    sld 8, 11, 8
454 ; LE-64BIT-NEXT:    or 8, 10, 8
455 ; LE-64BIT-NEXT:    subfic 10, 3, 64
456 ; LE-64BIT-NEXT:    srd 3, 4, 3
457 ; LE-64BIT-NEXT:    sld 11, 4, 10
458 ; LE-64BIT-NEXT:    sld 9, 9, 10
459 ; LE-64BIT-NEXT:    std 3, 24(5)
460 ; LE-64BIT-NEXT:    std 8, 8(5)
461 ; LE-64BIT-NEXT:    or 6, 9, 6
462 ; LE-64BIT-NEXT:    or 3, 11, 7
463 ; LE-64BIT-NEXT:    std 6, 0(5)
464 ; LE-64BIT-NEXT:    std 3, 16(5)
465 ; LE-64BIT-NEXT:    blr
467 ; BE-LABEL: lshr_32bytes:
468 ; BE:       # %bb.0:
469 ; BE-NEXT:    ld 6, 0(3)
470 ; BE-NEXT:    ld 7, 8(3)
471 ; BE-NEXT:    ld 8, 16(3)
472 ; BE-NEXT:    ld 3, 24(3)
473 ; BE-NEXT:    lwz 4, 28(4)
474 ; BE-NEXT:    li 9, 0
475 ; BE-NEXT:    addi 10, 1, -32
476 ; BE-NEXT:    std 9, -40(1)
477 ; BE-NEXT:    std 9, -48(1)
478 ; BE-NEXT:    std 9, -56(1)
479 ; BE-NEXT:    std 9, -64(1)
480 ; BE-NEXT:    std 3, -8(1)
481 ; BE-NEXT:    rlwinm 3, 4, 29, 27, 28
482 ; BE-NEXT:    neg 3, 3
483 ; BE-NEXT:    std 8, -16(1)
484 ; BE-NEXT:    std 7, -24(1)
485 ; BE-NEXT:    std 6, -32(1)
486 ; BE-NEXT:    extsw 3, 3
487 ; BE-NEXT:    ldux 3, 10, 3
488 ; BE-NEXT:    clrlwi 4, 4, 26
489 ; BE-NEXT:    subfic 9, 4, 64
490 ; BE-NEXT:    ld 6, 8(10)
491 ; BE-NEXT:    ld 7, 24(10)
492 ; BE-NEXT:    ld 8, 16(10)
493 ; BE-NEXT:    sld 10, 3, 9
494 ; BE-NEXT:    srd 3, 3, 4
495 ; BE-NEXT:    std 3, 0(5)
496 ; BE-NEXT:    srd 11, 6, 4
497 ; BE-NEXT:    srd 7, 7, 4
498 ; BE-NEXT:    sld 6, 6, 9
499 ; BE-NEXT:    sld 9, 8, 9
500 ; BE-NEXT:    srd 8, 8, 4
501 ; BE-NEXT:    or 10, 10, 11
502 ; BE-NEXT:    or 7, 9, 7
503 ; BE-NEXT:    or 6, 6, 8
504 ; BE-NEXT:    std 6, 16(5)
505 ; BE-NEXT:    std 7, 24(5)
506 ; BE-NEXT:    std 10, 8(5)
507 ; BE-NEXT:    blr
509 ; LE-32BIT-LABEL: lshr_32bytes:
510 ; LE-32BIT:       # %bb.0:
511 ; LE-32BIT-NEXT:    stwu 1, -112(1)
512 ; LE-32BIT-NEXT:    lwz 7, 0(3)
513 ; LE-32BIT-NEXT:    li 6, 0
514 ; LE-32BIT-NEXT:    lwz 8, 4(3)
515 ; LE-32BIT-NEXT:    lwz 9, 8(3)
516 ; LE-32BIT-NEXT:    lwz 10, 12(3)
517 ; LE-32BIT-NEXT:    lwz 11, 16(3)
518 ; LE-32BIT-NEXT:    lwz 12, 20(3)
519 ; LE-32BIT-NEXT:    lwz 0, 24(3)
520 ; LE-32BIT-NEXT:    lwz 3, 28(3)
521 ; LE-32BIT-NEXT:    lwz 4, 28(4)
522 ; LE-32BIT-NEXT:    stw 6, 44(1)
523 ; LE-32BIT-NEXT:    stw 6, 40(1)
524 ; LE-32BIT-NEXT:    stw 6, 36(1)
525 ; LE-32BIT-NEXT:    stw 6, 32(1)
526 ; LE-32BIT-NEXT:    stw 6, 28(1)
527 ; LE-32BIT-NEXT:    stw 6, 24(1)
528 ; LE-32BIT-NEXT:    stw 6, 20(1)
529 ; LE-32BIT-NEXT:    stw 6, 16(1)
530 ; LE-32BIT-NEXT:    rlwinm 6, 4, 29, 27, 29
531 ; LE-32BIT-NEXT:    stw 3, 76(1)
532 ; LE-32BIT-NEXT:    addi 3, 1, 48
533 ; LE-32BIT-NEXT:    stw 25, 84(1) # 4-byte Folded Spill
534 ; LE-32BIT-NEXT:    sub 3, 3, 6
535 ; LE-32BIT-NEXT:    stw 26, 88(1) # 4-byte Folded Spill
536 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
537 ; LE-32BIT-NEXT:    stw 27, 92(1) # 4-byte Folded Spill
538 ; LE-32BIT-NEXT:    stw 28, 96(1) # 4-byte Folded Spill
539 ; LE-32BIT-NEXT:    stw 29, 100(1) # 4-byte Folded Spill
540 ; LE-32BIT-NEXT:    stw 30, 104(1) # 4-byte Folded Spill
541 ; LE-32BIT-NEXT:    subfic 30, 4, 32
542 ; LE-32BIT-NEXT:    stw 0, 72(1)
543 ; LE-32BIT-NEXT:    stw 12, 68(1)
544 ; LE-32BIT-NEXT:    xori 12, 4, 31
545 ; LE-32BIT-NEXT:    stw 11, 64(1)
546 ; LE-32BIT-NEXT:    stw 10, 60(1)
547 ; LE-32BIT-NEXT:    stw 9, 56(1)
548 ; LE-32BIT-NEXT:    stw 8, 52(1)
549 ; LE-32BIT-NEXT:    stw 7, 48(1)
550 ; LE-32BIT-NEXT:    lwz 6, 8(3)
551 ; LE-32BIT-NEXT:    lwz 7, 4(3)
552 ; LE-32BIT-NEXT:    lwz 8, 0(3)
553 ; LE-32BIT-NEXT:    srw 29, 6, 4
554 ; LE-32BIT-NEXT:    lwz 9, 12(3)
555 ; LE-32BIT-NEXT:    slw 6, 6, 30
556 ; LE-32BIT-NEXT:    lwz 10, 20(3)
557 ; LE-32BIT-NEXT:    slw 28, 8, 30
558 ; LE-32BIT-NEXT:    lwz 11, 16(3)
559 ; LE-32BIT-NEXT:    srw 27, 9, 4
560 ; LE-32BIT-NEXT:    lwz 0, 28(3)
561 ; LE-32BIT-NEXT:    srw 26, 10, 4
562 ; LE-32BIT-NEXT:    lwz 3, 24(3)
563 ; LE-32BIT-NEXT:    slw 25, 11, 30
564 ; LE-32BIT-NEXT:    slw 9, 9, 30
565 ; LE-32BIT-NEXT:    slw 10, 10, 30
566 ; LE-32BIT-NEXT:    slw 30, 3, 30
567 ; LE-32BIT-NEXT:    srw 3, 3, 4
568 ; LE-32BIT-NEXT:    srw 0, 0, 4
569 ; LE-32BIT-NEXT:    or 3, 10, 3
570 ; LE-32BIT-NEXT:    srw 11, 11, 4
571 ; LE-32BIT-NEXT:    stw 3, 24(5)
572 ; LE-32BIT-NEXT:    or 3, 30, 0
573 ; LE-32BIT-NEXT:    stw 3, 28(5)
574 ; LE-32BIT-NEXT:    or 3, 9, 11
575 ; LE-32BIT-NEXT:    stw 3, 16(5)
576 ; LE-32BIT-NEXT:    or 3, 25, 26
577 ; LE-32BIT-NEXT:    srw 8, 8, 4
578 ; LE-32BIT-NEXT:    srw 4, 7, 4
579 ; LE-32BIT-NEXT:    slwi 7, 7, 1
580 ; LE-32BIT-NEXT:    stw 3, 20(5)
581 ; LE-32BIT-NEXT:    or 3, 6, 27
582 ; LE-32BIT-NEXT:    slw 7, 7, 12
583 ; LE-32BIT-NEXT:    stw 3, 12(5)
584 ; LE-32BIT-NEXT:    or 3, 28, 4
585 ; LE-32BIT-NEXT:    stw 3, 4(5)
586 ; LE-32BIT-NEXT:    or 3, 29, 7
587 ; LE-32BIT-NEXT:    stw 8, 0(5)
588 ; LE-32BIT-NEXT:    stw 3, 8(5)
589 ; LE-32BIT-NEXT:    lwz 30, 104(1) # 4-byte Folded Reload
590 ; LE-32BIT-NEXT:    lwz 29, 100(1) # 4-byte Folded Reload
591 ; LE-32BIT-NEXT:    lwz 28, 96(1) # 4-byte Folded Reload
592 ; LE-32BIT-NEXT:    lwz 27, 92(1) # 4-byte Folded Reload
593 ; LE-32BIT-NEXT:    lwz 26, 88(1) # 4-byte Folded Reload
594 ; LE-32BIT-NEXT:    lwz 25, 84(1) # 4-byte Folded Reload
595 ; LE-32BIT-NEXT:    addi 1, 1, 112
596 ; LE-32BIT-NEXT:    blr
597   %src = load i256, ptr %src.ptr, align 1
598   %bitOff = load i256, ptr %bitOff.ptr, align 1
599   %res = lshr i256 %src, %bitOff
600   store i256 %res, ptr %dst, align 1
601   ret void
603 define void @shl_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
604 ; LE-64BIT-LABEL: shl_32bytes:
605 ; LE-64BIT:       # %bb.0:
606 ; LE-64BIT-NEXT:    li 6, 16
607 ; LE-64BIT-NEXT:    lwz 4, 0(4)
608 ; LE-64BIT-NEXT:    lxvd2x 1, 0, 3
609 ; LE-64BIT-NEXT:    addi 7, 1, -64
610 ; LE-64BIT-NEXT:    li 8, 48
611 ; LE-64BIT-NEXT:    lxvd2x 0, 3, 6
612 ; LE-64BIT-NEXT:    rlwinm 3, 4, 29, 27, 28
613 ; LE-64BIT-NEXT:    clrlwi 4, 4, 26
614 ; LE-64BIT-NEXT:    neg 3, 3
615 ; LE-64BIT-NEXT:    stxvd2x 0, 7, 8
616 ; LE-64BIT-NEXT:    xxlxor 0, 0, 0
617 ; LE-64BIT-NEXT:    li 8, 32
618 ; LE-64BIT-NEXT:    extsw 3, 3
619 ; LE-64BIT-NEXT:    stxvd2x 0, 7, 6
620 ; LE-64BIT-NEXT:    addi 6, 1, -32
621 ; LE-64BIT-NEXT:    stxvd2x 0, 0, 7
622 ; LE-64BIT-NEXT:    stxvd2x 1, 7, 8
623 ; LE-64BIT-NEXT:    subfic 7, 4, 64
624 ; LE-64BIT-NEXT:    ldux 3, 6, 3
625 ; LE-64BIT-NEXT:    ld 8, 16(6)
626 ; LE-64BIT-NEXT:    ld 9, 24(6)
627 ; LE-64BIT-NEXT:    ld 6, 8(6)
628 ; LE-64BIT-NEXT:    srd 10, 8, 7
629 ; LE-64BIT-NEXT:    sld 9, 9, 4
630 ; LE-64BIT-NEXT:    sld 8, 8, 4
631 ; LE-64BIT-NEXT:    or 9, 9, 10
632 ; LE-64BIT-NEXT:    srd 10, 6, 7
633 ; LE-64BIT-NEXT:    srd 7, 3, 7
634 ; LE-64BIT-NEXT:    sld 6, 6, 4
635 ; LE-64BIT-NEXT:    sld 3, 3, 4
636 ; LE-64BIT-NEXT:    or 6, 6, 7
637 ; LE-64BIT-NEXT:    std 3, 0(5)
638 ; LE-64BIT-NEXT:    or 3, 8, 10
639 ; LE-64BIT-NEXT:    std 9, 24(5)
640 ; LE-64BIT-NEXT:    std 6, 8(5)
641 ; LE-64BIT-NEXT:    std 3, 16(5)
642 ; LE-64BIT-NEXT:    blr
644 ; BE-LABEL: shl_32bytes:
645 ; BE:       # %bb.0:
646 ; BE-NEXT:    ld 6, 0(3)
647 ; BE-NEXT:    ld 7, 8(3)
648 ; BE-NEXT:    ld 8, 16(3)
649 ; BE-NEXT:    ld 3, 24(3)
650 ; BE-NEXT:    lwz 4, 28(4)
651 ; BE-NEXT:    li 9, 0
652 ; BE-NEXT:    addi 10, 1, -64
653 ; BE-NEXT:    std 9, -8(1)
654 ; BE-NEXT:    std 9, -16(1)
655 ; BE-NEXT:    std 9, -24(1)
656 ; BE-NEXT:    std 9, -32(1)
657 ; BE-NEXT:    std 3, -40(1)
658 ; BE-NEXT:    std 8, -48(1)
659 ; BE-NEXT:    std 7, -56(1)
660 ; BE-NEXT:    std 6, -64(1)
661 ; BE-NEXT:    rlwinm 3, 4, 29, 27, 28
662 ; BE-NEXT:    ldux 6, 3, 10
663 ; BE-NEXT:    clrlwi 4, 4, 26
664 ; BE-NEXT:    subfic 9, 4, 64
665 ; BE-NEXT:    ld 7, 16(3)
666 ; BE-NEXT:    ld 8, 8(3)
667 ; BE-NEXT:    ld 3, 24(3)
668 ; BE-NEXT:    sld 6, 6, 4
669 ; BE-NEXT:    srd 10, 7, 9
670 ; BE-NEXT:    sld 11, 8, 4
671 ; BE-NEXT:    srd 8, 8, 9
672 ; BE-NEXT:    srd 9, 3, 9
673 ; BE-NEXT:    sld 7, 7, 4
674 ; BE-NEXT:    sld 3, 3, 4
675 ; BE-NEXT:    or 10, 11, 10
676 ; BE-NEXT:    or 6, 6, 8
677 ; BE-NEXT:    or 7, 7, 9
678 ; BE-NEXT:    std 3, 24(5)
679 ; BE-NEXT:    std 7, 16(5)
680 ; BE-NEXT:    std 6, 0(5)
681 ; BE-NEXT:    std 10, 8(5)
682 ; BE-NEXT:    blr
684 ; LE-32BIT-LABEL: shl_32bytes:
685 ; LE-32BIT:       # %bb.0:
686 ; LE-32BIT-NEXT:    stwu 1, -112(1)
687 ; LE-32BIT-NEXT:    lwz 7, 0(3)
688 ; LE-32BIT-NEXT:    li 6, 0
689 ; LE-32BIT-NEXT:    lwz 8, 4(3)
690 ; LE-32BIT-NEXT:    lwz 9, 8(3)
691 ; LE-32BIT-NEXT:    lwz 10, 12(3)
692 ; LE-32BIT-NEXT:    lwz 11, 16(3)
693 ; LE-32BIT-NEXT:    lwz 12, 20(3)
694 ; LE-32BIT-NEXT:    lwz 0, 24(3)
695 ; LE-32BIT-NEXT:    lwz 3, 28(3)
696 ; LE-32BIT-NEXT:    lwz 4, 28(4)
697 ; LE-32BIT-NEXT:    stw 25, 84(1) # 4-byte Folded Spill
698 ; LE-32BIT-NEXT:    stw 26, 88(1) # 4-byte Folded Spill
699 ; LE-32BIT-NEXT:    stw 27, 92(1) # 4-byte Folded Spill
700 ; LE-32BIT-NEXT:    stw 28, 96(1) # 4-byte Folded Spill
701 ; LE-32BIT-NEXT:    stw 29, 100(1) # 4-byte Folded Spill
702 ; LE-32BIT-NEXT:    stw 30, 104(1) # 4-byte Folded Spill
703 ; LE-32BIT-NEXT:    stw 6, 76(1)
704 ; LE-32BIT-NEXT:    stw 6, 72(1)
705 ; LE-32BIT-NEXT:    stw 6, 68(1)
706 ; LE-32BIT-NEXT:    stw 6, 64(1)
707 ; LE-32BIT-NEXT:    stw 6, 60(1)
708 ; LE-32BIT-NEXT:    stw 6, 56(1)
709 ; LE-32BIT-NEXT:    stw 6, 52(1)
710 ; LE-32BIT-NEXT:    stw 6, 48(1)
711 ; LE-32BIT-NEXT:    rlwinm 6, 4, 29, 27, 29
712 ; LE-32BIT-NEXT:    stw 3, 44(1)
713 ; LE-32BIT-NEXT:    addi 3, 1, 16
714 ; LE-32BIT-NEXT:    stw 0, 40(1)
715 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
716 ; LE-32BIT-NEXT:    stw 12, 36(1)
717 ; LE-32BIT-NEXT:    subfic 12, 4, 32
718 ; LE-32BIT-NEXT:    stw 11, 32(1)
719 ; LE-32BIT-NEXT:    stw 10, 28(1)
720 ; LE-32BIT-NEXT:    stw 9, 24(1)
721 ; LE-32BIT-NEXT:    stw 8, 20(1)
722 ; LE-32BIT-NEXT:    stw 7, 16(1)
723 ; LE-32BIT-NEXT:    lwzux 3, 6, 3
724 ; LE-32BIT-NEXT:    lwz 7, 8(6)
725 ; LE-32BIT-NEXT:    slw 3, 3, 4
726 ; LE-32BIT-NEXT:    lwz 8, 4(6)
727 ; LE-32BIT-NEXT:    lwz 9, 16(6)
728 ; LE-32BIT-NEXT:    srw 30, 7, 12
729 ; LE-32BIT-NEXT:    lwz 10, 12(6)
730 ; LE-32BIT-NEXT:    slw 29, 8, 4
731 ; LE-32BIT-NEXT:    lwz 11, 24(6)
732 ; LE-32BIT-NEXT:    srw 8, 8, 12
733 ; LE-32BIT-NEXT:    lwz 0, 20(6)
734 ; LE-32BIT-NEXT:    srw 28, 9, 12
735 ; LE-32BIT-NEXT:    lwz 6, 28(6)
736 ; LE-32BIT-NEXT:    slw 27, 10, 4
737 ; LE-32BIT-NEXT:    srw 10, 10, 12
738 ; LE-32BIT-NEXT:    slw 7, 7, 4
739 ; LE-32BIT-NEXT:    srw 26, 11, 12
740 ; LE-32BIT-NEXT:    slw 25, 0, 4
741 ; LE-32BIT-NEXT:    srw 0, 0, 12
742 ; LE-32BIT-NEXT:    slw 9, 9, 4
743 ; LE-32BIT-NEXT:    srw 12, 6, 12
744 ; LE-32BIT-NEXT:    slw 11, 11, 4
745 ; LE-32BIT-NEXT:    slw 4, 6, 4
746 ; LE-32BIT-NEXT:    stw 4, 28(5)
747 ; LE-32BIT-NEXT:    or 4, 11, 12
748 ; LE-32BIT-NEXT:    stw 4, 24(5)
749 ; LE-32BIT-NEXT:    or 4, 9, 0
750 ; LE-32BIT-NEXT:    stw 4, 16(5)
751 ; LE-32BIT-NEXT:    or 4, 25, 26
752 ; LE-32BIT-NEXT:    stw 4, 20(5)
753 ; LE-32BIT-NEXT:    or 4, 7, 10
754 ; LE-32BIT-NEXT:    or 3, 3, 8
755 ; LE-32BIT-NEXT:    stw 4, 8(5)
756 ; LE-32BIT-NEXT:    or 4, 27, 28
757 ; LE-32BIT-NEXT:    stw 3, 0(5)
758 ; LE-32BIT-NEXT:    or 3, 29, 30
759 ; LE-32BIT-NEXT:    stw 4, 12(5)
760 ; LE-32BIT-NEXT:    stw 3, 4(5)
761 ; LE-32BIT-NEXT:    lwz 30, 104(1) # 4-byte Folded Reload
762 ; LE-32BIT-NEXT:    lwz 29, 100(1) # 4-byte Folded Reload
763 ; LE-32BIT-NEXT:    lwz 28, 96(1) # 4-byte Folded Reload
764 ; LE-32BIT-NEXT:    lwz 27, 92(1) # 4-byte Folded Reload
765 ; LE-32BIT-NEXT:    lwz 26, 88(1) # 4-byte Folded Reload
766 ; LE-32BIT-NEXT:    lwz 25, 84(1) # 4-byte Folded Reload
767 ; LE-32BIT-NEXT:    addi 1, 1, 112
768 ; LE-32BIT-NEXT:    blr
769   %src = load i256, ptr %src.ptr, align 1
770   %bitOff = load i256, ptr %bitOff.ptr, align 1
771   %res = shl i256 %src, %bitOff
772   store i256 %res, ptr %dst, align 1
773   ret void
775 define void @ashr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
776 ; LE-64BIT-LABEL: ashr_32bytes:
777 ; LE-64BIT:       # %bb.0:
778 ; LE-64BIT-NEXT:    ld 6, 24(3)
779 ; LE-64BIT-NEXT:    lxvd2x 0, 0, 3
780 ; LE-64BIT-NEXT:    lwz 4, 0(4)
781 ; LE-64BIT-NEXT:    addi 7, 1, -64
782 ; LE-64BIT-NEXT:    ld 3, 16(3)
783 ; LE-64BIT-NEXT:    sradi 8, 6, 63
784 ; LE-64BIT-NEXT:    rlwinm 9, 4, 29, 27, 28
785 ; LE-64BIT-NEXT:    std 6, -40(1)
786 ; LE-64BIT-NEXT:    std 3, -48(1)
787 ; LE-64BIT-NEXT:    clrlwi 4, 4, 26
788 ; LE-64BIT-NEXT:    stxvd2x 0, 0, 7
789 ; LE-64BIT-NEXT:    std 8, -8(1)
790 ; LE-64BIT-NEXT:    std 8, -16(1)
791 ; LE-64BIT-NEXT:    std 8, -24(1)
792 ; LE-64BIT-NEXT:    std 8, -32(1)
793 ; LE-64BIT-NEXT:    ldux 3, 9, 7
794 ; LE-64BIT-NEXT:    xori 7, 4, 63
795 ; LE-64BIT-NEXT:    ld 6, 16(9)
796 ; LE-64BIT-NEXT:    ld 8, 8(9)
797 ; LE-64BIT-NEXT:    ld 9, 24(9)
798 ; LE-64BIT-NEXT:    srd 3, 3, 4
799 ; LE-64BIT-NEXT:    sldi 11, 6, 1
800 ; LE-64BIT-NEXT:    srd 10, 8, 4
801 ; LE-64BIT-NEXT:    srd 6, 6, 4
802 ; LE-64BIT-NEXT:    sld 7, 11, 7
803 ; LE-64BIT-NEXT:    or 7, 10, 7
804 ; LE-64BIT-NEXT:    subfic 10, 4, 64
805 ; LE-64BIT-NEXT:    srad 4, 9, 4
806 ; LE-64BIT-NEXT:    sld 8, 8, 10
807 ; LE-64BIT-NEXT:    sld 11, 9, 10
808 ; LE-64BIT-NEXT:    std 4, 24(5)
809 ; LE-64BIT-NEXT:    std 7, 8(5)
810 ; LE-64BIT-NEXT:    or 3, 8, 3
811 ; LE-64BIT-NEXT:    std 3, 0(5)
812 ; LE-64BIT-NEXT:    or 3, 11, 6
813 ; LE-64BIT-NEXT:    std 3, 16(5)
814 ; LE-64BIT-NEXT:    blr
816 ; BE-LABEL: ashr_32bytes:
817 ; BE:       # %bb.0:
818 ; BE-NEXT:    ld 7, 0(3)
819 ; BE-NEXT:    ld 8, 8(3)
820 ; BE-NEXT:    ld 9, 16(3)
821 ; BE-NEXT:    ld 3, 24(3)
822 ; BE-NEXT:    lwz 4, 28(4)
823 ; BE-NEXT:    addi 6, 1, -32
824 ; BE-NEXT:    std 3, -8(1)
825 ; BE-NEXT:    std 7, -32(1)
826 ; BE-NEXT:    sradi 3, 7, 63
827 ; BE-NEXT:    rlwinm 7, 4, 29, 27, 28
828 ; BE-NEXT:    std 3, -40(1)
829 ; BE-NEXT:    std 3, -48(1)
830 ; BE-NEXT:    std 3, -56(1)
831 ; BE-NEXT:    std 3, -64(1)
832 ; BE-NEXT:    neg 3, 7
833 ; BE-NEXT:    std 9, -16(1)
834 ; BE-NEXT:    std 8, -24(1)
835 ; BE-NEXT:    extsw 3, 3
836 ; BE-NEXT:    ldux 3, 6, 3
837 ; BE-NEXT:    clrlwi 4, 4, 26
838 ; BE-NEXT:    subfic 9, 4, 64
839 ; BE-NEXT:    ld 7, 8(6)
840 ; BE-NEXT:    ld 8, 24(6)
841 ; BE-NEXT:    ld 6, 16(6)
842 ; BE-NEXT:    sld 10, 3, 9
843 ; BE-NEXT:    srad 3, 3, 4
844 ; BE-NEXT:    std 3, 0(5)
845 ; BE-NEXT:    srd 11, 7, 4
846 ; BE-NEXT:    srd 8, 8, 4
847 ; BE-NEXT:    sld 7, 7, 9
848 ; BE-NEXT:    sld 9, 6, 9
849 ; BE-NEXT:    srd 6, 6, 4
850 ; BE-NEXT:    or 10, 10, 11
851 ; BE-NEXT:    or 8, 9, 8
852 ; BE-NEXT:    or 6, 7, 6
853 ; BE-NEXT:    std 6, 16(5)
854 ; BE-NEXT:    std 8, 24(5)
855 ; BE-NEXT:    std 10, 8(5)
856 ; BE-NEXT:    blr
858 ; LE-32BIT-LABEL: ashr_32bytes:
859 ; LE-32BIT:       # %bb.0:
860 ; LE-32BIT-NEXT:    stwu 1, -112(1)
861 ; LE-32BIT-NEXT:    lwz 7, 0(3)
862 ; LE-32BIT-NEXT:    addi 6, 1, 48
863 ; LE-32BIT-NEXT:    lwz 8, 4(3)
864 ; LE-32BIT-NEXT:    lwz 9, 8(3)
865 ; LE-32BIT-NEXT:    lwz 10, 12(3)
866 ; LE-32BIT-NEXT:    lwz 11, 16(3)
867 ; LE-32BIT-NEXT:    lwz 12, 20(3)
868 ; LE-32BIT-NEXT:    lwz 0, 24(3)
869 ; LE-32BIT-NEXT:    lwz 3, 28(3)
870 ; LE-32BIT-NEXT:    lwz 4, 28(4)
871 ; LE-32BIT-NEXT:    stw 3, 76(1)
872 ; LE-32BIT-NEXT:    srawi 3, 7, 31
873 ; LE-32BIT-NEXT:    stw 7, 48(1)
874 ; LE-32BIT-NEXT:    rlwinm 7, 4, 29, 27, 29
875 ; LE-32BIT-NEXT:    stw 25, 84(1) # 4-byte Folded Spill
876 ; LE-32BIT-NEXT:    clrlwi 4, 4, 27
877 ; LE-32BIT-NEXT:    stw 26, 88(1) # 4-byte Folded Spill
878 ; LE-32BIT-NEXT:    stw 27, 92(1) # 4-byte Folded Spill
879 ; LE-32BIT-NEXT:    stw 28, 96(1) # 4-byte Folded Spill
880 ; LE-32BIT-NEXT:    stw 29, 100(1) # 4-byte Folded Spill
881 ; LE-32BIT-NEXT:    stw 30, 104(1) # 4-byte Folded Spill
882 ; LE-32BIT-NEXT:    subfic 30, 4, 32
883 ; LE-32BIT-NEXT:    stw 0, 72(1)
884 ; LE-32BIT-NEXT:    stw 12, 68(1)
885 ; LE-32BIT-NEXT:    xori 12, 4, 31
886 ; LE-32BIT-NEXT:    stw 11, 64(1)
887 ; LE-32BIT-NEXT:    stw 10, 60(1)
888 ; LE-32BIT-NEXT:    stw 9, 56(1)
889 ; LE-32BIT-NEXT:    stw 8, 52(1)
890 ; LE-32BIT-NEXT:    stw 3, 44(1)
891 ; LE-32BIT-NEXT:    stw 3, 40(1)
892 ; LE-32BIT-NEXT:    stw 3, 36(1)
893 ; LE-32BIT-NEXT:    stw 3, 32(1)
894 ; LE-32BIT-NEXT:    stw 3, 28(1)
895 ; LE-32BIT-NEXT:    stw 3, 24(1)
896 ; LE-32BIT-NEXT:    stw 3, 20(1)
897 ; LE-32BIT-NEXT:    stw 3, 16(1)
898 ; LE-32BIT-NEXT:    sub 3, 6, 7
899 ; LE-32BIT-NEXT:    lwz 6, 8(3)
900 ; LE-32BIT-NEXT:    lwz 7, 4(3)
901 ; LE-32BIT-NEXT:    lwz 8, 0(3)
902 ; LE-32BIT-NEXT:    srw 29, 6, 4
903 ; LE-32BIT-NEXT:    lwz 9, 12(3)
904 ; LE-32BIT-NEXT:    slw 6, 6, 30
905 ; LE-32BIT-NEXT:    lwz 10, 20(3)
906 ; LE-32BIT-NEXT:    slw 28, 8, 30
907 ; LE-32BIT-NEXT:    lwz 11, 16(3)
908 ; LE-32BIT-NEXT:    srw 27, 9, 4
909 ; LE-32BIT-NEXT:    lwz 0, 28(3)
910 ; LE-32BIT-NEXT:    srw 26, 10, 4
911 ; LE-32BIT-NEXT:    lwz 3, 24(3)
912 ; LE-32BIT-NEXT:    slw 25, 11, 30
913 ; LE-32BIT-NEXT:    slw 9, 9, 30
914 ; LE-32BIT-NEXT:    slw 10, 10, 30
915 ; LE-32BIT-NEXT:    slw 30, 3, 30
916 ; LE-32BIT-NEXT:    srw 3, 3, 4
917 ; LE-32BIT-NEXT:    srw 0, 0, 4
918 ; LE-32BIT-NEXT:    or 3, 10, 3
919 ; LE-32BIT-NEXT:    srw 11, 11, 4
920 ; LE-32BIT-NEXT:    stw 3, 24(5)
921 ; LE-32BIT-NEXT:    or 3, 30, 0
922 ; LE-32BIT-NEXT:    stw 3, 28(5)
923 ; LE-32BIT-NEXT:    or 3, 9, 11
924 ; LE-32BIT-NEXT:    stw 3, 16(5)
925 ; LE-32BIT-NEXT:    or 3, 25, 26
926 ; LE-32BIT-NEXT:    sraw 8, 8, 4
927 ; LE-32BIT-NEXT:    srw 4, 7, 4
928 ; LE-32BIT-NEXT:    slwi 7, 7, 1
929 ; LE-32BIT-NEXT:    stw 3, 20(5)
930 ; LE-32BIT-NEXT:    or 3, 6, 27
931 ; LE-32BIT-NEXT:    slw 7, 7, 12
932 ; LE-32BIT-NEXT:    stw 3, 12(5)
933 ; LE-32BIT-NEXT:    or 3, 28, 4
934 ; LE-32BIT-NEXT:    stw 3, 4(5)
935 ; LE-32BIT-NEXT:    or 3, 29, 7
936 ; LE-32BIT-NEXT:    stw 8, 0(5)
937 ; LE-32BIT-NEXT:    stw 3, 8(5)
938 ; LE-32BIT-NEXT:    lwz 30, 104(1) # 4-byte Folded Reload
939 ; LE-32BIT-NEXT:    lwz 29, 100(1) # 4-byte Folded Reload
940 ; LE-32BIT-NEXT:    lwz 28, 96(1) # 4-byte Folded Reload
941 ; LE-32BIT-NEXT:    lwz 27, 92(1) # 4-byte Folded Reload
942 ; LE-32BIT-NEXT:    lwz 26, 88(1) # 4-byte Folded Reload
943 ; LE-32BIT-NEXT:    lwz 25, 84(1) # 4-byte Folded Reload
944 ; LE-32BIT-NEXT:    addi 1, 1, 112
945 ; LE-32BIT-NEXT:    blr
946   %src = load i256, ptr %src.ptr, align 1
947   %bitOff = load i256, ptr %bitOff.ptr, align 1
948   %res = ashr i256 %src, %bitOff
949   store i256 %res, ptr %dst, align 1
950   ret void
952 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
953 ; LE: {{.*}}