@@ -75,22 +75,19 @@ define dso_local i64 @rotatemask64(i64 noundef %word) local_unnamed_addr #0 {
75
75
; AIX64-LABEL: rotatemask64:
76
76
; AIX64: # %bb.0: # %entry
77
77
; AIX64-NEXT: cntlzd r4, r3
78
- ; AIX64-NEXT: rotld r3, r3, r4
79
- ; AIX64-NEXT: clrldi r3, r3, 1
78
+ ; AIX64-NEXT: rldcl r3, r3, r4, 1
80
79
; AIX64-NEXT: blr
81
80
;
82
81
; LINUX64BE-LABEL: rotatemask64:
83
82
; LINUX64BE: # %bb.0: # %entry
84
83
; LINUX64BE-NEXT: cntlzd r4, r3
85
- ; LINUX64BE-NEXT: rotld r3, r3, r4
86
- ; LINUX64BE-NEXT: clrldi r3, r3, 1
84
+ ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
87
85
; LINUX64BE-NEXT: blr
88
86
;
89
87
; LINUX64LE-LABEL: rotatemask64:
90
88
; LINUX64LE: # %bb.0: # %entry
91
89
; LINUX64LE-NEXT: cntlzd r4, r3
92
- ; LINUX64LE-NEXT: rotld r3, r3, r4
93
- ; LINUX64LE-NEXT: clrldi r3, r3, 1
90
+ ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
94
91
; LINUX64LE-NEXT: blr
95
92
entry:
96
93
%0 = tail call i64 @llvm.ctlz.i64 (i64 %word , i1 false )
@@ -126,22 +123,19 @@ define dso_local i64 @rotatemask64_2(i64 noundef %word) local_unnamed_addr #0 {
126
123
; AIX64-LABEL: rotatemask64_2:
127
124
; AIX64: # %bb.0: # %entry
128
125
; AIX64-NEXT: cntlzd r4, r3
129
- ; AIX64-NEXT: rotld r3, r3, r4
130
- ; AIX64-NEXT: clrldi r3, r3, 1
126
+ ; AIX64-NEXT: rldcl r3, r3, r4, 1
131
127
; AIX64-NEXT: blr
132
128
;
133
129
; LINUX64BE-LABEL: rotatemask64_2:
134
130
; LINUX64BE: # %bb.0: # %entry
135
131
; LINUX64BE-NEXT: cntlzd r4, r3
136
- ; LINUX64BE-NEXT: rotld r3, r3, r4
137
- ; LINUX64BE-NEXT: clrldi r3, r3, 1
132
+ ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
138
133
; LINUX64BE-NEXT: blr
139
134
;
140
135
; LINUX64LE-LABEL: rotatemask64_2:
141
136
; LINUX64LE: # %bb.0: # %entry
142
137
; LINUX64LE-NEXT: cntlzd r4, r3
143
- ; LINUX64LE-NEXT: rotld r3, r3, r4
144
- ; LINUX64LE-NEXT: clrldi r3, r3, 1
138
+ ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
145
139
; LINUX64LE-NEXT: blr
146
140
entry:
147
141
%0 = tail call i64 @llvm.ctlz.i64 (i64 %word , i1 false )
@@ -222,20 +216,17 @@ define dso_local i64 @rotatemask64_nocount(i64 noundef %word, i64 noundef %clz)
222
216
;
223
217
; AIX64-LABEL: rotatemask64_nocount:
224
218
; AIX64: # %bb.0: # %entry
225
- ; AIX64-NEXT: rotld r3, r3, r4
226
- ; AIX64-NEXT: clrldi r3, r3, 8
219
+ ; AIX64-NEXT: rldcl r3, r3, r4, 8
227
220
; AIX64-NEXT: blr
228
221
;
229
222
; LINUX64BE-LABEL: rotatemask64_nocount:
230
223
; LINUX64BE: # %bb.0: # %entry
231
- ; LINUX64BE-NEXT: rotld r3, r3, r4
232
- ; LINUX64BE-NEXT: clrldi r3, r3, 8
224
+ ; LINUX64BE-NEXT: rldcl r3, r3, r4, 8
233
225
; LINUX64BE-NEXT: blr
234
226
;
235
227
; LINUX64LE-LABEL: rotatemask64_nocount:
236
228
; LINUX64LE: # %bb.0: # %entry
237
- ; LINUX64LE-NEXT: rotld r3, r3, r4
238
- ; LINUX64LE-NEXT: clrldi r3, r3, 8
229
+ ; LINUX64LE-NEXT: rldcl r3, r3, r4, 8
239
230
; LINUX64LE-NEXT: blr
240
231
entry:
241
232
%0 = tail call i64 @llvm.fshl.i64 (i64 %word , i64 %word , i64 %clz )
@@ -262,20 +253,17 @@ define dso_local i64 @builtincheck(i64 noundef %word, i64 noundef %shift) local_
262
253
;
263
254
; AIX64-LABEL: builtincheck:
264
255
; AIX64: # %bb.0: # %entry
265
- ; AIX64-NEXT: rotld r3, r3, r4
266
- ; AIX64-NEXT: clrldi r3, r3, 1
256
+ ; AIX64-NEXT: rldcl r3, r3, r4, 1
267
257
; AIX64-NEXT: blr
268
258
;
269
259
; LINUX64BE-LABEL: builtincheck:
270
260
; LINUX64BE: # %bb.0: # %entry
271
- ; LINUX64BE-NEXT: rotld r3, r3, r4
272
- ; LINUX64BE-NEXT: clrldi r3, r3, 1
261
+ ; LINUX64BE-NEXT: rldcl r3, r3, r4, 1
273
262
; LINUX64BE-NEXT: blr
274
263
;
275
264
; LINUX64LE-LABEL: builtincheck:
276
265
; LINUX64LE: # %bb.0: # %entry
277
- ; LINUX64LE-NEXT: rotld r3, r3, r4
278
- ; LINUX64LE-NEXT: clrldi r3, r3, 1
266
+ ; LINUX64LE-NEXT: rldcl r3, r3, r4, 1
279
267
; LINUX64LE-NEXT: blr
280
268
entry:
281
269
%0 = tail call i64 @llvm.fshl.i64 (i64 %word , i64 %word , i64 %shift )
@@ -352,9 +340,9 @@ define dso_local i64 @twomasks(i64 noundef %word) local_unnamed_addr #0 {
352
340
; AIX64-NEXT: stdu r1, -112(r1)
353
341
; AIX64-NEXT: cntlzd r4, r3
354
342
; AIX64-NEXT: std r0, 128(r1)
355
- ; AIX64-NEXT: rotld r4 , r3, r4
356
- ; AIX64-NEXT: clrldi r3, r4, 1
357
- ; AIX64-NEXT: clrldi r4, r4, 16
343
+ ; AIX64-NEXT: rldcl r5 , r3, r4, 1
344
+ ; AIX64-NEXT: rldcl r4, r3, r4, 16
345
+ ; AIX64-NEXT: mr r3, r5
358
346
; AIX64-NEXT: bl .callee[PR]
359
347
; AIX64-NEXT: nop
360
348
; AIX64-NEXT: addi r1, r1, 112
@@ -368,9 +356,9 @@ define dso_local i64 @twomasks(i64 noundef %word) local_unnamed_addr #0 {
368
356
; LINUX64BE-NEXT: stdu r1, -112(r1)
369
357
; LINUX64BE-NEXT: cntlzd r4, r3
370
358
; LINUX64BE-NEXT: std r0, 128(r1)
371
- ; LINUX64BE-NEXT: rotld r4 , r3, r4
372
- ; LINUX64BE-NEXT: clrldi r3, r4, 1
373
- ; LINUX64BE-NEXT: clrldi r4, r4, 16
359
+ ; LINUX64BE-NEXT: rldcl r5 , r3, r4, 1
360
+ ; LINUX64BE-NEXT: rldcl r4, r3, r4, 16
361
+ ; LINUX64BE-NEXT: mr r3, r5
374
362
; LINUX64BE-NEXT: bl callee
375
363
; LINUX64BE-NEXT: nop
376
364
; LINUX64BE-NEXT: addi r1, r1, 112
@@ -384,9 +372,9 @@ define dso_local i64 @twomasks(i64 noundef %word) local_unnamed_addr #0 {
384
372
; LINUX64LE-NEXT: stdu r1, -32(r1)
385
373
; LINUX64LE-NEXT: cntlzd r4, r3
386
374
; LINUX64LE-NEXT: std r0, 48(r1)
387
- ; LINUX64LE-NEXT: rotld r4 , r3, r4
388
- ; LINUX64LE-NEXT: clrldi r3, r4, 1
389
- ; LINUX64LE-NEXT: clrldi r4, r4, 16
375
+ ; LINUX64LE-NEXT: rldcl r5 , r3, r4, 1
376
+ ; LINUX64LE-NEXT: rldcl r4, r3, r4, 16
377
+ ; LINUX64LE-NEXT: mr r3, r5
390
378
; LINUX64LE-NEXT: bl callee
391
379
; LINUX64LE-NEXT: nop
392
380
; LINUX64LE-NEXT: addi r1, r1, 32
@@ -445,8 +433,7 @@ define dso_local i64 @tworotates(i64 noundef %word) local_unnamed_addr #0 {
445
433
; AIX64-NEXT: stdu r1, -112(r1)
446
434
; AIX64-NEXT: cntlzd r4, r3
447
435
; AIX64-NEXT: std r0, 128(r1)
448
- ; AIX64-NEXT: rotld r4, r3, r4
449
- ; AIX64-NEXT: clrldi r5, r4, 1
436
+ ; AIX64-NEXT: rldcl r5, r3, r4, 1
450
437
; AIX64-NEXT: rldicl r4, r3, 23, 1
451
438
; AIX64-NEXT: mr r3, r5
452
439
; AIX64-NEXT: bl .callee[PR]
@@ -462,8 +449,7 @@ define dso_local i64 @tworotates(i64 noundef %word) local_unnamed_addr #0 {
462
449
; LINUX64BE-NEXT: stdu r1, -112(r1)
463
450
; LINUX64BE-NEXT: cntlzd r4, r3
464
451
; LINUX64BE-NEXT: std r0, 128(r1)
465
- ; LINUX64BE-NEXT: rotld r4, r3, r4
466
- ; LINUX64BE-NEXT: clrldi r5, r4, 1
452
+ ; LINUX64BE-NEXT: rldcl r5, r3, r4, 1
467
453
; LINUX64BE-NEXT: rldicl r4, r3, 23, 1
468
454
; LINUX64BE-NEXT: mr r3, r5
469
455
; LINUX64BE-NEXT: bl callee
@@ -479,8 +465,7 @@ define dso_local i64 @tworotates(i64 noundef %word) local_unnamed_addr #0 {
479
465
; LINUX64LE-NEXT: stdu r1, -32(r1)
480
466
; LINUX64LE-NEXT: cntlzd r4, r3
481
467
; LINUX64LE-NEXT: std r0, 48(r1)
482
- ; LINUX64LE-NEXT: rotld r4, r3, r4
483
- ; LINUX64LE-NEXT: clrldi r5, r4, 1
468
+ ; LINUX64LE-NEXT: rldcl r5, r3, r4, 1
484
469
; LINUX64LE-NEXT: rldicl r4, r3, 23, 1
485
470
; LINUX64LE-NEXT: mr r3, r5
486
471
; LINUX64LE-NEXT: bl callee
0 commit comments