[LLVMbugs] [Bug 953] A bug + a fix in InstructionCombining
bugzilla-daemon at cs.uiuc.edu
bugzilla-daemon at cs.uiuc.edu
Wed Oct 18 10:40:28 PDT 2006
http://llvm.org/bugs/show_bug.cgi?id=953
sabre at nondot.org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |DUPLICATE
------- Additional Comments From sabre at nondot.org 2006-10-18 12:40 -------
Thank you for the bug report! This bug has already been fixed in mainline CVS. The code currently
looks like:
const Type *SrcTy = I->getOperand(0)->getType();
if (!SrcTy->isIntegral()) return false;
// If this is an integer truncate or noop, just look in the input.
if (SrcTy->getPrimitiveSizeInBits() >=
I->getType()->getPrimitiveSizeInBits()) {
// Cast to bool is a comparison against 0, which demands all bits. We
// can't propagate anything useful up.
if (I->getType() == Type::BoolTy)
break;
if (SimplifyDemandedBits(I->getOperand(0), DemandedMask,
KnownZero, KnownOne, Depth+1))
return true;
assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
break;
}
Your example now compiles into:
int %t(int %a, int %b) {
entry:
%tmp1 = and int %a, 1 ; <int> [#uses=1]
%tmp1 = setne int %tmp1, 0 ; <bool> [#uses=1]
%tmp = setne int %b, 0 ; <bool> [#uses=1]
%tmp3 = xor bool %tmp1, %tmp ; <bool> [#uses=1]
%tmp3 = cast bool %tmp3 to int ; <int> [#uses=1]
ret int %tmp3
}
While this happened to already be fixed, we welcome any bug reports for things you run into in the
future.
-Chris
-Chris
*** This bug has been marked as a duplicate of 913 ***
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.
More information about the llvm-bugs
mailing list