[llvm-commits] [llvm] r82660 - /llvm/trunk/lib/Transforms/Utils/InlineCost.cpp

Chris Lattner clattner at apple.com
Wed Sep 23 22:32:02 PDT 2009


On Sep 23, 2009, at 3:05 PM, Dale Johannesen wrote:

> Author: johannes
> Date: Wed Sep 23 17:05:24 2009
> New Revision: 82660
>
> URL: http://llvm.org/viewvc/llvm-project?rev=82660&view=rev
> Log:
> A minor improvment in accuracy to inline cost
> computation, and some cosmetics.

Am I missing something here?  It looks like you compute NumRets but  
don't use it for anything...

-Chris

>
>
> Modified:
>    llvm/trunk/lib/Transforms/Utils/InlineCost.cpp
>
> Modified: llvm/trunk/lib/Transforms/Utils/InlineCost.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/InlineCost.cpp?rev=82660&r1=82659&r2=82660&view=diff
>
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- llvm/trunk/lib/Transforms/Utils/InlineCost.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/InlineCost.cpp Wed Sep 23  
> 17:05:24 2009
> @@ -104,7 +104,7 @@
> /// analyzeFunction - Fill in the current structure with information  
> gleaned
> /// from the specified function.
> void InlineCostAnalyzer::FunctionInfo::analyzeFunction(Function *F) {
> -  unsigned NumInsts = 0, NumBlocks = 0, NumVectorInsts = 0;
> +  unsigned NumInsts = 0, NumBlocks = 0, NumVectorInsts = 0, NumRets  
> = 0;
>
>   // Look at the size of the callee.  Each basic block counts as 20  
> units, and
>   // each instruction counts as 5.
> @@ -157,6 +157,9 @@
>         if (GEPI->hasAllConstantIndices())
>           continue;
>       }
> +
> +      if (isa<ReturnInst>(II))
> +        ++NumRets;
>
>       ++NumInsts;
>     }
> @@ -164,6 +167,11 @@
>     ++NumBlocks;
>   }
>
> +  // A function with exactly one return has it removed during the  
> inlining
> +  // process (see InlineFunction), so don't count it.
> +  if (NumRets==1)
> +    --NumInsts;
> +
>   this->NumBlocks      = NumBlocks;
>   this->NumInsts       = NumInsts;
>   this->NumVectorInsts = NumVectorInsts;
> @@ -186,11 +194,10 @@
>   Function *Callee = CS.getCalledFunction();
>   Function *Caller = TheCall->getParent()->getParent();
>
> -      // Don't inline functions which can be redefined at link-time  
> to mean
> -      // something else.
> -   if (Callee->mayBeOverridden() ||
> -       // Don't inline functions marked noinline.
> -       Callee->hasFnAttr(Attribute::NoInline) || NeverInline.count 
> (Callee))
> +  // Don't inline functions which can be redefined at link-time to  
> mean
> +  // something else.  Don't inline functions marked noinline.
> +  if (Callee->mayBeOverridden() ||
> +      Callee->hasFnAttr(Attribute::NoInline) || NeverInline.count 
> (Callee))
>     return llvm::InlineCost::getNever();
>
>   // InlineCost - This value measures how good of an inline  
> candidate this call
> @@ -291,6 +298,7 @@
>   // likely to be inlined, look at factors that make us not want to  
> inline it.
>
>   // Don't inline into something too big, which would make it bigger.
> +  // "size" here is the number of basic blocks, not instructions.
>   //
>   InlineCost += Caller->size()/15;
>
>
>
> _______________________________________________
> 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