[llvm] [AArch64][GlobalISel] Added support for left shift neon intrinsics (PR #170827)

via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 5 02:13:59 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-aarch64

Author: Joshua Rodriguez (JoshdRod)

<details>
<summary>Changes</summary>



---

Patch is 36.01 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/170827.diff


4 Files Affected:

- (modified) llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp (+6) 
- (modified) llvm/test/CodeGen/AArch64/arm64-int-neon.ll (+3-9) 
- (modified) llvm/test/CodeGen/AArch64/arm64-vshift.ll (+355-221) 
- (modified) llvm/test/CodeGen/AArch64/neon-addlv.ll (+19-8) 


``````````diff
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp
index 6b920f05227ad..652a31f4e65f2 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp
@@ -483,6 +483,12 @@ static bool isFPIntrinsic(const MachineRegisterInfo &MRI,
   case Intrinsic::aarch64_neon_sqadd:
   case Intrinsic::aarch64_neon_sqsub:
   case Intrinsic::aarch64_crypto_sha1h:
+  case Intrinsic::aarch64_neon_srshl:
+  case Intrinsic::aarch64_neon_urshl:
+  case Intrinsic::aarch64_neon_sqshl:
+  case Intrinsic::aarch64_neon_uqshl:
+  case Intrinsic::aarch64_neon_sqrshl:
+  case Intrinsic::aarch64_neon_uqrshl:
   case Intrinsic::aarch64_crypto_sha1c:
   case Intrinsic::aarch64_crypto_sha1p:
   case Intrinsic::aarch64_crypto_sha1m:
diff --git a/llvm/test/CodeGen/AArch64/arm64-int-neon.ll b/llvm/test/CodeGen/AArch64/arm64-int-neon.ll
index f33d41b0dd6ef..ace179626f508 100644
--- a/llvm/test/CodeGen/AArch64/arm64-int-neon.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-int-neon.ll
@@ -3,15 +3,7 @@
 ; RUN: llc < %s -mtriple aarch64-unknown-unknown -global-isel -global-isel-abort=2 -mattr=+fprcvt,+fullfp16 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
 
 
-; CHECK-GI:       warning: Instruction selection used fallback path for test_sqrshl_s32
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_sqrshl_s64
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_sqshl_s32
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_sqshl_s64
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqrshl_s32
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqrshl_s64
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqshl_s32
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqshl_s64
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqadd_s32
+; CHECK-GI:  warning: Instruction selection used fallback path for test_uqadd_s32
 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqadd_s64
 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqsub_s32
 ; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for test_uqsub_s64
@@ -236,3 +228,5 @@ define i64 @test_sqdmulls_scalar(float %A){
   %prod = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32  %cvt, i32  %cvt)
   ret i64 %prod
 }
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; CHECK-GI: {{.*}}
diff --git a/llvm/test/CodeGen/AArch64/arm64-vshift.ll b/llvm/test/CodeGen/AArch64/arm64-vshift.ll
index d27e2e69f8605..acfef179aabf8 100644
--- a/llvm/test/CodeGen/AArch64/arm64-vshift.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-vshift.ll
@@ -2,105 +2,73 @@
 ; RUN: llc < %s -mtriple=arm64-eabi -global-isel=0 | FileCheck %s --check-prefixes=CHECK,CHECK-SD
 ; RUN: llc < %s -mtriple=arm64-eabi -global-isel=1 -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
 
-; CHECK-GI:       warning: Instruction selection used fallback path for sqshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshl1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshl1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshl_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshl_scalar_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshr1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for urshr_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshr1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srshr_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu2d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu1d_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu_i64_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu_i32_constant
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrn4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshrun4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrn4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqrshrun4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqrshrn4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn1s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for uqshrn4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for neon_ushl_vscalar_constant_shift
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for neon_ushl_scalar_constant_shift
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for neon_sshll_vscalar_constant_shift
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for neon_sshll_scalar_constant_shift
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for neon_sshll_scalar_constant_shift_m1
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ursra1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for ursra_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srsra1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for srsra_scalar
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli8b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli4h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli2s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli1d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli1d_imm0
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli16b
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli8h
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli4s
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sli2d
-; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for sqshlu_zero_shift_amount
+; CHECK-GI:    warning: Instruction selection used fallback path for sqshlu8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu2d
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu1d_constant
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu_i64_constant
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu_i32_constant
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrn4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshrun4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrn4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqrshrun4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqrshrn4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn1s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for uqshrn4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for neon_ushl_vscalar_constant_shift
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for neon_ushl_scalar_constant_shift
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for neon_sshll_vscalar_constant_shift
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for neon_sshll_scalar_constant_shift
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for neon_sshll_scalar_constant_shift_m1
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli8b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli4h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli2s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli1d
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli1d_imm0
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli16b
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli8h
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli4s
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sli2d
+; CHECK-GI NEXT:    warning: Instruction selection used fallback path for sqshlu_zero_shift_amount
 
 define <8 x i8> @sqshl8b(ptr %A, ptr %B) nounwind {
 ; CHECK-LABEL: sqshl8b:
@@ -155,11 +123,19 @@ define <1 x i64> @sqshl1d(ptr %A, ptr %B) nounwind {
 }
 
 define <1 x i64> @sqshl1d_constant(ptr %A) nounwind {
-; CHECK-LABEL: sqshl1d_constant:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldr d0, [x0]
-; CHECK-NEXT:    sqshl d0, d0, #1
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: sqshl1d_constant:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    ldr d0, [x0]
+; CHECK-SD-NEXT:    sqshl d0, d0, #1
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: sqshl1d_constant:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    mov w8, #1 // =0x1
+; CHECK-GI-NEXT:    ldr d0, [x0]
+; CHECK-GI-NEXT:    fmov d1, x8
+; CHECK-GI-NEXT:    sqshl d0, d0, d1
+; CHECK-GI-NEXT:    ret
   %tmp1 = load <1 x i64>, ptr %A
   %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
   ret <1 x i64> %tmp3
@@ -180,12 +156,21 @@ define i64 @sqshl_scalar(ptr %A, ptr %B) nounwind {
 }
 
 define i64 @sqshl_scalar_constant(ptr %A) nounwind {
-; CHECK-LABEL: sqshl_scalar_constant:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldr d0, [x0]
-; CHECK-NEXT:    sqshl d0, d0, #1
-; CHECK-NEXT:    fmov x0, d0
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: sqshl_scalar_constant:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    ldr d0, [x0]
+; CHECK-SD-NEXT:    sqshl d0, d0, #1
+; CHECK-SD-NEXT:    fmov x0, d0
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: sqshl_scalar_constant:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    mov w8, #1 // =0x1
+; CHECK-GI-NEXT:    ldr d0, [x0]
+; CHECK-GI-NEXT:    fmov d1, x8
+; CHECK-GI-NEXT:    sqshl d0, d0, d1
+; CHECK-GI-NEXT:    fmov x0, d0
+; CHECK-GI-NEXT:    ret
   %tmp1 = load i64, ptr %A
   %tmp3 = call i64 @llvm.aarch64.neon.sqshl.i64(i64 %tmp1, i64 1)
   ret i64 %tmp3
@@ -348,11 +333,19 @@ define <1 x i64> @uqshl1d(ptr %A, ptr %B) nounwind {
 }
 
 define <1 x i64> @uqshl1d_constant(ptr %A) nounwind {
-; CHECK-LABEL: uqshl1d_constant:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldr d0, [x0]
-; CHECK-NEXT:    uqshl d0, d0, #1
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: uqshl1d_constant:
+; CHECK-SD:       // %bb.0:
+; CHECK-SD-NEXT:    ldr d0, [x0]
+; CHECK-SD-NEXT:    uqshl d0, d0, #1
+; CHECK-SD-NEXT:    ret
+;
+; CHECK-GI-LABEL: uqshl1d_constant:
+; CHECK-GI:       // %bb.0:
+; CHECK-GI-NEXT:    mov w8, #1 // =0x1
+; CHECK-GI-NEXT:    ldr d0, [x0]
+; CHECK-GI-NEXT:    fmov d1, x8
+; CHECK-GI-NEXT:    uqshl d0, d0, d1
+; CHECK-GI-NEXT:    ret
   %tmp1 = load <1 x i64>, ptr %A
   %tmp3 = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
   ret <1 x i64> %tmp3
@@ -373,12 +366,21 @@ define i64 @uqshl_scalar(ptr %A, ptr %B) nounwind {
 }
 
 define i64 @uqshl_scalar_constant(ptr %A) nounwind {
-; CHECK-LABEL: uqshl_scalar_constant:
-; CHECK:       // %bb.0:
-; CHECK-NEXT:    ldr d0, [x0]
-; CHECK-NEXT:    uqshl d0, d0, #1
-; CHECK-NEXT:    fmov x0, d0
-; CHECK-NEXT:    ret
+; CHECK-SD-LABEL: uqshl_scal...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/170827


More information about the llvm-commits mailing list