forked from OSchip/llvm-project
[GlobalISel] GISelKnownBits::computeKnownBitsImpl - Replace TargetOpcode::G_MUL handling with the common KnownBits::computeForMul implementation
Avoid code duplication
This commit is contained in:
parent
3ebcef4b73
commit
0b8711e1af
|
@ -287,20 +287,7 @@ void GISelKnownBits::computeKnownBitsImpl(Register R, KnownBits &Known,
|
||||||
Depth + 1);
|
Depth + 1);
|
||||||
computeKnownBitsImpl(MI.getOperand(1).getReg(), Known2, DemandedElts,
|
computeKnownBitsImpl(MI.getOperand(1).getReg(), Known2, DemandedElts,
|
||||||
Depth + 1);
|
Depth + 1);
|
||||||
// If low bits are zero in either operand, output low known-0 bits.
|
Known = KnownBits::computeForMul(Known, Known2);
|
||||||
// Also compute a conservative estimate for high known-0 bits.
|
|
||||||
// More trickiness is possible, but this is sufficient for the
|
|
||||||
// interesting case of alignment computation.
|
|
||||||
unsigned TrailZ =
|
|
||||||
Known.countMinTrailingZeros() + Known2.countMinTrailingZeros();
|
|
||||||
unsigned LeadZ =
|
|
||||||
std::max(Known.countMinLeadingZeros() + Known2.countMinLeadingZeros(),
|
|
||||||
BitWidth) -
|
|
||||||
BitWidth;
|
|
||||||
|
|
||||||
Known.resetAll();
|
|
||||||
Known.Zero.setLowBits(std::min(TrailZ, BitWidth));
|
|
||||||
Known.Zero.setHighBits(std::min(LeadZ, BitWidth));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TargetOpcode::G_SELECT: {
|
case TargetOpcode::G_SELECT: {
|
||||||
|
|
Loading…
Reference in New Issue