On Mar 28, 2007, at 6:57 PM, Zhou Sheng wrote:

> @@ -540,8 +540,10 @@
>        if (I->getOpcode() == Instruction::Shl)
>          if ((CST = dyn_cast<ConstantInt>(I->getOperand(1)))) {
>            // The multiplier is really 1 << CST.
> -          Constant *One = ConstantInt::get(V->getType(), 1);
> -          CST = cast<ConstantInt>(ConstantExpr::getShl(One, CST));
> +          uint32_t BitWidth = cast<IntegerType>(V->getType())- 
> >getBitWidth();
> +          uint32_t CSTVal = CST->getValue().getActiveBits() > 64 ?
> +                              BitWidth : CST->getZExtValue();
> +          CST = ConstantInt::get(APInt(BitWidth, 1).shl(CSTVal));
>            return I->getOperand(0);
>          }
>      }

I don't understand the logic here for the >64 active bits case.  Is  
the idea that the operation is undefined anyway?

-Chris
_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to