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

Eric Christopher echristo at gmail.com
Fri Nov 30 15:02:48 PST 2012


Missed it up there just beyond the top of the diff and just saw a bunch of
text and no comments. :)

"detectLog2OfHalf" is a bit odd, but works I guess. No worries.

-eric


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

> Hello All,
>
> I believe the comments at the beginning of the function are descriptive
> enough, here are the comments copied for your convenience
>
> //
> // Detect pattern:
> //
> // log2(Y*0.5)
> //
> // And check for corresponding fast math flags
> //
>
> static void detectLog2OfHalf(Value *&Op, Value *&Y, IntrinsicInst *&Log2) {
>
> The name of the function is also a pseudo comment, do you feel like it is
> not enough? What is the problem?
>
> Thanks
>
> Pedro
>
>
> On Nov 30, 2012, at 2:52 PM, Eric Christopher <echristo at gmail.com> wrote:
>
> 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/d7059b0e/attachment.html>


More information about the llvm-commits mailing list