> Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
> diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.688  
> llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.689
> --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.688 Sun  
> Mar 25 00:33:51 2007
> +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp       Sun Mar 25  
> 14:55:33 2007
> @@ -540,9 +540,8 @@
>        if (I->getOpcode() == Instruction::Shl)
>          if ((CST = dyn_cast<ConstantInt>(I->getOperand(1)))) {
>            // The multiplier is really 1 << CST.
> -          APInt Multiplier(V->getType()->getPrimitiveSizeInBits(),  
> 0);
> -          Multiplier.set(CST->getZExtValue()); // set bit is == 1  
> << CST
> -          CST = ConstantInt::get(Multiplier);
> +          Constant *One = ConstantInt::get(V->getType(), 1);
> +          CST = cast<ConstantInt>(ConstantExpr::getShl(One, CST));

This is doing arithmetic with constant expr :(.  Why not something like:

ConstantInt::get(APInt(bitwidth, 1).shl(CST->getValue()))

or something?

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

Reply via email to