[llvm] 6f28b0b - [NFC] Flatten the logic in RISCVTargetLowering::decomposeMulByConstant
Amaury Séchet via llvm-commits
llvm-commits at lists.llvm.org
Thu May 18 07:48:29 PDT 2023
Author: Amaury Séchet
Date: 2023-05-18T14:45:00Z
New Revision: 6f28b0bb0ab3323c1c5c375db56b35c4933837e4
URL: https://github.com/llvm/llvm-project/commit/6f28b0bb0ab3323c1c5c375db56b35c4933837e4
DIFF: https://github.com/llvm/llvm-project/commit/6f28b0bb0ab3323c1c5c375db56b35c4933837e4.diff
LOG: [NFC] Flatten the logic in RISCVTargetLowering::decomposeMulByConstant
Added:
Modified:
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 9d954c7e3754..c823792b611e 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -15891,31 +15891,35 @@ bool RISCVTargetLowering::decomposeMulByConstant(LLVMContext &Context, EVT VT,
// Check integral scalar types.
const bool HasExtMOrZmmul =
Subtarget.hasStdExtM() || Subtarget.hasStdExtZmmul();
- if (VT.isScalarInteger()) {
- // Omit the optimization if the sub target has the M extension and the data
- // size exceeds XLen.
- if (HasExtMOrZmmul && VT.getSizeInBits() > Subtarget.getXLen())
- return false;
- if (auto *ConstNode = dyn_cast<ConstantSDNode>(C.getNode())) {
- // Break the MUL to a SLLI and an ADD/SUB.
- const APInt &Imm = ConstNode->getAPIntValue();
- if ((Imm + 1).isPowerOf2() || (Imm - 1).isPowerOf2() ||
- (1 - Imm).isPowerOf2() || (-1 - Imm).isPowerOf2())
- return true;
- // Optimize the MUL to (SH*ADD x, (SLLI x, bits)) if Imm is not simm12.
- if (Subtarget.hasStdExtZba() && !Imm.isSignedIntN(12) &&
- ((Imm - 2).isPowerOf2() || (Imm - 4).isPowerOf2() ||
- (Imm - 8).isPowerOf2()))
+ if (!VT.isScalarInteger())
+ return false;
+
+ // Omit the optimization if the sub target has the M extension and the data
+ // size exceeds XLen.
+ if (HasExtMOrZmmul && VT.getSizeInBits() > Subtarget.getXLen())
+ return false;
+
+ if (auto *ConstNode = dyn_cast<ConstantSDNode>(C.getNode())) {
+ // Break the MUL to a SLLI and an ADD/SUB.
+ const APInt &Imm = ConstNode->getAPIntValue();
+ if ((Imm + 1).isPowerOf2() || (Imm - 1).isPowerOf2() ||
+ (1 - Imm).isPowerOf2() || (-1 - Imm).isPowerOf2())
+ return true;
+
+ // Optimize the MUL to (SH*ADD x, (SLLI x, bits)) if Imm is not simm12.
+ if (Subtarget.hasStdExtZba() && !Imm.isSignedIntN(12) &&
+ ((Imm - 2).isPowerOf2() || (Imm - 4).isPowerOf2() ||
+ (Imm - 8).isPowerOf2()))
+ return true;
+
+ // Break the MUL to two SLLI instructions and an ADD/SUB, if Imm needs
+ // a pair of LUI/ADDI.
+ if (!Imm.isSignedIntN(12) && Imm.countr_zero() < 12 &&
+ ConstNode->hasOneUse()) {
+ APInt ImmS = Imm.ashr(Imm.countr_zero());
+ if ((ImmS + 1).isPowerOf2() || (ImmS - 1).isPowerOf2() ||
+ (1 - ImmS).isPowerOf2())
return true;
- // Break the MUL to two SLLI instructions and an ADD/SUB, if Imm needs
- // a pair of LUI/ADDI.
- if (!Imm.isSignedIntN(12) && Imm.countr_zero() < 12 &&
- ConstNode->hasOneUse()) {
- APInt ImmS = Imm.ashr(Imm.countr_zero());
- if ((ImmS + 1).isPowerOf2() || (ImmS - 1).isPowerOf2() ||
- (1 - ImmS).isPowerOf2())
- return true;
- }
}
}
More information about the llvm-commits
mailing list