Fix a bug in the ComputeMaskedBits logic for multiply.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50793 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2008-05-07 00:35:55 +00:00
parent 69cedcbcec
commit 42ac929ed9
3 changed files with 14 additions and 4 deletions

View File

@ -1244,8 +1244,8 @@ void SelectionDAG::ComputeMaskedBits(SDOperand Op, const APInt &Mask,
unsigned TrailZ = KnownZero.countTrailingOnes() +
KnownZero2.countTrailingOnes();
unsigned LeadZ = std::max(KnownZero.countLeadingOnes() +
KnownZero2.countLeadingOnes() +
1, BitWidth) - BitWidth;
KnownZero2.countLeadingOnes(),
BitWidth) - BitWidth;
TrailZ = std::min(TrailZ, BitWidth);
LeadZ = std::min(LeadZ, BitWidth);

View File

@ -767,8 +767,8 @@ void InstCombiner::ComputeMaskedBits(Value *V, const APInt &Mask,
unsigned TrailZ = KnownZero.countTrailingOnes() +
KnownZero2.countTrailingOnes();
unsigned LeadZ = std::max(KnownZero.countLeadingOnes() +
KnownZero2.countLeadingOnes() +
1, BitWidth) - BitWidth;
KnownZero2.countLeadingOnes(),
BitWidth) - BitWidth;
TrailZ = std::min(TrailZ, BitWidth);
LeadZ = std::min(LeadZ, BitWidth);

View File

@ -0,0 +1,10 @@
; RUN: llvm-as < %s | opt -instcombine | llvm-dis | grep ashr
define i32 @foo(i32 %x, i32 %y) {
%a = and i32 %x, 7
%b = and i32 %y, 7
%c = mul i32 %a, %b
%d = shl i32 %c, 26
%e = ashr i32 %d, 26
ret i32 %e
}