Skip to content

Commit

Permalink
Revert "[InlineOrder] Plugin Inline Order"
Browse files Browse the repository at this point in the history
This commit is causing a CMake error on AIX. Will recommit with
a fix.

This reverts commit e46d8a7.
  • Loading branch information
jakeegan committed Mar 15, 2023
1 parent 2e7f339 commit 1628a56
Show file tree
Hide file tree
Showing 8 changed files with 8 additions and 422 deletions.
47 changes: 1 addition & 46 deletions llvm/include/llvm/Analysis/InlineOrder.h
Expand Up @@ -32,52 +32,7 @@ template <typename T> class InlineOrder {
};

std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>>
getDefaultInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params,
ModuleAnalysisManager &MAM, Module &M);

std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>>
getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params,
ModuleAnalysisManager &MAM, Module &M);

/// Used for dynamically loading instances of InlineOrder as plugins
///
/// Plugins must implement an InlineOrderFactory, for an example refer to:
/// llvm/unittests/Analysis/InlineOrderPlugin/InlineOrderPlugin.cpp
///
/// If a PluginInlineOrderAnalysis has been registered with the
/// current ModuleAnalysisManager, llvm::getInlineOrder returns an
/// InlineOrder created by the PluginInlineOrderAnalysis' Factory.
///
class PluginInlineOrderAnalysis
: public AnalysisInfoMixin<PluginInlineOrderAnalysis> {
public:
static AnalysisKey Key;

typedef std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>> (
*InlineOrderFactory)(FunctionAnalysisManager &FAM,
const InlineParams &Params,
ModuleAnalysisManager &MAM, Module &M);

PluginInlineOrderAnalysis(InlineOrderFactory Factory) : Factory(Factory) {
HasBeenRegistered = true;
assert(Factory != nullptr &&
"The plugin inline order factory should not be a null pointer.");
}

struct Result {
InlineOrderFactory Factory;
};

Result run(Module &, ModuleAnalysisManager &) { return {Factory}; }
Result getResult() { return {Factory}; }

static bool isRegistered() { return HasBeenRegistered; }
static void unregister() { HasBeenRegistered = false; }

private:
static bool HasBeenRegistered;
InlineOrderFactory Factory;
};
getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params);

} // namespace llvm
#endif // LLVM_ANALYSIS_INLINEORDER_H
27 changes: 6 additions & 21 deletions llvm/lib/Analysis/InlineOrder.cpp
Expand Up @@ -33,7 +33,8 @@ static cl::opt<InlinePriorityMode> UseInlinePriority(
"Use inline cost priority."),
clEnumValN(InlinePriorityMode::CostBenefit, "cost-benefit",
"Use cost-benefit ratio."),
clEnumValN(InlinePriorityMode::ML, "ml", "Use ML.")));
clEnumValN(InlinePriorityMode::ML, "ml",
"Use ML.")));

