diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp b/llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp index a84377d..56fffff 100644 --- a/llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp +++ b/llvm/lib/CodeGen/MachineBranchProbabilityInfo.cpp @@ -18,9 +18,11 @@ using namespace llvm; -INITIALIZE_PASS_BEGIN(MachineBranchProbabilityInfo, "machine-branch-prob", +INITIALIZE_PASS_BEGIN(MachineBranchProbabilityInfoWrapperPass, + "machine-branch-prob", "Machine Branch Probability Analysis", false, true) -INITIALIZE_PASS_END(MachineBranchProbabilityInfo, "machine-branch-prob", +INITIALIZE_PASS_END(MachineBranchProbabilityInfoWrapperPass, + "machine-branch-prob", "Machine Branch Probability Analysis", false, true) namespace llvm { @@ -37,15 +39,45 @@ cl::opt<unsigned> ProfileLikelyProb( cl::init(51), cl::Hidden); } // namespace llvm -char MachineBranchProbabilityInfo::ID = 0; +MachineBranchProbabilityAnalysis::Result +MachineBranchProbabilityAnalysis::run(MachineFunction &, + MachineFunctionAnalysisManager &) { + return MachineBranchProbabilityInfo(); +} + +PreservedAnalyses +MachineBranchProbabilityPrinterPass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &MFAM) { + OS << "Printing analysis 'Machine Branch Probability Analysis' for machine " + "function '" + << MF.getName() << "':\n"; + auto &MBPI = MFAM.getResult<MachineBranchProbabilityAnalysis>(MF); + for (const MachineBasicBlock &MBB : MF) { + for (const MachineBasicBlock *Succ : MBB.successors()) + MBPI.printEdgeProbability(OS << " ", &MBB, Succ); + } + return PreservedAnalyses::all(); +} + +char MachineBranchProbabilityInfoWrapperPass::ID = 0; -MachineBranchProbabilityInfo::MachineBranchProbabilityInfo() +MachineBranchProbabilityInfoWrapperPass:: + MachineBranchProbabilityInfoWrapperPass() : ImmutablePass(ID) { PassRegistry &Registry = *PassRegistry::getPassRegistry(); - initializeMachineBranchProbabilityInfoPass(Registry); + initializeMachineBranchProbabilityInfoWrapperPassPass(Registry); } -void MachineBranchProbabilityInfo::anchor() {} +void MachineBranchProbabilityInfoWrapperPass::anchor() {} + +AnalysisKey MachineBranchProbabilityAnalysis::Key; + +bool MachineBranchProbabilityInfo::invalidate( + MachineFunction &, const PreservedAnalyses &PA, + MachineFunctionAnalysisManager::Invalidator &) { + auto PAC = PA.getChecker<MachineBranchProbabilityAnalysis>(); + return !PAC.preservedWhenStateless(); +} BranchProbability MachineBranchProbabilityInfo::getEdgeProbability( const MachineBasicBlock *Src, |