[llvm] [SelectionDAG] Let ComputeKnownSignBits handle (shl (ext X), C) (PR #97695)
Jay Foad via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 4 02:08:35 PDT 2024
================
@@ -4617,6 +4617,21 @@ unsigned SelectionDAG::ComputeNumSignBits(SDValue Op, const APInt &DemandedElts,
case ISD::SHL:
if (std::optional<uint64_t> ShAmt =
getValidMaximumShiftAmount(Op, DemandedElts, Depth + 1)) {
+ if (Op.getOperand(0).getOpcode() == ISD::ANY_EXTEND ||
+ Op.getOperand(0).getOpcode() == ISD::ZERO_EXTEND ||
+ Op.getOperand(0).getOpcode() == ISD::SIGN_EXTEND) {
+ SDValue Src = Op.getOperand(0);
+ EVT SrcVT = Src.getValueType();
+ SDValue ExtendedOp = Op.getOperand(0).getOperand(0);
+ EVT ExtendedOpVT = ExtendedOp.getValueType();
+ uint64_t ExtendedWidth =
+ SrcVT.getScalarSizeInBits() - ExtendedOpVT.getScalarSizeInBits();
+ if (ExtendedWidth <= *ShAmt) {
----------------
jayfoad wrote:
This seems wrong in the vector case, where the shift amounts could be different and *ShAmt is the max shift amount. In that case, some of the other shift amounts could be < ExtendedWidth.
https://github.com/llvm/llvm-project/pull/97695
More information about the llvm-commits
mailing list