static cl::opt<int> ModuleInlinerTopPriorityThreshold(
"moudle-inliner-top-priority-threshold", cl::Hidden, cl::init(0),
Expand Down Expand Up @@ -280,13 +281,8 @@ class PriorityInlineOrder : public InlineOrder<std::pair<CallBase *, int>> {

} // namespace

AnalysisKey llvm::PluginInlineOrderAnalysis::Key;
bool llvm::PluginInlineOrderAnalysis::HasBeenRegistered;

std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>>
llvm::getDefaultInlineOrder(FunctionAnalysisManager &FAM,
const InlineParams &Params,
ModuleAnalysisManager &MAM, Module &M) {
llvm::getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params) {
switch (UseInlinePriority) {
case InlinePriorityMode::Size:
LLVM_DEBUG(dbgs() << " Current used priority: Size priority ---- \n");
Expand All @@ -299,22 +295,11 @@ llvm::getDefaultInlineOrder(FunctionAnalysisManager &FAM,
case InlinePriorityMode::CostBenefit:
LLVM_DEBUG(
dbgs() << " Current used priority: cost-benefit priority ---- \n");
return std::make_unique<PriorityInlineOrder<CostBenefitPriority>>(FAM,
Params);
return std::make_unique<PriorityInlineOrder<CostBenefitPriority>>(FAM, Params);
case InlinePriorityMode::ML:
LLVM_DEBUG(dbgs() << " Current used priority: ML priority ---- \n");
LLVM_DEBUG(
dbgs() << " Current used priority: ML priority ---- \n");
return std::make_unique<PriorityInlineOrder<MLPriority>>(FAM, Params);
}
return nullptr;
}

std::unique_ptr<InlineOrder<std::pair<CallBase *, int>>>
llvm::getInlineOrder(FunctionAnalysisManager &FAM, const InlineParams &Params,
ModuleAnalysisManager &MAM, Module &M) {
if (llvm::PluginInlineOrderAnalysis::isRegistered()) {
LLVM_DEBUG(dbgs() << " Current used priority: plugin ---- \n");
return MAM.getResult<PluginInlineOrderAnalysis>(M).Factory(FAM, Params, MAM,
M);
}
return getDefaultInlineOrder(FAM, Params, MAM, M);
}
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/IPO/ModuleInliner.cpp
Expand Up @@ -138,7 +138,7 @@ PreservedAnalyses ModuleInlinerPass::run(Module &M,
//
// TODO: Here is a huge amount duplicate code between the module inliner and
// the SCC inliner, which need some refactoring.
auto Calls = getInlineOrder(FAM, Params, MAM, M);
auto Calls = getInlineOrder(FAM, Params);
assert(Calls != nullptr && "Expected an initialized InlineOrder");

// Populate the initial list of calls in this module.
Expand Down
2 changes: 0 additions & 2 deletions llvm/unittests/Analysis/CMakeLists.txt
Expand Up @@ -39,7 +39,6 @@ set(ANALYSIS_TEST_SOURCES
MLModelRunnerTest.cpp
PhiValuesTest.cpp
PluginInlineAdvisorAnalysisTest.cpp
PluginInlineOrderAnalysisTest.cpp
ProfileSummaryInfoTest.cpp
ScalarEvolutionTest.cpp
VectorFunctionABITest.cpp
Expand Down Expand Up @@ -74,4 +73,3 @@ if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
endif()

add_subdirectory(InlineAdvisorPlugin)
add_subdirectory(InlineOrderPlugin)
21 changes: 0 additions & 21 deletions llvm/unittests/Analysis/InlineOrderPlugin/CMakeLists.txt

This file was deleted.

70 changes: 0 additions & 70 deletions llvm/unittests/Analysis/InlineOrderPlugin/InlineOrderPlugin.cpp

This file was deleted.

10 changes: 0 additions & 10 deletions llvm/unittests/Analysis/PluginInlineAdvisorAnalysisTest.cpp
Expand Up @@ -10,8 +10,6 @@

namespace llvm {

namespace {

void anchor() {}

static std::string libPath(const std::string Name = "InlineAdvisorPlugin") {
Expand Down Expand Up @@ -86,12 +84,6 @@ struct CompilerInstance {
ThinOrFullLTOPhase::None));
}

~CompilerInstance() {
// Reset the static variable that tracks if the plugin has been registered.
// This is needed to allow the test to run multiple times.
PluginInlineAdvisorAnalysis::HasBeenRegistered = false;
}

std::string output;
std::unique_ptr<Module> outputM;

Expand Down Expand Up @@ -264,8 +256,6 @@ define i32 @fib_check(){
}
)"};

} // namespace

// check that loading a plugin works
// the plugin being loaded acts identically to the default inliner
TEST(PluginInlineAdvisorTest, PluginLoad) {
Expand Down

0 comments on commit 1628a56

Please sign in to comment.