mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
Revert rGbbeb08497ce58 "Revert "[GlobalISel] GISelKnownBits::computeKnownBitsImpl - Replace TargetOpcode::G_MUL handling with the common KnownBits::computeForMul implementation""
Updated the GISel KnownBits tests as KnownBits::computeForMul allows more accurate computation.
This commit is contained in:
parent
2730f84bd0
commit
983601ea81
@ -287,20 +287,7 @@ void GISelKnownBits::computeKnownBitsImpl(Register R, KnownBits &Known,
|
||||
Depth + 1);
|
||||
computeKnownBitsImpl(MI.getOperand(1).getReg(), Known2, DemandedElts,
|
||||
Depth + 1);
|
||||
// If low bits are zero in either operand, output low known-0 bits.
|
||||
// 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));
|
||||
Known = KnownBits::computeForMul(Known, Known2);
|
||||
break;
|
||||
}
|
||||
case TargetOpcode::G_SELECT: {
|
||||
|
@ -300,8 +300,8 @@ TEST_F(AArch64GISelMITest, TestKnownBits) {
|
||||
GISelKnownBits Info(*MF);
|
||||
KnownBits Known = Info.getKnownBits(SrcReg);
|
||||
EXPECT_FALSE(Known.hasConflict());
|
||||
EXPECT_EQ(0u, Known.One.getZExtValue());
|
||||
EXPECT_EQ(31u, Known.Zero.getZExtValue());
|
||||
EXPECT_EQ(32u, Known.One.getZExtValue());
|
||||
EXPECT_EQ(95u, Known.Zero.getZExtValue());
|
||||
APInt Zeroes = Info.getKnownZeroes(SrcReg);
|
||||
EXPECT_EQ(Known.Zero, Zeroes);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user