[llvm] a35d7d7 - [AArch64][SelectionDAG] Correct the shift amounts bound
via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 24 17:52:26 PDT 2024
Author: zhongyunde 00443407
Date: 2024-04-25T08:50:31+08:00
New Revision: a35d7d7d124172632a9a108f76deba647f4da863
URL: https://github.com/llvm/llvm-project/commit/a35d7d7d124172632a9a108f76deba647f4da863
DIFF: https://github.com/llvm/llvm-project/commit/a35d7d7d124172632a9a108f76deba647f4da863.diff
LOG: [AArch64][SelectionDAG] Correct the shift amounts bound
Accord D152827, when the shift amounts is 4 or less, they are
cheap as a move.
Added:
Modified:
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
llvm/test/CodeGen/AArch64/mul_pow2.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 892b5853e00e14..3d2fa3953976b3 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -17610,8 +17610,8 @@ static SDValue performMulCombine(SDNode *N, SelectionDAG &DAG,
APInt CVNMinus1 = CVN - 1;
unsigned ShiftM1 = CVMMinus1.logBase2();
unsigned ShiftN1 = CVNMinus1.logBase2();
- // LSLFast implicate that Shifts <= 3 places are fast
- if (ShiftM1 <= 3 && ShiftN1 <= 3) {
+ // ALULSLFast implicate that Shifts <= 4 places are fast
+ if (ShiftM1 <= 4 && ShiftN1 <= 4) {
SDValue MVal = Add(Shl(N0, ShiftM1), N0);
return Add(Shl(MVal, ShiftN1), MVal);
}
diff --git a/llvm/test/CodeGen/AArch64/mul_pow2.ll b/llvm/test/CodeGen/AArch64/mul_pow2.ll
index 90e560af4465a9..9f8ba8bc6bdc54 100644
--- a/llvm/test/CodeGen/AArch64/mul_pow2.ll
+++ b/llvm/test/CodeGen/AArch64/mul_pow2.ll
@@ -545,12 +545,11 @@ define i32 @test45(i32 %x) {
ret i32 %mul
}
-; Negative test: The shift amount 4 larger than 3
define i32 @test85_fast_shift(i32 %x) "target-features"="+alu-lsl-fast" {
; CHECK-LABEL: test85_fast_shift:
; CHECK: // %bb.0:
-; CHECK-NEXT: mov w8, #85 // =0x55
-; CHECK-NEXT: mul w0, w0, w8
+; CHECK-NEXT: add w8, w0, w0, lsl #2
+; CHECK-NEXT: add w0, w8, w8, lsl #4
; CHECK-NEXT: ret
;
; GISEL-LABEL: test85_fast_shift:
@@ -563,7 +562,7 @@ define i32 @test85_fast_shift(i32 %x) "target-features"="+alu-lsl-fast" {
ret i32 %mul
}
-; Negative test: The shift amount 5 larger than 3
+; Negative test: The shift amount 5 larger than 4
define i32 @test297_fast_shift(i32 %x) "target-features"="+alu-lsl-fast" {
; CHECK-LABEL: test297_fast_shift:
; CHECK: // %bb.0:
More information about the llvm-commits
mailing list