diff --git a/llvm/include/llvm/Analysis/InlineFeaturesAnalysis.h b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h similarity index 80% rename from llvm/include/llvm/Analysis/InlineFeaturesAnalysis.h rename to llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h index cc3f96c424e9ca..0163e69ac9dd46 100644 --- a/llvm/include/llvm/Analysis/InlineFeaturesAnalysis.h +++ b/llvm/include/llvm/Analysis/FunctionPropertiesAnalysis.h @@ -1,4 +1,4 @@ -//===- InlineFeaturesAnalysis.h - ML Policy Feature extraction -*- C++ -*-===// +//=- FunctionPropertiesAnalysis.h - Function Properties extraction -*- C++ -=// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,16 +6,16 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_INLINEFEATURESANALYSIS_H_ -#define LLVM_INLINEFEATURESANALYSIS_H_ +#ifndef LLVM_FUNCTIONPROPERTIESANALYSIS_H_ +#define LLVM_FUNCTIONPROPERTIESANALYSIS_H_ #include "llvm/IR/PassManager.h" namespace llvm { class Function; -class InlineFeaturesAnalysis - : public AnalysisInfoMixin { +class FunctionPropertiesAnalysis + : public AnalysisInfoMixin { public: static AnalysisKey Key; struct Result { @@ -42,4 +42,4 @@ class InlineFeaturesAnalysis }; } // namespace llvm -#endif // LLVM_INLINEFEATURESANALYSIS_H_ \ No newline at end of file +#endif // LLVM_FUNCTIONPROPERTIESANALYSIS_H_ \ No newline at end of file diff --git a/llvm/lib/Analysis/CMakeLists.txt b/llvm/lib/Analysis/CMakeLists.txt index 4d7eeaf910eb33..8bb37697a6aff9 100644 --- a/llvm/lib/Analysis/CMakeLists.txt +++ b/llvm/lib/Analysis/CMakeLists.txt @@ -49,6 +49,7 @@ add_llvm_component_library(LLVMAnalysis DomTreeUpdater.cpp DominanceFrontier.cpp EHPersonalities.cpp + FunctionPropertiesAnalysis.cpp GlobalsModRef.cpp GuardUtils.cpp HeatUtils.cpp @@ -57,7 +58,6 @@ add_llvm_component_library(LLVMAnalysis IndirectCallPromotionAnalysis.cpp InlineCost.cpp InlineAdvisor.cpp - InlineFeaturesAnalysis.cpp InlineSizeEstimatorAnalysis.cpp InstCount.cpp InstructionPrecedenceTracking.cpp diff --git a/llvm/lib/Analysis/InlineFeaturesAnalysis.cpp b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp similarity index 80% rename from llvm/lib/Analysis/InlineFeaturesAnalysis.cpp rename to llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp index 90f521bbaab48c..a0fc017568f2d6 100644 --- a/llvm/lib/Analysis/InlineFeaturesAnalysis.cpp +++ b/llvm/lib/Analysis/FunctionPropertiesAnalysis.cpp @@ -1,4 +1,4 @@ -//===- InlineFeaturesAnalysis.cpp - Feature extraction for ML Policies ----===// +//===- FunctionPropertiesAnalysis.cpp - Function properties extraction ----===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -11,15 +11,16 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Analysis/InlineFeaturesAnalysis.h" +#include "llvm/Analysis/FunctionPropertiesAnalysis.h" #include "llvm/IR/Instructions.h" using namespace llvm; -AnalysisKey InlineFeaturesAnalysis::Key; +AnalysisKey FunctionPropertiesAnalysis::Key; -InlineFeaturesAnalysis::Result -InlineFeaturesAnalysis::run(const Function &F, FunctionAnalysisManager &FAM) { +FunctionPropertiesAnalysis::Result +FunctionPropertiesAnalysis::run(const Function &F, + FunctionAnalysisManager &FAM) { Result Ret; Ret.Uses = ((!F.hasLocalLinkage()) ? 1 : 0) + F.getNumUses(); for (const auto &BB : F) { diff --git a/llvm/lib/Analysis/MLInlineAdvisor.cpp b/llvm/lib/Analysis/MLInlineAdvisor.cpp index 31cb43baf9a5ac..e697af97eb0782 100644 --- a/llvm/lib/Analysis/MLInlineAdvisor.cpp +++ b/llvm/lib/Analysis/MLInlineAdvisor.cpp @@ -20,8 +20,8 @@ #include "llvm/ADT/SCCIterator.h" #include "llvm/Analysis/CallGraph.h" +#include "llvm/Analysis/FunctionPropertiesAnalysis.h" #include "llvm/Analysis/InlineCost.h" -#include "llvm/Analysis/InlineFeaturesAnalysis.h" #include "llvm/Analysis/MLInlineAdvisor.h" #include "llvm/Analysis/MLModelRunner.h" #include "llvm/Analysis/OptimizationRemarkEmitter.h" @@ -118,7 +118,8 @@ void MLInlineAdvisor::onPassEntry() { } int64_t MLInlineAdvisor::getLocalCalls(Function &F) { - return FAM.getResult(F).DirectCallsToDefinedFunctions; + return FAM.getResult(F) + .DirectCallsToDefinedFunctions; } // Update the internal state of the advisor, and force invalidate feature @@ -133,7 +134,7 @@ void MLInlineAdvisor::onSuccessfulInlining(const MLInlineAdvice &Advice, Function *Callee = Advice.getCallee(); // The caller features aren't valid anymore. - FAM.invalidate(*Caller); + FAM.invalidate(*Caller); int64_t IRSizeAfter = getIRSize(*Caller) + (CalleeWasDeleted ? 0 : Advice.CalleeIRSize); CurrentIRSize += IRSizeAfter - (Advice.CallerIRSize + Advice.CalleeIRSize); @@ -146,14 +147,15 @@ void MLInlineAdvisor::onSuccessfulInlining(const MLInlineAdvice &Advice, // For edges, we 'forget' the edges that the caller and callee used to have // before inlining, and add back what they currently have together. int64_t NewCallerAndCalleeEdges = - FAM.getResult(*Caller) + FAM.getResult(*Caller) .DirectCallsToDefinedFunctions; if (CalleeWasDeleted) --NodeCount; else - NewCallerAndCalleeEdges += FAM.getResult(*Callee) - .DirectCallsToDefinedFunctions; + NewCallerAndCalleeEdges += + FAM.getResult(*Callee) + .DirectCallsToDefinedFunctions; EdgeCount += (NewCallerAndCalleeEdges - Advice.CallerAndCalleeEdges); assert(CurrentIRSize >= 0 && EdgeCount >= 0 && NodeCount >= 0); } @@ -224,8 +226,8 @@ std::unique_ptr MLInlineAdvisor::getAdvice(CallBase &CB) { NrCtantParams += (isa(*I)); } - auto &CallerBefore = FAM.getResult(Caller); - auto &CalleeBefore = FAM.getResult(Callee); + auto &CallerBefore = FAM.getResult(Caller); + auto &CalleeBefore = FAM.getResult(Callee); ModelRunner->setFeature(FeatureIndex::CalleeBasicBlockCount, CalleeBefore.BasicBlockCount); diff --git a/llvm/lib/Passes/PassBuilder.cpp b/llvm/lib/Passes/PassBuilder.cpp index b534853a121374..771675d35fdf2e 100644 --- a/llvm/lib/Passes/PassBuilder.cpp +++ b/llvm/lib/Passes/PassBuilder.cpp @@ -31,10 +31,10 @@ #include "llvm/Analysis/DemandedBits.h" #include "llvm/Analysis/DependenceAnalysis.h" #include "llvm/Analysis/DominanceFrontier.h" +#include "llvm/Analysis/FunctionPropertiesAnalysis.h" #include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/IVUsers.h" #include "llvm/Analysis/InlineAdvisor.h" -#include "llvm/Analysis/InlineFeaturesAnalysis.h" #include "llvm/Analysis/InlineSizeEstimatorAnalysis.h" #include "llvm/Analysis/LazyCallGraph.h" #include "llvm/Analysis/LazyValueInfo.h" diff --git a/llvm/lib/Passes/PassRegistry.def b/llvm/lib/Passes/PassRegistry.def index ad20d02436daeb..f323d37ca46adf 100644 --- a/llvm/lib/Passes/PassRegistry.def +++ b/llvm/lib/Passes/PassRegistry.def @@ -132,7 +132,7 @@ FUNCTION_ANALYSIS("domfrontier", DominanceFrontierAnalysis()) FUNCTION_ANALYSIS("loops", LoopAnalysis()) FUNCTION_ANALYSIS("lazy-value-info", LazyValueAnalysis()) FUNCTION_ANALYSIS("da", DependenceAnalysis()) -FUNCTION_ANALYSIS("inliner-features", InlineFeaturesAnalysis()) +FUNCTION_ANALYSIS("func-properties", FunctionPropertiesAnalysis()) FUNCTION_ANALYSIS("inliner-size-estimator", InlineSizeEstimatorAnalysis()) FUNCTION_ANALYSIS("memdep", MemoryDependenceAnalysis()) FUNCTION_ANALYSIS("memoryssa", MemorySSAAnalysis()) diff --git a/llvm/unittests/Analysis/CMakeLists.txt b/llvm/unittests/Analysis/CMakeLists.txt index b1b396a897ca80..eb97f6289b67ab 100644 --- a/llvm/unittests/Analysis/CMakeLists.txt +++ b/llvm/unittests/Analysis/CMakeLists.txt @@ -27,7 +27,7 @@ add_llvm_unittest_with_input_files(AnalysisTests DivergenceAnalysisTest.cpp DomTreeUpdaterTest.cpp GlobalsModRefTest.cpp - InlineFeaturesAnalysisTest.cpp + FunctionPropertiesAnalysisTest.cpp IVDescriptorsTest.cpp LazyCallGraphTest.cpp LoadsTest.cpp diff --git a/llvm/unittests/Analysis/InlineFeaturesAnalysisTest.cpp b/llvm/unittests/Analysis/FunctionPropertiesAnalysisTest.cpp similarity index 90% rename from llvm/unittests/Analysis/InlineFeaturesAnalysisTest.cpp rename to llvm/unittests/Analysis/FunctionPropertiesAnalysisTest.cpp index a3df767b76507f..399c6dd4f7de01 100644 --- a/llvm/unittests/Analysis/InlineFeaturesAnalysisTest.cpp +++ b/llvm/unittests/Analysis/FunctionPropertiesAnalysisTest.cpp @@ -1,4 +1,4 @@ -//===- InlineFeaturesAnalysisTest.cpp - inline features unit tests --------===// +//===- FunctionPropertiesAnalysisTest.cpp - function properties unit tests-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -#include "llvm/Analysis/InlineFeaturesAnalysis.h" +#include "llvm/Analysis/FunctionPropertiesAnalysis.h" #include "llvm/AsmParser/Parser.h" #include "llvm/IR/Instructions.h" #include "llvm/IR/LLVMContext.h" @@ -24,7 +24,7 @@ static std::unique_ptr parseIR(LLVMContext &C, const char *IR) { return Mod; } -TEST(InlineFeaturesTest, BasicTest) { +TEST(FunctionPropertiesTest, BasicTest) { LLVMContext C; std::unique_ptr M = parseIR(C, R"IR( @@ -59,7 +59,7 @@ define internal i32 @top() { )IR"); FunctionAnalysisManager FAM; - InlineFeaturesAnalysis FA; + FunctionPropertiesAnalysis FA; auto BranchesFeatures = FA.run(*M->getFunction("branches"), FAM); EXPECT_EQ(BranchesFeatures.BasicBlockCount, 4);