diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2018-07-28 10:51:19 +0000 |
commit | eb11fae6d08f479c0799db45860a98af528fa6e7 (patch) | |
tree | 44d492a50c8c1a7eb8e2d17ea3360ec4d066f042 /lib/CodeGen/TailDuplication.cpp | |
parent | b8a2042aa938069e862750553db0e4d82d25822c (diff) |
Notes
Diffstat (limited to 'lib/CodeGen/TailDuplication.cpp')
-rw-r--r-- | lib/CodeGen/TailDuplication.cpp | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/lib/CodeGen/TailDuplication.cpp b/lib/CodeGen/TailDuplication.cpp index df1eebf43b2b..25cd7802264e 100644 --- a/lib/CodeGen/TailDuplication.cpp +++ b/lib/CodeGen/TailDuplication.cpp @@ -7,8 +7,9 @@ // //===----------------------------------------------------------------------===// // -// This pass duplicates basic blocks ending in unconditional branches into -// the tails of their predecessors, using the TailDuplicator utility class. +/// \file This pass duplicates basic blocks ending in unconditional branches +/// into the tails of their predecessors, using the TailDuplicator utility +/// class. // //===----------------------------------------------------------------------===// @@ -26,38 +27,55 @@ using namespace llvm; namespace { -/// Perform tail duplication. Delegates to TailDuplicator -class TailDuplicatePass : public MachineFunctionPass { +class TailDuplicateBase : public MachineFunctionPass { TailDuplicator Duplicator; - + bool PreRegAlloc; public: - static char ID; - - explicit TailDuplicatePass() : MachineFunctionPass(ID) {} + TailDuplicateBase(char &PassID, bool PreRegAlloc) + : MachineFunctionPass(PassID), PreRegAlloc(PreRegAlloc) {} bool runOnMachineFunction(MachineFunction &MF) override; - void getAnalysisUsage(AnalysisUsage &AU) const override; + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired<MachineBranchProbabilityInfo>(); + MachineFunctionPass::getAnalysisUsage(AU); + } +}; + +class TailDuplicate : public TailDuplicateBase { +public: + static char ID; + TailDuplicate() : TailDuplicateBase(ID, false) { + initializeTailDuplicatePass(*PassRegistry::getPassRegistry()); + } +}; + +class EarlyTailDuplicate : public TailDuplicateBase { +public: + static char ID; + EarlyTailDuplicate() : TailDuplicateBase(ID, true) { + initializeEarlyTailDuplicatePass(*PassRegistry::getPassRegistry()); + } }; } // end anonymous namespace -char TailDuplicatePass::ID = 0; +char TailDuplicate::ID; +char EarlyTailDuplicate::ID; -char &llvm::TailDuplicateID = TailDuplicatePass::ID; +char &llvm::TailDuplicateID = TailDuplicate::ID; +char &llvm::EarlyTailDuplicateID = EarlyTailDuplicate::ID; -INITIALIZE_PASS(TailDuplicatePass, DEBUG_TYPE, "Tail Duplication", false, false) +INITIALIZE_PASS(TailDuplicate, DEBUG_TYPE, "Tail Duplication", false, false) +INITIALIZE_PASS(EarlyTailDuplicate, "early-tailduplication", + "Early Tail Duplication", false, false) -bool TailDuplicatePass::runOnMachineFunction(MachineFunction &MF) { +bool TailDuplicateBase::runOnMachineFunction(MachineFunction &MF) { if (skipFunction(MF.getFunction())) return false; auto MBPI = &getAnalysis<MachineBranchProbabilityInfo>(); - - // TODO: Querying isSSA() to determine pre-/post-regalloc is fragile, better - // split this into two passes instead. - bool PreRegAlloc = MF.getRegInfo().isSSA(); - Duplicator.initMF(MF, PreRegAlloc, MBPI, /* LayoutMode */ false); + Duplicator.initMF(MF, PreRegAlloc, MBPI, /*LayoutMode=*/false); bool MadeChange = false; while (Duplicator.tailDuplicateBlocks()) @@ -65,8 +83,3 @@ bool TailDuplicatePass::runOnMachineFunction(MachineFunction &MF) { return MadeChange; } - -void TailDuplicatePass::getAnalysisUsage(AnalysisUsage &AU) const { - AU.addRequired<MachineBranchProbabilityInfo>(); - MachineFunctionPass::getAnalysisUsage(AU); -} |