[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