diff options
| -rw-r--r-- | llvm/lib/CodeGen/TargetPassConfig.cpp | 15 | ||||
| -rw-r--r-- | llvm/test/CodeGen/AArch64/machine-outliner-flags.ll | 12 |
2 files changed, 23 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index 044dcf7c749..dfdf676e40f 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -111,9 +111,16 @@ static cl::opt<bool> VerifyMachineCode("verify-machineinstrs", cl::Hidden, cl::desc("Verify generated machine code"), cl::init(false), cl::ZeroOrMore); -static cl::opt<bool> EnableMachineOutliner("enable-machine-outliner", - cl::Hidden, - cl::desc("Enable machine outliner")); +enum RunOutliner { AlwaysOutline, NeverOutline }; +// Enable or disable the MachineOutliner. +static cl::opt<RunOutliner> EnableMachineOutliner( + "enable-machine-outliner", cl::desc("Enable the machine outliner"), + cl::Hidden, cl::ValueOptional, cl::init(NeverOutline), + cl::values(clEnumValN(AlwaysOutline, "always", + "Run on all functions guaranteed to be beneficial"), + clEnumValN(NeverOutline, "never", "Disable all outlining"), + // Sentinel value for unspecified option. + clEnumValN(AlwaysOutline, "", ""))); // Enable or disable FastISel. Both options are needed, because // FastISel is enabled by default with -fast, and we wish to be // able to enable or disable fast-isel independently from -O0. @@ -907,7 +914,7 @@ void TargetPassConfig::addMachinePasses() { addPass(&PatchableFunctionID, false); if (TM->Options.EnableMachineOutliner && getOptLevel() != CodeGenOpt::None && - EnableMachineOutliner) + EnableMachineOutliner == AlwaysOutline) addPass(createMachineOutlinerPass()); // Add passes that directly emit MI after all other MI passes. diff --git a/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll b/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll index 33180ddb384..5f59c1060ac 100644 --- a/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll +++ b/llvm/test/CodeGen/AArch64/machine-outliner-flags.ll @@ -1,8 +1,16 @@ ; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \ +; RUN: -enable-machine-outliner=always -mtriple arm64---- -o /dev/null 2>&1 \ +; RUN: | FileCheck %s -check-prefix=ALWAYS + +; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \ ; RUN: -enable-machine-outliner -mtriple arm64---- -o /dev/null 2>&1 \ ; RUN: | FileCheck %s -check-prefix=ENABLE ; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \ +; RUN: -enable-machine-outliner=never -mtriple arm64---- -o /dev/null 2>&1 \ +; RUN: | FileCheck %s -check-prefix=NEVER + +; RUN: llc %s -debug-pass=Structure -verify-machineinstrs \ ; RUN: -mtriple arm64---- -o /dev/null 2>&1 \ ; RUN: | FileCheck %s -check-prefix=NOT-ADDED @@ -15,12 +23,16 @@ ; ; Cases where it should be added: ; * -enable-machine-outliner +; * -enable-machine-outliner=always ; ; Cases where it should not be added: ; * -O0 or equivalent ; * -enable-machine-outliner is not passed +; * -enable-machine-outliner=never is passed +; ALWAYS: Machine Outliner ; ENABLE: Machine Outliner +; NEVER-NOT: Machine Outliner ; NOT-ADDED-NOT: Machine Outliner ; OPTNONE-NOT: Machine Outliner |

