[clang] [llvm] [PowerPC] Fix behavior of rldimi/rlwimi/rlwnm builtins (PR #85040)
Chen Zheng via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 15 03:27:46 PDT 2024
================
@@ -10764,30 +10764,53 @@ SDValue PPCTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
return DAG.getRegister(PPC::R2, MVT::i32);
case Intrinsic::ppc_rldimi: {
+ assert(Subtarget.isPPC64() && "rldimi is only available in 64-bit!");
+ if (Op.getConstantOperandVal(4) == 0)
+ return Op.getOperand(2);
uint64_t SH = Op.getConstantOperandVal(3);
unsigned MB = 0, ME = 0;
- if (!isRunOfOnes64(Op.getConstantOperandVal(4), MB, ME) || ME != 63 - SH)
+ if (!isRunOfOnes64(Op.getConstantOperandVal(4), MB, ME))
report_fatal_error("invalid rldimi mask!");
- return SDValue(DAG.getMachineNode(
- PPC::RLDIMI, dl, MVT::i64,
- {Op.getOperand(1), Op.getOperand(2), Op.getOperand(3),
- DAG.getTargetConstant(MB, dl, MVT::i32)}),
- 0);
+
+ // For all-one mask, MB will be set to 0, adjust it next to 63-SH.
----------------
chenzheng1030 wrote:
For all-one mask, to improve the readability, is it better to just return the `Intrinsic::ppc_rldimi` as `ISD::ROTL (Op.getOperand(1), Op.getOperand(3))`?
I think this would also benefit later optimizations as we are using a ISD node here.
https://github.com/llvm/llvm-project/pull/85040
More information about the cfe-commits
mailing list