Skip to content

Commit 9bfb3be

Browse files
authored
[AArch64][GlobalISel] Added support for neon left shift intrinsics on single-element vector types (#170827)
Previously, the left shift family of intrinsics would fail to lower for <1 x i64> / <1 x i32> vector types, as IRTranslation lowers these to scalars. Marking these intrinsics as only using fp operands ensures the RegBankSelect phase places the vector on an fpr bank, instead of a gpr bank.
1 parent 6b59a95 commit 9bfb3be

File tree

4 files changed

+462
-274
lines changed

4 files changed

+462
-274
lines changed

llvm/lib/Target/AArch64/GISel/AArch64RegisterBankInfo.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,14 @@ static bool isFPIntrinsic(const MachineRegisterInfo &MRI,
483483
case Intrinsic::aarch64_neon_sqadd:
484484
case Intrinsic::aarch64_neon_sqsub:
485485
case Intrinsic::aarch64_crypto_sha1h:
486+
case Intrinsic::aarch64_neon_srshl:
487+
case Intrinsic::aarch64_neon_urshl:
488+
case Intrinsic::aarch64_neon_sqshl:
489+
case Intrinsic::aarch64_neon_uqshl:
490+
case Intrinsic::aarch64_neon_sqrshl:
491+
case Intrinsic::aarch64_neon_uqrshl:
492+
case Intrinsic::aarch64_neon_ushl:
493+
case Intrinsic::aarch64_neon_sshl:
486494
case Intrinsic::aarch64_crypto_sha1c:
487495
case Intrinsic::aarch64_crypto_sha1p:
488496
case Intrinsic::aarch64_crypto_sha1m:

llvm/test/CodeGen/AArch64/arm64-int-neon.ll

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,7 @@
33
; 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
44

55

6-
; CHECK-GI: warning: Instruction selection used fallback path for test_sqrshl_s32
7-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqrshl_s64
8-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqshl_s32
9-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_sqshl_s64
10-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqrshl_s32
11-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqrshl_s64
12-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqshl_s32
13-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqshl_s64
14-
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqadd_s32
6+
; CHECK-GI: warning: Instruction selection used fallback path for test_uqadd_s32
157
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqadd_s64
168
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqsub_s32
179
; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_uqsub_s64

0 commit comments

Comments
 (0)