diff options
author | Jessica Paquette <jpaquette@apple.com> | 2018-06-30 03:56:03 +0000 |
---|---|---|
committer | Jessica Paquette <jpaquette@apple.com> | 2018-06-30 03:56:03 +0000 |
commit | 8bda1881cadcd8072fd06a4440e8ad57a8a329b3 (patch) | |
tree | b8502790ae79f86b05200596a95d325b4c11721b /llvm/lib/CodeGen/TargetPassConfig.cpp | |
parent | 345a22d0ba1c168823a71869dd603cec82b95ff3 (diff) | |
download | llvm-8bda1881cadcd8072fd06a4440e8ad57a8a329b3.zip llvm-8bda1881cadcd8072fd06a4440e8ad57a8a329b3.tar.gz llvm-8bda1881cadcd8072fd06a4440e8ad57a8a329b3.tar.bz2 |
[MachineOutliner] Add support for target-default outlining.
This adds functionality to the outliner that allows targets to
specify certain functions that should be outlined from by default.
If a target supports default outlining, then it specifies that in
its TargetOptions. In the case that it does, and the user hasn't
specified that they *never* want to outline, the outliner will
be added to the pass pipeline and will run on those default functions.
This is a preliminary patch for turning the outliner on by default
under -Oz for AArch64.
https://reviews.llvm.org/D48776
llvm-svn: 336040
Diffstat (limited to 'llvm/lib/CodeGen/TargetPassConfig.cpp')
-rw-r--r-- | llvm/lib/CodeGen/TargetPassConfig.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/TargetPassConfig.cpp b/llvm/lib/CodeGen/TargetPassConfig.cpp index dfdf676..3fca2f4 100644 --- a/llvm/lib/CodeGen/TargetPassConfig.cpp +++ b/llvm/lib/CodeGen/TargetPassConfig.cpp @@ -111,11 +111,11 @@ static cl::opt<bool> VerifyMachineCode("verify-machineinstrs", cl::Hidden, cl::desc("Verify generated machine code"), cl::init(false), cl::ZeroOrMore); -enum RunOutliner { AlwaysOutline, NeverOutline }; +enum RunOutliner { AlwaysOutline, NeverOutline, TargetDefault }; // 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::Hidden, cl::ValueOptional, cl::init(TargetDefault), cl::values(clEnumValN(AlwaysOutline, "always", "Run on all functions guaranteed to be beneficial"), clEnumValN(NeverOutline, "never", "Disable all outlining"), @@ -914,8 +914,13 @@ void TargetPassConfig::addMachinePasses() { addPass(&PatchableFunctionID, false); if (TM->Options.EnableMachineOutliner && getOptLevel() != CodeGenOpt::None && - EnableMachineOutliner == AlwaysOutline) - addPass(createMachineOutlinerPass()); + EnableMachineOutliner != NeverOutline) { + bool RunOnAllFunctions = (EnableMachineOutliner == AlwaysOutline); + bool AddOutliner = RunOnAllFunctions || + TM->Options.SupportsDefaultOutlining; + if (AddOutliner) + addPass(createMachineOutlinerPass(RunOnAllFunctions)); + } // Add passes that directly emit MI after all other MI passes. addPreEmitPass2(); |