X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAnalysis%2FInlineCost.h;h=79ed74d8241110976b6289d97676aff6dd5137a4;hb=00552e3875ee5f382db6c98286a241a7d0efe1b8;hp=dfdfe3e4f8e8b9edef698c291376934d9f2e7ae3;hpb=78e1cdaba3cad6e85ff631542052bbb718c7e588;p=oota-llvm.git diff --git a/include/llvm/Analysis/InlineCost.h b/include/llvm/Analysis/InlineCost.h index dfdfe3e4f8e..79ed74d8241 100644 --- a/include/llvm/Analysis/InlineCost.h +++ b/include/llvm/Analysis/InlineCost.h @@ -14,14 +14,16 @@ #ifndef LLVM_ANALYSIS_INLINECOST_H #define LLVM_ANALYSIS_INLINECOST_H -#include "llvm/Analysis/CodeMetrics.h" +#include "llvm/Analysis/CallGraphSCCPass.h" #include #include namespace llvm { +class AssumptionCacheTracker; class CallSite; class DataLayout; class Function; +class TargetTransformInfoWrapperPass; namespace InlineConstants { // Various magic constants used to adjust heuristics. @@ -75,7 +77,7 @@ public: } /// \brief Test whether the inline cost is low enough for inlining. - operator bool() const { + explicit operator bool() const { return Cost < Threshold; } @@ -97,14 +99,19 @@ public: }; /// \brief Cost analyzer used by inliner. -class InlineCostAnalyzer { - // DataLayout if available, or null. - const DataLayout *TD; +class InlineCostAnalysis : public CallGraphSCCPass { + TargetTransformInfoWrapperPass *TTIWP; + AssumptionCacheTracker *ACT; public: - InlineCostAnalyzer() : TD(0) {} + static char ID; - void setDataLayout(const DataLayout *TData) { TD = TData; } + InlineCostAnalysis(); + ~InlineCostAnalysis() override; + + // Pass interface implementation. + void getAnalysisUsage(AnalysisUsage &AU) const override; + bool runOnSCC(CallGraphSCC &SCC) override; /// \brief Get an InlineCost object representing the cost of inlining this /// callsite. @@ -113,6 +120,9 @@ public: /// threshold are computed with any accuracy. The threshold can be used to /// bound the computation necessary to determine whether the cost is /// sufficiently low to warrant inlining. + /// + /// Also note that calling this function *dynamically* computes the cost of + /// inlining the callsite. It is an expensive, heavyweight call. InlineCost getInlineCost(CallSite CS, int Threshold); /// \brief Get an InlineCost with the callee explicitly specified.