[llvm-commits] [llvm] r94318 - in /llvm/trunk: lib/Target/README.txt lib/Transforms/InstCombine/InstCombineShifts.cpp test/Transforms/InstCombine/intrinsics.ll
Chris Lattner
sabre at nondot.org
Sat Jan 23 11:25:49 PST 2010
On Jan 23, 2010, at 10:55 AM, Eli Friedman wrote:
>> + if (ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1))
>> + if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op0)) {
>> + // ctlz.i32(x)>>5 --> zext(x == 0)
>> + // cttz.i32(x)>>5 --> zext(x == 0)
>> + // ctpop.i32(x)>>5 --> zext(x == -1)
>> + if ((II->getIntrinsicID() == Intrinsic::ctlz ||
>> + II->getIntrinsicID() == Intrinsic::cttz ||
>> + II->getIntrinsicID() == Intrinsic::ctpop) &&
>> + (1ULL << Op1C->getZExtValue()) ==
>> + Op0->getType()->getScalarSizeInBits()) {
>
> This shift isn't safe; the result is undefined if Op1C->getZExtValue() >= 64.
Thanks, will fix.
-Chris
More information about the llvm-commits
mailing list