@@ -4506,3 +4506,53 @@ entry:
45064506 %d = call <2 x i128 > @llvm.fshr (<2 x i128 > %a , <2 x i128 > %b , <2 x i128 > <i128 3 , i128 3 >)
45074507 ret <2 x i128 > %d
45084508}
4509+
4510+
4511+
4512+ define <2 x i64 > @fshl_to_rev2i64 (<2 x i64 > %r ) {
4513+ ; CHECK-SD-LABEL: fshl_to_rev2i64:
4514+ ; CHECK-SD: // %bb.0:
4515+ ; CHECK-SD-NEXT: rev64 v0.4s, v0.4s
4516+ ; CHECK-SD-NEXT: ret
4517+ ;
4518+ ; CHECK-GI-LABEL: fshl_to_rev2i64:
4519+ ; CHECK-GI: // %bb.0:
4520+ ; CHECK-GI-NEXT: shl v1.2d, v0.2d, #32
4521+ ; CHECK-GI-NEXT: ushr v0.2d, v0.2d, #32
4522+ ; CHECK-GI-NEXT: orr v0.16b, v1.16b, v0.16b
4523+ ; CHECK-GI-NEXT: ret
4524+ %or = tail call <2 x i64 > @llvm.fshl.v2i64 (<2 x i64 > %r , <2 x i64 > %r , <2 x i64 > splat (i64 32 ))
4525+ ret <2 x i64 > %or
4526+ }
4527+
4528+ define <4 x i32 > @fshl_to_rev4i32 (<4 x i32 > %r ) {
4529+ ; CHECK-SD-LABEL: fshl_to_rev4i32:
4530+ ; CHECK-SD: // %bb.0:
4531+ ; CHECK-SD-NEXT: rev32 v0.8h, v0.8h
4532+ ; CHECK-SD-NEXT: ret
4533+ ;
4534+ ; CHECK-GI-LABEL: fshl_to_rev4i32:
4535+ ; CHECK-GI: // %bb.0:
4536+ ; CHECK-GI-NEXT: shl v1.4s, v0.4s, #16
4537+ ; CHECK-GI-NEXT: ushr v0.4s, v0.4s, #16
4538+ ; CHECK-GI-NEXT: orr v0.16b, v1.16b, v0.16b
4539+ ; CHECK-GI-NEXT: ret
4540+ %or = tail call <4 x i32 > @llvm.fshl.v4i32 (<4 x i32 > %r , <4 x i32 > %r , <4 x i32 > splat (i32 16 ))
4541+ ret <4 x i32 > %or
4542+ }
4543+
4544+ define <2 x i32 > @fshl_to_rev2i32 (<2 x i32 > %r ) {
4545+ ; CHECK-SD-LABEL: fshl_to_rev2i32:
4546+ ; CHECK-SD: // %bb.0:
4547+ ; CHECK-SD-NEXT: rev32 v0.4h, v0.4h
4548+ ; CHECK-SD-NEXT: ret
4549+ ;
4550+ ; CHECK-GI-LABEL: fshl_to_rev2i32:
4551+ ; CHECK-GI: // %bb.0:
4552+ ; CHECK-GI-NEXT: shl v1.2s, v0.2s, #16
4553+ ; CHECK-GI-NEXT: ushr v0.2s, v0.2s, #16
4554+ ; CHECK-GI-NEXT: orr v0.8b, v1.8b, v0.8b
4555+ ; CHECK-GI-NEXT: ret
4556+ %or = tail call <2 x i32 > @llvm.fshl.v2i32 (<2 x i32 > %r , <2 x i32 > %r , <2 x i32 > splat (i32 16 ))
4557+ ret <2 x i32 > %or
4558+ }
0 commit comments