1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \
3 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32
4 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \
5 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64
6 ; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \
7 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE
8 ; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \
9 ; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64LE
11 define dso_local i64 @rotatemask32(i64 noundef %word) local_unnamed_addr #0 {
12 ; AIX32-LABEL: rotatemask32:
13 ; AIX32: # %bb.0: # %entry
14 ; AIX32-NEXT: cntlzw r5, r3
15 ; AIX32-NEXT: cmplwi r3, 0
16 ; AIX32-NEXT: cntlzw r3, r4
17 ; AIX32-NEXT: addi r3, r3, 32
18 ; AIX32-NEXT: iseleq r3, r3, r5
19 ; AIX32-NEXT: rlwnm r4, r4, r3, 1, 31
20 ; AIX32-NEXT: li r3, 0
23 ; AIX64-LABEL: rotatemask32:
24 ; AIX64: # %bb.0: # %entry
25 ; AIX64-NEXT: cntlzd r4, r3
26 ; AIX64-NEXT: rlwnm r3, r3, r4, 1, 31
29 ; LINUX64BE-LABEL: rotatemask32:
30 ; LINUX64BE: # %bb.0: # %entry
31 ; LINUX64BE-NEXT: cntlzd r4, r3
32 ; LINUX64BE-NEXT: rlwnm r3, r3, r4, 1, 31
35 ; LINUX64LE-LABEL: rotatemask32:
36 ; LINUX64LE: # %bb.0: # %entry
37 ; LINUX64LE-NEXT: cntlzd r4, r3
38 ; LINUX64LE-NEXT: rlwnm r3, r3, r4, 1, 31
41 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
42 %cast = trunc i64 %0 to i32
43 %conv1 = trunc i64 %word to i32
44 %1 = tail call i32 @llvm.fshl.i32(i32 %conv1, i32 %conv1, i32 %cast)
45 %2 = and i32 %1, 2147483647
46 %and = zext i32 %2 to i64
50 declare i64 @llvm.ctlz.i64(i64, i1 immarg) #0
51 declare i32 @llvm.fshl.i32(i32, i32, i32) #0
53 define dso_local i64 @rotatemask64(i64 noundef %word) local_unnamed_addr #0 {
54 ; AIX32-LABEL: rotatemask64:
55 ; AIX32: # %bb.0: # %entry
56 ; AIX32-NEXT: cmplwi r3, 0
57 ; AIX32-NEXT: cntlzw r6, r4
58 ; AIX32-NEXT: addi r6, r6, 32
59 ; AIX32-NEXT: cntlzw r5, r3
60 ; AIX32-NEXT: iseleq r5, r6, r5
61 ; AIX32-NEXT: andi. r6, r5, 32
62 ; AIX32-NEXT: clrlwi r5, r5, 27
63 ; AIX32-NEXT: iseleq r6, r3, r4
64 ; AIX32-NEXT: iseleq r3, r4, r3
65 ; AIX32-NEXT: subfic r7, r5, 32
66 ; AIX32-NEXT: slw r4, r3, r5
67 ; AIX32-NEXT: srw r3, r3, r7
68 ; AIX32-NEXT: slw r5, r6, r5
69 ; AIX32-NEXT: srw r8, r6, r7
70 ; AIX32-NEXT: or r3, r5, r3
71 ; AIX32-NEXT: or r4, r4, r8
72 ; AIX32-NEXT: clrlwi r3, r3, 1
75 ; AIX64-LABEL: rotatemask64:
76 ; AIX64: # %bb.0: # %entry
77 ; AIX64-NEXT: cntlzd r4, r3
78 ; AIX64-NEXT: rldcl r3, r3, r4, 1
81 ; LINUX64BE-LABEL: rotatemask64:
82 ; LINUX64BE: # %bb.0: # %entry
83 ; LINUX64BE-NEXT: cntlzd r4, r3
84 ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
87 ; LINUX64LE-LABEL: rotatemask64:
88 ; LINUX64LE: # %bb.0: # %entry
89 ; LINUX64LE-NEXT: cntlzd r4, r3
90 ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
93 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
94 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0)
95 %and = and i64 %1, 9223372036854775807
99 declare i64 @llvm.fshl.i64(i64, i64, i64) #1
101 define dso_local i64 @rotatemask64_2(i64 noundef %word) local_unnamed_addr #0 {
102 ; AIX32-LABEL: rotatemask64_2:
103 ; AIX32: # %bb.0: # %entry
104 ; AIX32-NEXT: cmplwi r3, 0
105 ; AIX32-NEXT: cntlzw r6, r4
106 ; AIX32-NEXT: addi r6, r6, 32
107 ; AIX32-NEXT: cntlzw r5, r3
108 ; AIX32-NEXT: iseleq r5, r6, r5
109 ; AIX32-NEXT: andi. r6, r5, 32
110 ; AIX32-NEXT: clrlwi r5, r5, 27
111 ; AIX32-NEXT: iseleq r6, r3, r4
112 ; AIX32-NEXT: iseleq r3, r4, r3
113 ; AIX32-NEXT: subfic r7, r5, 32
114 ; AIX32-NEXT: slw r4, r3, r5
115 ; AIX32-NEXT: srw r3, r3, r7
116 ; AIX32-NEXT: slw r5, r6, r5
117 ; AIX32-NEXT: srw r8, r6, r7
118 ; AIX32-NEXT: or r3, r5, r3
119 ; AIX32-NEXT: or r4, r4, r8
120 ; AIX32-NEXT: clrlwi r3, r3, 1
123 ; AIX64-LABEL: rotatemask64_2:
124 ; AIX64: # %bb.0: # %entry
125 ; AIX64-NEXT: cntlzd r4, r3
126 ; AIX64-NEXT: rldcl r3, r3, r4, 1
129 ; LINUX64BE-LABEL: rotatemask64_2:
130 ; LINUX64BE: # %bb.0: # %entry
131 ; LINUX64BE-NEXT: cntlzd r4, r3
132 ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
133 ; LINUX64BE-NEXT: blr
135 ; LINUX64LE-LABEL: rotatemask64_2:
136 ; LINUX64LE: # %bb.0: # %entry
137 ; LINUX64LE-NEXT: cntlzd r4, r3
138 ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
139 ; LINUX64LE-NEXT: blr
141 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
142 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0)
143 %and = and i64 %1, 9223372036854775807
147 define dso_local i64 @rotatemask64_3(i64 noundef %word) local_unnamed_addr #0 {
148 ; AIX32-LABEL: rotatemask64_3:
149 ; AIX32: # %bb.0: # %entry
150 ; AIX32-NEXT: cmplwi r3, 0
151 ; AIX32-NEXT: cntlzw r6, r4
152 ; AIX32-NEXT: addi r6, r6, 32
153 ; AIX32-NEXT: cntlzw r5, r3
154 ; AIX32-NEXT: iseleq r5, r6, r5
155 ; AIX32-NEXT: andi. r6, r5, 32
156 ; AIX32-NEXT: clrlwi r5, r5, 27
157 ; AIX32-NEXT: iseleq r6, r3, r4
158 ; AIX32-NEXT: iseleq r3, r4, r3
159 ; AIX32-NEXT: subfic r7, r5, 32
160 ; AIX32-NEXT: srw r8, r6, r7
161 ; AIX32-NEXT: slw r4, r3, r5
162 ; AIX32-NEXT: srw r3, r3, r7
163 ; AIX32-NEXT: slw r5, r6, r5
164 ; AIX32-NEXT: or r4, r4, r8
165 ; AIX32-NEXT: or r3, r5, r3
166 ; AIX32-NEXT: clrlwi r3, r3, 1
167 ; AIX32-NEXT: rlwinm r4, r4, 0, 0, 23
170 ; AIX64-LABEL: rotatemask64_3:
171 ; AIX64: # %bb.0: # %entry
172 ; AIX64-NEXT: cntlzd r4, r3
173 ; AIX64-NEXT: rotld r3, r3, r4
174 ; AIX64-NEXT: rldicl r3, r3, 56, 8
175 ; AIX64-NEXT: rldicl r3, r3, 8, 1
178 ; LINUX64BE-LABEL: rotatemask64_3:
179 ; LINUX64BE: # %bb.0: # %entry
180 ; LINUX64BE-NEXT: cntlzd r4, r3
181 ; LINUX64BE-NEXT: rotld r3, r3, r4
182 ; LINUX64BE-NEXT: rldicl r3, r3, 56, 8
183 ; LINUX64BE-NEXT: rldicl r3, r3, 8, 1
184 ; LINUX64BE-NEXT: blr
186 ; LINUX64LE-LABEL: rotatemask64_3:
187 ; LINUX64LE: # %bb.0: # %entry
188 ; LINUX64LE-NEXT: cntlzd r4, r3
189 ; LINUX64LE-NEXT: rotld r3, r3, r4
190 ; LINUX64LE-NEXT: rldicl r3, r3, 56, 8
191 ; LINUX64LE-NEXT: rldicl r3, r3, 8, 1
192 ; LINUX64LE-NEXT: blr
194 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
195 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0)
196 %and = and i64 %1, 9223372036854775552
200 define dso_local i64 @rotatemask64_nocount(i64 noundef %word, i64 noundef %clz) local_unnamed_addr #0 {
201 ; AIX32-LABEL: rotatemask64_nocount:
202 ; AIX32: # %bb.0: # %entry
203 ; AIX32-NEXT: andi. r5, r6, 32
204 ; AIX32-NEXT: clrlwi r6, r6, 27
205 ; AIX32-NEXT: subfic r7, r6, 32
206 ; AIX32-NEXT: iseleq r5, r3, r4
207 ; AIX32-NEXT: iseleq r3, r4, r3
208 ; AIX32-NEXT: srw r8, r5, r7
209 ; AIX32-NEXT: slw r4, r3, r6
210 ; AIX32-NEXT: srw r3, r3, r7
211 ; AIX32-NEXT: slw r5, r5, r6
212 ; AIX32-NEXT: or r3, r5, r3
213 ; AIX32-NEXT: or r4, r4, r8
214 ; AIX32-NEXT: clrlwi r3, r3, 8
217 ; AIX64-LABEL: rotatemask64_nocount:
218 ; AIX64: # %bb.0: # %entry
219 ; AIX64-NEXT: rldcl r3, r3, r4, 8
222 ; LINUX64BE-LABEL: rotatemask64_nocount:
223 ; LINUX64BE: # %bb.0: # %entry
224 ; LINUX64BE-NEXT: rldcl r3, r3, r4, 8
225 ; LINUX64BE-NEXT: blr
227 ; LINUX64LE-LABEL: rotatemask64_nocount:
228 ; LINUX64LE: # %bb.0: # %entry
229 ; LINUX64LE-NEXT: rldcl r3, r3, r4, 8
230 ; LINUX64LE-NEXT: blr
232 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %clz)
233 %and = and i64 %0, 72057594037927935
237 define dso_local i64 @builtincheck(i64 noundef %word, i64 noundef %shift) local_unnamed_addr #0 {
238 ; AIX32-LABEL: builtincheck:
239 ; AIX32: # %bb.0: # %entry
240 ; AIX32-NEXT: andi. r5, r6, 32
241 ; AIX32-NEXT: clrlwi r6, r6, 27
242 ; AIX32-NEXT: subfic r7, r6, 32
243 ; AIX32-NEXT: iseleq r5, r3, r4
244 ; AIX32-NEXT: iseleq r3, r4, r3
245 ; AIX32-NEXT: srw r8, r5, r7
246 ; AIX32-NEXT: slw r4, r3, r6
247 ; AIX32-NEXT: srw r3, r3, r7
248 ; AIX32-NEXT: slw r5, r5, r6
249 ; AIX32-NEXT: or r3, r5, r3
250 ; AIX32-NEXT: or r4, r4, r8
251 ; AIX32-NEXT: clrlwi r3, r3, 1
254 ; AIX64-LABEL: builtincheck:
255 ; AIX64: # %bb.0: # %entry
256 ; AIX64-NEXT: rldcl r3, r3, r4, 1
259 ; LINUX64BE-LABEL: builtincheck:
260 ; LINUX64BE: # %bb.0: # %entry
261 ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
262 ; LINUX64BE-NEXT: blr
264 ; LINUX64LE-LABEL: builtincheck:
265 ; LINUX64LE: # %bb.0: # %entry
266 ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
267 ; LINUX64LE-NEXT: blr
269 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %shift)
270 %1 = and i64 %0, 9223372036854775807
274 define dso_local i64 @immshift(i64 noundef %word) local_unnamed_addr #0 {
275 ; AIX32-LABEL: immshift:
276 ; AIX32: # %bb.0: # %entry
277 ; AIX32-NEXT: rotlwi r5, r3, 15
278 ; AIX32-NEXT: rlwimi r5, r4, 15, 0, 16
279 ; AIX32-NEXT: srwi r4, r4, 17
280 ; AIX32-NEXT: rlwimi r4, r3, 15, 12, 16
281 ; AIX32-NEXT: mr r3, r4
282 ; AIX32-NEXT: mr r4, r5
285 ; AIX64-LABEL: immshift:
286 ; AIX64: # %bb.0: # %entry
287 ; AIX64-NEXT: rldicl r3, r3, 15, 12
290 ; LINUX64BE-LABEL: immshift:
291 ; LINUX64BE: # %bb.0: # %entry
292 ; LINUX64BE-NEXT: rldicl r3, r3, 15, 12
293 ; LINUX64BE-NEXT: blr
295 ; LINUX64LE-LABEL: immshift:
296 ; LINUX64LE: # %bb.0: # %entry
297 ; LINUX64LE-NEXT: rldicl r3, r3, 15, 12
298 ; LINUX64LE-NEXT: blr
300 %0 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 15)
301 %and = and i64 %0, 4503599627370495
305 define dso_local i64 @twomasks(i64 noundef %word) local_unnamed_addr #0 {
306 ; AIX32-LABEL: twomasks:
307 ; AIX32: # %bb.0: # %entry
308 ; AIX32-NEXT: mflr r0
309 ; AIX32-NEXT: stwu r1, -64(r1)
310 ; AIX32-NEXT: cmplwi r3, 0
311 ; AIX32-NEXT: cntlzw r6, r4
312 ; AIX32-NEXT: stw r0, 72(r1)
313 ; AIX32-NEXT: addi r6, r6, 32
314 ; AIX32-NEXT: cntlzw r5, r3
315 ; AIX32-NEXT: iseleq r5, r6, r5
316 ; AIX32-NEXT: andi. r6, r5, 32
317 ; AIX32-NEXT: clrlwi r5, r5, 27
318 ; AIX32-NEXT: iseleq r6, r3, r4
319 ; AIX32-NEXT: iseleq r3, r4, r3
320 ; AIX32-NEXT: subfic r7, r5, 32
321 ; AIX32-NEXT: srw r8, r6, r7
322 ; AIX32-NEXT: slw r4, r3, r5
323 ; AIX32-NEXT: srw r3, r3, r7
324 ; AIX32-NEXT: slw r5, r6, r5
325 ; AIX32-NEXT: or r4, r4, r8
326 ; AIX32-NEXT: or r5, r5, r3
327 ; AIX32-NEXT: clrlwi r3, r5, 1
328 ; AIX32-NEXT: clrlwi r5, r5, 16
329 ; AIX32-NEXT: mr r6, r4
330 ; AIX32-NEXT: bl .callee[PR]
332 ; AIX32-NEXT: addi r1, r1, 64
333 ; AIX32-NEXT: lwz r0, 8(r1)
334 ; AIX32-NEXT: mtlr r0
337 ; AIX64-LABEL: twomasks:
338 ; AIX64: # %bb.0: # %entry
339 ; AIX64-NEXT: mflr r0
340 ; AIX64-NEXT: stdu r1, -112(r1)
341 ; AIX64-NEXT: cntlzd r4, r3
342 ; AIX64-NEXT: std r0, 128(r1)
343 ; AIX64-NEXT: rldcl r5, r3, r4, 1
344 ; AIX64-NEXT: rldcl r4, r3, r4, 16
345 ; AIX64-NEXT: mr r3, r5
346 ; AIX64-NEXT: bl .callee[PR]
348 ; AIX64-NEXT: addi r1, r1, 112
349 ; AIX64-NEXT: ld r0, 16(r1)
350 ; AIX64-NEXT: mtlr r0
353 ; LINUX64BE-LABEL: twomasks:
354 ; LINUX64BE: # %bb.0: # %entry
355 ; LINUX64BE-NEXT: mflr r0
356 ; LINUX64BE-NEXT: stdu r1, -112(r1)
357 ; LINUX64BE-NEXT: cntlzd r4, r3
358 ; LINUX64BE-NEXT: std r0, 128(r1)
359 ; LINUX64BE-NEXT: rldcl r5, r3, r4, 1
360 ; LINUX64BE-NEXT: rldcl r4, r3, r4, 16
361 ; LINUX64BE-NEXT: mr r3, r5
362 ; LINUX64BE-NEXT: bl callee
363 ; LINUX64BE-NEXT: nop
364 ; LINUX64BE-NEXT: addi r1, r1, 112
365 ; LINUX64BE-NEXT: ld r0, 16(r1)
366 ; LINUX64BE-NEXT: mtlr r0
367 ; LINUX64BE-NEXT: blr
369 ; LINUX64LE-LABEL: twomasks:
370 ; LINUX64LE: # %bb.0: # %entry
371 ; LINUX64LE-NEXT: mflr r0
372 ; LINUX64LE-NEXT: stdu r1, -32(r1)
373 ; LINUX64LE-NEXT: cntlzd r4, r3
374 ; LINUX64LE-NEXT: std r0, 48(r1)
375 ; LINUX64LE-NEXT: rldcl r5, r3, r4, 1
376 ; LINUX64LE-NEXT: rldcl r4, r3, r4, 16
377 ; LINUX64LE-NEXT: mr r3, r5
378 ; LINUX64LE-NEXT: bl callee
379 ; LINUX64LE-NEXT: nop
380 ; LINUX64LE-NEXT: addi r1, r1, 32
381 ; LINUX64LE-NEXT: ld r0, 16(r1)
382 ; LINUX64LE-NEXT: mtlr r0
383 ; LINUX64LE-NEXT: blr
385 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
386 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0)
387 %and = and i64 %1, 9223372036854775807
388 %and1 = and i64 %1, 281474976710655
389 %call = tail call i64 @callee(i64 noundef %and, i64 noundef %and1) #0
393 declare i64 @callee(i64 noundef, i64 noundef) local_unnamed_addr #0
395 define dso_local i64 @tworotates(i64 noundef %word) local_unnamed_addr #0 {
396 ; AIX32-LABEL: tworotates:
397 ; AIX32: # %bb.0: # %entry
398 ; AIX32-NEXT: mflr r0
399 ; AIX32-NEXT: stwu r1, -64(r1)
400 ; AIX32-NEXT: cmplwi r3, 0
401 ; AIX32-NEXT: cntlzw r6, r4
402 ; AIX32-NEXT: stw r0, 72(r1)
403 ; AIX32-NEXT: addi r6, r6, 32
404 ; AIX32-NEXT: cntlzw r5, r3
405 ; AIX32-NEXT: iseleq r5, r6, r5
406 ; AIX32-NEXT: andi. r6, r5, 32
407 ; AIX32-NEXT: clrlwi r5, r5, 27
408 ; AIX32-NEXT: iseleq r6, r3, r4
409 ; AIX32-NEXT: iseleq r9, r4, r3
410 ; AIX32-NEXT: subfic r7, r5, 32
411 ; AIX32-NEXT: srw r8, r6, r7
412 ; AIX32-NEXT: slw r10, r9, r5
413 ; AIX32-NEXT: srw r7, r9, r7
414 ; AIX32-NEXT: slw r5, r6, r5
415 ; AIX32-NEXT: rotlwi r6, r3, 23
416 ; AIX32-NEXT: or r5, r5, r7
417 ; AIX32-NEXT: or r8, r10, r8
418 ; AIX32-NEXT: rlwimi r6, r4, 23, 0, 8
419 ; AIX32-NEXT: clrlwi r7, r5, 1
420 ; AIX32-NEXT: srwi r5, r4, 9
421 ; AIX32-NEXT: mr r4, r8
422 ; AIX32-NEXT: rlwimi r5, r3, 23, 1, 8
423 ; AIX32-NEXT: mr r3, r7
424 ; AIX32-NEXT: bl .callee[PR]
426 ; AIX32-NEXT: addi r1, r1, 64
427 ; AIX32-NEXT: lwz r0, 8(r1)
428 ; AIX32-NEXT: mtlr r0
431 ; AIX64-LABEL: tworotates:
432 ; AIX64: # %bb.0: # %entry
433 ; AIX64-NEXT: mflr r0
434 ; AIX64-NEXT: stdu r1, -112(r1)
435 ; AIX64-NEXT: cntlzd r4, r3
436 ; AIX64-NEXT: std r0, 128(r1)
437 ; AIX64-NEXT: rldcl r5, r3, r4, 1
438 ; AIX64-NEXT: rldicl r4, r3, 23, 1
439 ; AIX64-NEXT: mr r3, r5
440 ; AIX64-NEXT: bl .callee[PR]
442 ; AIX64-NEXT: addi r1, r1, 112
443 ; AIX64-NEXT: ld r0, 16(r1)
444 ; AIX64-NEXT: mtlr r0
447 ; LINUX64BE-LABEL: tworotates:
448 ; LINUX64BE: # %bb.0: # %entry
449 ; LINUX64BE-NEXT: mflr r0
450 ; LINUX64BE-NEXT: stdu r1, -112(r1)
451 ; LINUX64BE-NEXT: cntlzd r4, r3
452 ; LINUX64BE-NEXT: std r0, 128(r1)
453 ; LINUX64BE-NEXT: rldcl r5, r3, r4, 1
454 ; LINUX64BE-NEXT: rldicl r4, r3, 23, 1
455 ; LINUX64BE-NEXT: mr r3, r5
456 ; LINUX64BE-NEXT: bl callee
457 ; LINUX64BE-NEXT: nop
458 ; LINUX64BE-NEXT: addi r1, r1, 112
459 ; LINUX64BE-NEXT: ld r0, 16(r1)
460 ; LINUX64BE-NEXT: mtlr r0
461 ; LINUX64BE-NEXT: blr
463 ; LINUX64LE-LABEL: tworotates:
464 ; LINUX64LE: # %bb.0: # %entry
465 ; LINUX64LE-NEXT: mflr r0
466 ; LINUX64LE-NEXT: stdu r1, -32(r1)
467 ; LINUX64LE-NEXT: cntlzd r4, r3
468 ; LINUX64LE-NEXT: std r0, 48(r1)
469 ; LINUX64LE-NEXT: rldcl r5, r3, r4, 1
470 ; LINUX64LE-NEXT: rldicl r4, r3, 23, 1
471 ; LINUX64LE-NEXT: mr r3, r5
472 ; LINUX64LE-NEXT: bl callee
473 ; LINUX64LE-NEXT: nop
474 ; LINUX64LE-NEXT: addi r1, r1, 32
475 ; LINUX64LE-NEXT: ld r0, 16(r1)
476 ; LINUX64LE-NEXT: mtlr r0
477 ; LINUX64LE-NEXT: blr
479 %0 = tail call i64 @llvm.ctlz.i64(i64 %word, i1 false)
480 %1 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 %0)
481 %2 = tail call i64 @llvm.fshl.i64(i64 %word, i64 %word, i64 23)
482 %and = and i64 %1, 9223372036854775807
483 %and1 = and i64 %2, 9223372036854775807
484 %call = tail call i64 @callee(i64 noundef %and, i64 noundef %and1) #0
488 attributes #0 = { nounwind }