[llvm-commits] [llvm] r169049 - /llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp

Eric Christopher echristo at gmail.com
Fri Nov 30 14:52:05 PST 2012


Hi Pedro,

Looking much better. How about some comments now?

-eric


On Fri, Nov 30, 2012 at 2:47 PM, Pedro Artigas <partigas at apple.com> wrote:

> Author: partigas
> Date: Fri Nov 30 16:47:15 2012
> New Revision: 169049
>
> URL: http://llvm.org/viewvc/llvm-project?rev=169049&view=rev
> Log:
>
> reversed the logic of the log2 detection routine to reduce the number of
> nested ifs
>
>
> Modified:
>     llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp?rev=169049&r1=169048&r2=169049&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineMulDivRem.cpp Fri Nov
> 30 16:47:15 2012
> @@ -261,31 +261,35 @@
>  //
>
>  static void detectLog2OfHalf(Value *&Op, Value *&Y, IntrinsicInst *&Log2)
> {
> -   if (Op->hasOneUse()) {
> -    if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op)) {
> -      if (II->getIntrinsicID() == Intrinsic::log2 &&
> -          II->hasUnsafeAlgebra()) {
> -        Log2 = II;
> -        Value *OpLog2Of = II->getArgOperand(0);
> -        if (OpLog2Of->hasOneUse()) {
> -          if (Instruction *I = dyn_cast<Instruction>(OpLog2Of)) {
> -            if (I->getOpcode() == Instruction::FMul &&
> -                I->hasUnsafeAlgebra()) {
> -              ConstantFP *CFP = dyn_cast<ConstantFP>(I->getOperand(0));
> -              if (CFP && CFP->isExactlyValue(0.5)) {
> -                Y = I->getOperand(1);
> -              } else {
> -                CFP = dyn_cast<ConstantFP>(I->getOperand(1));
> -                if (CFP && CFP->isExactlyValue(0.5)) {
> -                  Y = I->getOperand(0);
> -                }
> -              }
> -            }
> -          }
> -        }
> -      }
> -    }
> -  }
> +
> +   if (!Op->hasOneUse())
> +     return;
> +
> +   IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op);
> +   if (!II)
> +     return;
> +   if (II->getIntrinsicID() != Intrinsic::log2 || !II->hasUnsafeAlgebra())
> +     return;
> +   Log2 = II;
> +
> +   Value *OpLog2Of = II->getArgOperand(0);
> +   if (!OpLog2Of->hasOneUse())
> +     return;
> +
> +   Instruction *I = dyn_cast<Instruction>(OpLog2Of);
> +   if (!I)
> +     return;
> +   if (I->getOpcode() != Instruction::FMul || !I->hasUnsafeAlgebra())
> +     return;
> +
> +   ConstantFP *CFP = dyn_cast<ConstantFP>(I->getOperand(0));
> +   if (CFP && CFP->isExactlyValue(0.5)) {
> +     Y = I->getOperand(1);
> +     return;
> +   }
> +   CFP = dyn_cast<ConstantFP>(I->getOperand(1));
> +   if (CFP && CFP->isExactlyValue(0.5))
> +     Y = I->getOperand(0);
>  }
>
>  Instruction *InstCombiner::visitFMul(BinaryOperator &I) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121130/31085ec3/attachment.html>


More information about the llvm-commits mailing list