@@ -62,10 +62,8 @@ define i16 @rotl_i16(i16 %x, i16 %z) {
62
62
define i32 @rotl_i32 (i32 %x , i32 %z ) {
63
63
; CHECK-LABEL: rotl_i32:
64
64
; CHECK: # %bb.0:
65
- ; CHECK-NEXT: andi $1, $5, 31
66
- ; CHECK-NEXT: sllv $1, $4, $1
65
+ ; CHECK-NEXT: sllv $1, $4, $5
67
66
; CHECK-NEXT: negu $2, $5
68
- ; CHECK-NEXT: andi $2, $2, 31
69
67
; CHECK-NEXT: srlv $2, $4, $2
70
68
; CHECK-NEXT: jr $ra
71
69
; CHECK-NEXT: or $2, $1, $2
@@ -80,15 +78,13 @@ define i64 @rotl_i64(i64 %x, i64 %z) {
80
78
; CHECK-BE-NEXT: andi $1, $1, 1
81
79
; CHECK-BE-NEXT: move $3, $4
82
80
; CHECK-BE-NEXT: movn $3, $5, $1
83
- ; CHECK-BE-NEXT: andi $6, $7, 31
84
- ; CHECK-BE-NEXT: sllv $2, $3, $6
81
+ ; CHECK-BE-NEXT: sllv $2, $3, $7
85
82
; CHECK-BE-NEXT: movn $5, $4, $1
86
83
; CHECK-BE-NEXT: srl $1, $5, 1
87
84
; CHECK-BE-NEXT: not $4, $7
88
- ; CHECK-BE-NEXT: andi $4, $4, 31
89
85
; CHECK-BE-NEXT: srlv $1, $1, $4
90
86
; CHECK-BE-NEXT: or $2, $2, $1
91
- ; CHECK-BE-NEXT: sllv $1, $5, $6
87
+ ; CHECK-BE-NEXT: sllv $1, $5, $7
92
88
; CHECK-BE-NEXT: srl $3, $3, 1
93
89
; CHECK-BE-NEXT: srlv $3, $3, $4
94
90
; CHECK-BE-NEXT: jr $ra
@@ -100,15 +96,13 @@ define i64 @rotl_i64(i64 %x, i64 %z) {
100
96
; CHECK-LE-NEXT: andi $1, $1, 1
101
97
; CHECK-LE-NEXT: move $3, $4
102
98
; CHECK-LE-NEXT: movn $3, $5, $1
103
- ; CHECK-LE-NEXT: andi $7, $6, 31
104
- ; CHECK-LE-NEXT: sllv $2, $3, $7
99
+ ; CHECK-LE-NEXT: sllv $2, $3, $6
105
100
; CHECK-LE-NEXT: movn $5, $4, $1
106
101
; CHECK-LE-NEXT: srl $1, $5, 1
107
102
; CHECK-LE-NEXT: not $4, $6
108
- ; CHECK-LE-NEXT: andi $4, $4, 31
109
103
; CHECK-LE-NEXT: srlv $1, $1, $4
110
104
; CHECK-LE-NEXT: or $2, $2, $1
111
- ; CHECK-LE-NEXT: sllv $1, $5, $7
105
+ ; CHECK-LE-NEXT: sllv $1, $5, $6
112
106
; CHECK-LE-NEXT: srl $3, $3, 1
113
107
; CHECK-LE-NEXT: srlv $3, $3, $4
114
108
; CHECK-LE-NEXT: jr $ra
@@ -122,35 +116,27 @@ define i64 @rotl_i64(i64 %x, i64 %z) {
122
116
define <4 x i32 > @rotl_v4i32 (<4 x i32 > %x , <4 x i32 > %z ) {
123
117
; CHECK-LABEL: rotl_v4i32:
124
118
; CHECK: # %bb.0:
125
- ; CHECK-NEXT: lw $1, 24 ($sp)
119
+ ; CHECK-NEXT: lw $1, 20 ($sp)
126
120
; CHECK-NEXT: negu $2, $1
127
- ; CHECK-NEXT: lw $3, 20 ($sp)
121
+ ; CHECK-NEXT: lw $3, 24 ($sp)
128
122
; CHECK-NEXT: negu $8, $3
129
- ; CHECK-NEXT: andi $8, $8, 31
130
- ; CHECK-NEXT: andi $2, $2, 31
131
- ; CHECK-NEXT: andi $3, $3, 31
132
- ; CHECK-NEXT: andi $1, $1, 31
133
- ; CHECK-NEXT: lw $9, 16($sp)
134
- ; CHECK-NEXT: sllv $1, $6, $1
135
- ; CHECK-NEXT: srlv $6, $6, $2
136
- ; CHECK-NEXT: sllv $3, $5, $3
137
- ; CHECK-NEXT: srlv $5, $5, $8
138
- ; CHECK-NEXT: andi $2, $9, 31
139
- ; CHECK-NEXT: sllv $2, $4, $2
140
- ; CHECK-NEXT: negu $8, $9
141
- ; CHECK-NEXT: andi $8, $8, 31
142
- ; CHECK-NEXT: srlv $4, $4, $8
143
- ; CHECK-NEXT: lw $8, 28($sp)
144
- ; CHECK-NEXT: or $2, $2, $4
145
- ; CHECK-NEXT: or $3, $3, $5
146
- ; CHECK-NEXT: or $4, $1, $6
147
- ; CHECK-NEXT: andi $1, $8, 31
148
- ; CHECK-NEXT: sllv $1, $7, $1
149
- ; CHECK-NEXT: negu $5, $8
150
- ; CHECK-NEXT: andi $5, $5, 31
151
- ; CHECK-NEXT: srlv $5, $7, $5
123
+ ; CHECK-NEXT: sllv $9, $6, $3
124
+ ; CHECK-NEXT: srlv $6, $6, $8
125
+ ; CHECK-NEXT: sllv $1, $5, $1
126
+ ; CHECK-NEXT: srlv $3, $5, $2
127
+ ; CHECK-NEXT: lw $2, 16($sp)
128
+ ; CHECK-NEXT: sllv $5, $4, $2
129
+ ; CHECK-NEXT: negu $2, $2
130
+ ; CHECK-NEXT: srlv $2, $4, $2
131
+ ; CHECK-NEXT: or $2, $5, $2
132
+ ; CHECK-NEXT: or $3, $1, $3
133
+ ; CHECK-NEXT: or $4, $9, $6
134
+ ; CHECK-NEXT: lw $1, 28($sp)
135
+ ; CHECK-NEXT: sllv $5, $7, $1
136
+ ; CHECK-NEXT: negu $1, $1
137
+ ; CHECK-NEXT: srlv $1, $7, $1
152
138
; CHECK-NEXT: jr $ra
153
- ; CHECK-NEXT: or $5, $1 , $5
139
+ ; CHECK-NEXT: or $5, $5 , $1
154
140
%f = call <4 x i32 > @llvm.fshl.v4i32 (<4 x i32 > %x , <4 x i32 > %x , <4 x i32 > %z )
155
141
ret <4 x i32 > %f
156
142
}
@@ -224,10 +210,8 @@ define i16 @rotr_i16(i16 %x, i16 %z) {
224
210
define i32 @rotr_i32 (i32 %x , i32 %z ) {
225
211
; CHECK-LABEL: rotr_i32:
226
212
; CHECK: # %bb.0:
227
- ; CHECK-NEXT: andi $1, $5, 31
228
- ; CHECK-NEXT: srlv $1, $4, $1
213
+ ; CHECK-NEXT: srlv $1, $4, $5
229
214
; CHECK-NEXT: negu $2, $5
230
- ; CHECK-NEXT: andi $2, $2, 31
231
215
; CHECK-NEXT: sllv $2, $4, $2
232
216
; CHECK-NEXT: jr $ra
233
217
; CHECK-NEXT: or $2, $1, $2
@@ -241,15 +225,13 @@ define i64 @rotr_i64(i64 %x, i64 %z) {
241
225
; CHECK-BE-NEXT: andi $1, $7, 32
242
226
; CHECK-BE-NEXT: move $3, $5
243
227
; CHECK-BE-NEXT: movz $3, $4, $1
244
- ; CHECK-BE-NEXT: andi $6, $7, 31
245
- ; CHECK-BE-NEXT: srlv $2, $3, $6
228
+ ; CHECK-BE-NEXT: srlv $2, $3, $7
246
229
; CHECK-BE-NEXT: movz $4, $5, $1
247
230
; CHECK-BE-NEXT: sll $1, $4, 1
248
231
; CHECK-BE-NEXT: not $5, $7
249
- ; CHECK-BE-NEXT: andi $5, $5, 31
250
232
; CHECK-BE-NEXT: sllv $1, $1, $5
251
233
; CHECK-BE-NEXT: or $2, $1, $2
252
- ; CHECK-BE-NEXT: srlv $1, $4, $6
234
+ ; CHECK-BE-NEXT: srlv $1, $4, $7
253
235
; CHECK-BE-NEXT: sll $3, $3, 1
254
236
; CHECK-BE-NEXT: sllv $3, $3, $5
255
237
; CHECK-BE-NEXT: jr $ra
@@ -260,15 +242,13 @@ define i64 @rotr_i64(i64 %x, i64 %z) {
260
242
; CHECK-LE-NEXT: andi $1, $6, 32
261
243
; CHECK-LE-NEXT: move $3, $5
262
244
; CHECK-LE-NEXT: movz $3, $4, $1
263
- ; CHECK-LE-NEXT: andi $7, $6, 31
264
- ; CHECK-LE-NEXT: srlv $2, $3, $7
245
+ ; CHECK-LE-NEXT: srlv $2, $3, $6
265
246
; CHECK-LE-NEXT: movz $4, $5, $1
266
247
; CHECK-LE-NEXT: sll $1, $4, 1
267
248
; CHECK-LE-NEXT: not $5, $6
268
- ; CHECK-LE-NEXT: andi $5, $5, 31
269
249
; CHECK-LE-NEXT: sllv $1, $1, $5
270
250
; CHECK-LE-NEXT: or $2, $1, $2
271
- ; CHECK-LE-NEXT: srlv $1, $4, $7
251
+ ; CHECK-LE-NEXT: srlv $1, $4, $6
272
252
; CHECK-LE-NEXT: sll $3, $3, 1
273
253
; CHECK-LE-NEXT: sllv $3, $3, $5
274
254
; CHECK-LE-NEXT: jr $ra
@@ -282,35 +262,27 @@ define i64 @rotr_i64(i64 %x, i64 %z) {
282
262
define <4 x i32 > @rotr_v4i32 (<4 x i32 > %x , <4 x i32 > %z ) {
283
263
; CHECK-LABEL: rotr_v4i32:
284
264
; CHECK: # %bb.0:
285
- ; CHECK-NEXT: lw $1, 24 ($sp)
265
+ ; CHECK-NEXT: lw $1, 20 ($sp)
286
266
; CHECK-NEXT: negu $2, $1
287
- ; CHECK-NEXT: lw $3, 20 ($sp)
267
+ ; CHECK-NEXT: lw $3, 24 ($sp)
288
268
; CHECK-NEXT: negu $8, $3
289
- ; CHECK-NEXT: andi $8, $8, 31
290
- ; CHECK-NEXT: andi $2, $2, 31
291
- ; CHECK-NEXT: andi $3, $3, 31
292
- ; CHECK-NEXT: andi $1, $1, 31
293
- ; CHECK-NEXT: lw $9, 16($sp)
294
- ; CHECK-NEXT: srlv $1, $6, $1
295
- ; CHECK-NEXT: sllv $6, $6, $2
296
- ; CHECK-NEXT: srlv $3, $5, $3
297
- ; CHECK-NEXT: sllv $5, $5, $8
298
- ; CHECK-NEXT: andi $2, $9, 31
299
- ; CHECK-NEXT: srlv $2, $4, $2
300
- ; CHECK-NEXT: negu $8, $9
301
- ; CHECK-NEXT: andi $8, $8, 31
302
- ; CHECK-NEXT: sllv $4, $4, $8
303
- ; CHECK-NEXT: lw $8, 28($sp)
304
- ; CHECK-NEXT: or $2, $2, $4
305
- ; CHECK-NEXT: or $3, $3, $5
306
- ; CHECK-NEXT: or $4, $1, $6
307
- ; CHECK-NEXT: andi $1, $8, 31
308
- ; CHECK-NEXT: srlv $1, $7, $1
309
- ; CHECK-NEXT: negu $5, $8
310
- ; CHECK-NEXT: andi $5, $5, 31
311
- ; CHECK-NEXT: sllv $5, $7, $5
269
+ ; CHECK-NEXT: srlv $9, $6, $3
270
+ ; CHECK-NEXT: sllv $6, $6, $8
271
+ ; CHECK-NEXT: srlv $1, $5, $1
272
+ ; CHECK-NEXT: sllv $3, $5, $2
273
+ ; CHECK-NEXT: lw $2, 16($sp)
274
+ ; CHECK-NEXT: srlv $5, $4, $2
275
+ ; CHECK-NEXT: negu $2, $2
276
+ ; CHECK-NEXT: sllv $2, $4, $2
277
+ ; CHECK-NEXT: or $2, $5, $2
278
+ ; CHECK-NEXT: or $3, $1, $3
279
+ ; CHECK-NEXT: or $4, $9, $6
280
+ ; CHECK-NEXT: lw $1, 28($sp)
281
+ ; CHECK-NEXT: srlv $5, $7, $1
282
+ ; CHECK-NEXT: negu $1, $1
283
+ ; CHECK-NEXT: sllv $1, $7, $1
312
284
; CHECK-NEXT: jr $ra
313
- ; CHECK-NEXT: or $5, $1 , $5
285
+ ; CHECK-NEXT: or $5, $5 , $1
314
286
%f = call <4 x i32 > @llvm.fshr.v4i32 (<4 x i32 > %x , <4 x i32 > %x , <4 x i32 > %z )
315
287
ret <4 x i32 > %f
316
288
}
0 commit comments