mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 00:27:31 +00:00
Fix a miscompilation from Dan's recent apintification.
llvm-svn: 47128
This commit is contained in:
parent
9deedb0114
commit
9c24f3ec37
@ -1437,12 +1437,10 @@ void SelectionDAG::ComputeMaskedBits(SDOperand Op, const APInt &Mask,
|
||||
// We know that the top bits of C-X are clear if X contains less bits
|
||||
// than C (i.e. no wrap-around can happen). For example, 20-X is
|
||||
// positive if we can prove that X is >= 0 and < 16.
|
||||
|
||||
// sign bit clear
|
||||
if (CLHS->getAPIntValue().isNonNegative()) {
|
||||
unsigned NLZ = (CLHS->getAPIntValue()+1).countLeadingZeros();
|
||||
// NLZ can't be BitWidth with no sign bit
|
||||
APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ);
|
||||
APInt MaskV = APInt::getHighBitsSet(BitWidth, NLZ+1);
|
||||
ComputeMaskedBits(Op.getOperand(1), MaskV, KnownZero, KnownOne, Depth+1);
|
||||
|
||||
// If all of the MaskV bits are known to be zero, then we know the output
|
||||
|
8
test/CodeGen/X86/2008-02-14-BitMiscompile.ll
Normal file
8
test/CodeGen/X86/2008-02-14-BitMiscompile.ll
Normal file
@ -0,0 +1,8 @@
|
||||
; RUN: llvm-as < %s | llc -march=x86 | grep and
|
||||
define i32 @test(i1 %A) {
|
||||
%B = zext i1 %A to i32 ; <i32> [#uses=1]
|
||||
%C = sub i32 0, %B ; <i32> [#uses=1]
|
||||
%D = and i32 %C, 255 ; <i32> [#uses=1]
|
||||
ret i32 %D
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user