@@ -157,7 +157,7 @@ entry:
157
157
define i16 @shrd16mri8 (ptr %ptr , i16 noundef %b ) {
158
158
; CHECK-LABEL: shrd16mri8:
159
159
; CHECK: # %bb.0: # %entry
160
- ; CHECK-NEXT: shrdw $12 , %si, (%rdi), %ax
160
+ ; CHECK-NEXT: shldw $4 , %si, (%rdi), %ax
161
161
; CHECK-NEXT: retq
162
162
entry:
163
163
%a = load i16 , ptr %ptr
@@ -168,7 +168,7 @@ entry:
168
168
define i32 @shrd32mri8 (ptr %ptr , i32 noundef %b ) {
169
169
; CHECK-LABEL: shrd32mri8:
170
170
; CHECK: # %bb.0: # %entry
171
- ; CHECK-NEXT: shrdl $12 , %esi, (%rdi), %eax
171
+ ; CHECK-NEXT: shldl $20 , %esi, (%rdi), %eax
172
172
; CHECK-NEXT: retq
173
173
entry:
174
174
%a = load i32 , ptr %ptr
@@ -179,7 +179,7 @@ entry:
179
179
define i64 @shrd64mri8 (ptr %ptr , i64 noundef %b ) {
180
180
; CHECK-LABEL: shrd64mri8:
181
181
; CHECK: # %bb.0: # %entry
182
- ; CHECK-NEXT: shrdq $12 , %rsi, (%rdi), %rax
182
+ ; CHECK-NEXT: shldq $52 , %rsi, (%rdi), %rax
183
183
; CHECK-NEXT: retq
184
184
entry:
185
185
%a = load i64 , ptr %ptr
@@ -190,15 +190,13 @@ entry:
190
190
define void @shrd16mrcl_legacy (ptr %ptr , i16 noundef %b , i8 %cl ) {
191
191
; CHECK-LABEL: shrd16mrcl_legacy:
192
192
; CHECK: # %bb.0: # %entry
193
- ; CHECK-NEXT: movzwl (%rdi), %eax
194
193
; CHECK-NEXT: andb $15, %dl, %cl
195
- ; CHECK-NEXT: shrdw %cl, %ax, %si, %ax
196
- ; CHECK-NEXT: movw %ax, (%rdi)
194
+ ; CHECK-NEXT: shrdw %cl, %si, (%rdi)
197
195
; CHECK-NEXT: retq
198
196
entry:
199
197
%a = load i16 , ptr %ptr
200
198
%clin = sext i8 %cl to i16
201
- %shrd = call i16 @llvm.fshr.i16 (i16 %a , i16 %b , i16 %clin )
199
+ %shrd = call i16 @llvm.fshr.i16 (i16 %b , i16 %a , i16 %clin )
202
200
store i16 %shrd , ptr %ptr
203
201
ret void
204
202
}
@@ -207,15 +205,13 @@ define void @shrd32mrcl_legacy(ptr %ptr, i32 noundef %b, i8 %cl) {
207
205
; CHECK-LABEL: shrd32mrcl_legacy:
208
206
; CHECK: # %bb.0: # %entry
209
207
; CHECK-NEXT: movl %edx, %ecx
210
- ; CHECK-NEXT: movl (%rdi), %eax
211
208
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
212
- ; CHECK-NEXT: shrdl %cl, %eax, %esi, %eax
213
- ; CHECK-NEXT: movl %eax, (%rdi)
209
+ ; CHECK-NEXT: shrdl %cl, %esi, (%rdi)
214
210
; CHECK-NEXT: retq
215
211
entry:
216
212
%a = load i32 , ptr %ptr
217
213
%clin = sext i8 %cl to i32
218
- %shrd = call i32 @llvm.fshr.i32 (i32 %a , i32 %b , i32 %clin )
214
+ %shrd = call i32 @llvm.fshr.i32 (i32 %b , i32 %a , i32 %clin )
219
215
store i32 %shrd , ptr %ptr
220
216
ret void
221
217
}
@@ -224,54 +220,49 @@ define void @shrd64mrcl_legacy(ptr %ptr, i64 noundef %b, i8 %cl) {
224
220
; CHECK-LABEL: shrd64mrcl_legacy:
225
221
; CHECK: # %bb.0: # %entry
226
222
; CHECK-NEXT: movl %edx, %ecx
227
- ; CHECK-NEXT: movq (%rdi), %rax
228
223
; CHECK-NEXT: # kill: def $cl killed $cl killed $ecx
229
- ; CHECK-NEXT: shrdq %cl, %rax, %rsi, %rax
230
- ; CHECK-NEXT: movq %rax, (%rdi)
224
+ ; CHECK-NEXT: shrdq %cl, %rsi, (%rdi)
231
225
; CHECK-NEXT: retq
232
226
entry:
233
227
%a = load i64 , ptr %ptr
234
228
%clin = sext i8 %cl to i64
235
- %shrd = call i64 @llvm.fshr.i64 (i64 %a , i64 %b , i64 %clin )
229
+ %shrd = call i64 @llvm.fshr.i64 (i64 %b , i64 %a , i64 %clin )
236
230
store i64 %shrd , ptr %ptr
237
231
ret void
238
232
}
239
233
240
234
define void @shrd16mri8_legacy (ptr %ptr , i16 noundef %b ) {
241
235
; CHECK-LABEL: shrd16mri8_legacy:
242
236
; CHECK: # %bb.0: # %entry
243
- ; CHECK-NEXT: shrdw $12, %si, (%rdi), %ax
244
- ; CHECK-NEXT: movw %ax, (%rdi)
237
+ ; CHECK-NEXT: shrdw $12, %si, (%rdi)
245
238
; CHECK-NEXT: retq
246
239
entry:
247
240
%a = load i16 , ptr %ptr
248
- %shrd = call i16 @llvm.fshr.i16 (i16 %a , i16 %b , i16 12 )
241
+ %shrd = call i16 @llvm.fshr.i16 (i16 %b , i16 %a , i16 12 )
249
242
store i16 %shrd , ptr %ptr
250
243
ret void
251
244
}
252
245
253
246
define void @shrd32mri8_legacy (ptr %ptr , i32 noundef %b ) {
254
247
; CHECK-LABEL: shrd32mri8_legacy:
255
248
; CHECK: # %bb.0: # %entry
256
- ; CHECK-NEXT: shrdl $12, %esi, (%rdi), %eax
257
- ; CHECK-NEXT: movl %eax, (%rdi)
249
+ ; CHECK-NEXT: shrdl $12, %esi, (%rdi)
258
250
; CHECK-NEXT: retq
259
251
entry:
260
252
%a = load i32 , ptr %ptr
261
- %shrd = call i32 @llvm.fshr.i32 (i32 %a , i32 %b , i32 12 )
253
+ %shrd = call i32 @llvm.fshr.i32 (i32 %b , i32 %a , i32 12 )
262
254
store i32 %shrd , ptr %ptr
263
255
ret void
264
256
}
265
257
266
258
define void @shrd64mri8_legacy (ptr %ptr , i64 noundef %b ) {
267
259
; CHECK-LABEL: shrd64mri8_legacy:
268
260
; CHECK: # %bb.0: # %entry
269
- ; CHECK-NEXT: shrdq $12, %rsi, (%rdi), %rax
270
- ; CHECK-NEXT: movq %rax, (%rdi)
261
+ ; CHECK-NEXT: shrdq $12, %rsi, (%rdi)
271
262
; CHECK-NEXT: retq
272
263
entry:
273
264
%a = load i64 , ptr %ptr
274
- %shrd = call i64 @llvm.fshr.i64 (i64 %a , i64 %b , i64 12 )
265
+ %shrd = call i64 @llvm.fshr.i64 (i64 %b , i64 %a , i64 12 )
275
266
store i64 %shrd , ptr %ptr
276
267
ret void
277
268
}
0 commit comments