[llvm-commits] [llvm] r53167 - /llvm/trunk/lib/Analysis/ScalarEvolution.cpp
Chris Lattner
clattner at apple.com
Mon Jul 7 13:14:23 PDT 2008
On Jul 6, 2008, at 11:15 PM, Nick Lewycky wrote:
> Author: nicholas
> Date: Mon Jul 7 01:15:49 2008
> New Revision: 53167
>
> URL: http://llvm.org/viewvc/llvm-project?rev=53167&view=rev
> Log:
> Handle 'lshr' instruction with SCEVUDiv object.
> Comment the xor %x, -1 case.
Does the scev expander currently handle these cases?
-Chris
>
>
> Modified:
> llvm/trunk/lib/Analysis/ScalarEvolution.cpp
>
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=53167&r1=53166&r2=53167&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Mon Jul 7 01:15:49
> 2008
> @@ -1742,12 +1742,14 @@
> }
> break;
> case Instruction::Xor:
> - // If the RHS of the xor is a signbit, then this is just an add.
> - // Instcombine turns add of signbit into xor as a strength
> reduction step.
> if (ConstantInt *CI = dyn_cast<ConstantInt>(U->getOperand(1))) {
> + // If the RHS of the xor is a signbit, then this is just an
> add.
> + // Instcombine turns add of signbit into xor as a strength
> reduction step.
> if (CI->getValue().isSignBit())
> return SE.getAddExpr(getSCEV(U->getOperand(0)),
> getSCEV(U->getOperand(1)));
> +
> + // If the RHS of xor is -1, then this is a not operation.
> else if (CI->isAllOnesValue())
> return SE.getNotSCEV(getSCEV(U->getOperand(0)));
> }
> @@ -1763,6 +1765,16 @@
> }
> break;
>
> + case Instruction::LShr:
> + // Turn logical shift right of a constant into a unsigned divide.
> + if (ConstantInt *SA = dyn_cast<ConstantInt>(U->getOperand(1))) {
> + uint32_t BitWidth = cast<IntegerType>(V->getType())-
> >getBitWidth();
> + Constant *X = ConstantInt::get(
> + APInt(BitWidth, 1).shl(SA->getLimitedValue(BitWidth)));
> + return SE.getUDivExpr(getSCEV(U->getOperand(0)), getSCEV(X));
> + }
> + break;
> +
> case Instruction::Trunc:
> return SE.getTruncateExpr(getSCEV(U->getOperand(0)), U-
> >getType());
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list