diff options
author | Puyan Lotfi <puyan@puyan.org> | 2019-10-28 15:10:21 -0400 |
---|---|---|
committer | Puyan Lotfi <puyan@puyan.org> | 2019-10-28 15:13:45 -0400 |
commit | a51fc8ddf8800ed2f28d1e18b995e6c42f0bd3af (patch) | |
tree | 91c01ac40e731a867e89ed955bb88ca4de4cea68 /llvm/lib | |
parent | e3a45a24d1077e2afc917024032715afa70fb2ac (diff) | |
download | bcm5719-llvm-a51fc8ddf8800ed2f28d1e18b995e6c42f0bd3af.tar.gz bcm5719-llvm-a51fc8ddf8800ed2f28d1e18b995e6c42f0bd3af.zip |
[MachineOuliner][NFC] Refactoring code to make outline rerunning a cleaner diff.
I want to add the ability to rerun the outliner in certain cases, and I
thought this could be an NFC change that could make a subsequent change
that allows for rerunning the outliner a cleaner diff.
Differential Revision: https://reviews.llvm.org/D69482
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/MachineOutliner.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/MachineOutliner.cpp b/llvm/lib/CodeGen/MachineOutliner.cpp index 8cd66825a58..5c0197780fb 100644 --- a/llvm/lib/CodeGen/MachineOutliner.cpp +++ b/llvm/lib/CodeGen/MachineOutliner.cpp @@ -888,16 +888,20 @@ struct MachineOutliner : public ModulePass { /// \param FunctionList A list of functions to be inserted into the module. /// \param Mapper Contains the instruction mappings for the module. bool outline(Module &M, std::vector<OutlinedFunction> &FunctionList, - InstructionMapper &Mapper); + InstructionMapper &Mapper, + unsigned &OutlinedFunctionNum); /// Creates a function for \p OF and inserts it into the module. MachineFunction *createOutlinedFunction(Module &M, OutlinedFunction &OF, InstructionMapper &Mapper, unsigned Name); + /// Calls 'doOutline()'. + bool runOnModule(Module &M) override; + /// Construct a suffix tree on the instructions in \p M and outline repeated /// strings from that tree. - bool runOnModule(Module &M) override; + bool doOutline(Module &M, unsigned &OutlinedFunctionNum); /// Return a DISubprogram for OF if one exists, and null otherwise. Helper /// function for remark emission. @@ -1190,13 +1194,11 @@ MachineOutliner::createOutlinedFunction(Module &M, OutlinedFunction &OF, bool MachineOutliner::outline(Module &M, std::vector<OutlinedFunction> &FunctionList, - InstructionMapper &Mapper) { + InstructionMapper &Mapper, + unsigned &OutlinedFunctionNum) { bool OutlinedSomething = false; - // Number to append to the current outlined function. - unsigned OutlinedFunctionNum = 0; - // Sort by benefit. The most beneficial functions should be outlined first. llvm::stable_sort(FunctionList, [](const OutlinedFunction &LHS, const OutlinedFunction &RHS) { @@ -1427,6 +1429,15 @@ bool MachineOutliner::runOnModule(Module &M) { if (M.empty()) return false; + // Number to append to the current outlined function. + unsigned OutlinedFunctionNum = 0; + + if (!doOutline(M, OutlinedFunctionNum)) + return false; + return true; +} + +bool MachineOutliner::doOutline(Module &M, unsigned &OutlinedFunctionNum) { MachineModuleInfo &MMI = getAnalysis<MachineModuleInfoWrapperPass>().getMMI(); // If the user passed -enable-machine-outliner=always or @@ -1470,7 +1481,8 @@ bool MachineOutliner::runOnModule(Module &M) { initSizeRemarkInfo(M, MMI, FunctionToInstrCount); // Outline each of the candidates and return true if something was outlined. - bool OutlinedSomething = outline(M, FunctionList, Mapper); + bool OutlinedSomething = + outline(M, FunctionList, Mapper, OutlinedFunctionNum); // If we outlined something, we definitely changed the MI count of the // module. If we've asked for size remarks, then output them. |