@@ -1861,7 +1861,8 @@ unsigned GISelValueTracking::computeNumSignBits(Register R,
18611861 Register Src1 = MI.getOperand (1 ).getReg ();
18621862 Register Src2 = MI.getOperand (2 ).getReg ();
18631863 FirstAnswer = computeNumSignBits (Src1, DemandedElts, Depth + 1 );
1864- if (auto C = getValidMinimumShiftAmount (Src2, DemandedElts, Depth + 1 ))
1864+ if (auto C =
1865+ getValidMinimumShiftAmount (Src2, TyBits, DemandedElts, Depth + 1 ))
18651866 FirstAnswer = std::min<uint64_t >(FirstAnswer + *C, TyBits);
18661867 break ;
18671868 }
@@ -2012,13 +2013,12 @@ unsigned GISelValueTracking::computeNumSignBits(Register R, unsigned Depth) {
20122013}
20132014
20142015std::optional<ConstantRange> GISelValueTracking::getValidShiftAmountRange (
2015- Register R, const APInt &DemandedElts, unsigned Depth) {
2016+ Register R, unsigned BitWidth, const APInt &DemandedElts, unsigned Depth) {
20162017 // Shifting more than the bitwidth is not valid.
20172018 MachineInstr &MI = *MRI.getVRegDef (R);
20182019 unsigned Opcode = MI.getOpcode ();
20192020
20202021 LLT Ty = MRI.getType (R);
2021- unsigned BitWidth = Ty.getScalarSizeInBits ();
20222022
20232023 if (Opcode == TargetOpcode::G_CONSTANT) {
20242024 const APInt &ShAmt = MI.getOperand (1 ).getCImm ()->getValue ();
@@ -2062,9 +2062,9 @@ std::optional<ConstantRange> GISelValueTracking::getValidShiftAmountRange(
20622062}
20632063
20642064std::optional<uint64_t > GISelValueTracking::getValidMinimumShiftAmount (
2065- Register R, const APInt &DemandedElts, unsigned Depth) {
2065+ Register R, unsigned BitWidth, const APInt &DemandedElts, unsigned Depth) {
20662066 if (std::optional<ConstantRange> AmtRange =
2067- getValidShiftAmountRange (R, DemandedElts, Depth))
2067+ getValidShiftAmountRange (R, BitWidth, DemandedElts, Depth))
20682068 return AmtRange->getUnsignedMin ().getZExtValue ();
20692069 return std::nullopt ;
20702070}
0 commit comments