@@ -3839,21 +3839,35 @@ namespace {
3839
3839
// / placement. This is separate from the actual placement pass so that they can
3840
3840
// / be computed in the absence of any placement transformations or when using
3841
3841
// / alternative placement strategies.
3842
- class MachineBlockPlacementStats : public MachineFunctionPass {
3842
+ class MachineBlockPlacementStats {
3843
3843
// / A handle to the branch probability pass.
3844
3844
const MachineBranchProbabilityInfo *MBPI;
3845
3845
3846
3846
// / A handle to the function-wide block frequency pass.
3847
3847
const MachineBlockFrequencyInfo *MBFI;
3848
3848
3849
+ public:
3850
+ MachineBlockPlacementStats (const MachineBranchProbabilityInfo *MBPI,
3851
+ const MachineBlockFrequencyInfo *MBFI)
3852
+ : MBPI(MBPI), MBFI(MBFI) {}
3853
+ bool run (MachineFunction &MF);
3854
+ };
3855
+
3856
+ class MachineBlockPlacementStatsLegacy : public MachineFunctionPass {
3849
3857
public:
3850
3858
static char ID; // Pass identification, replacement for typeid
3851
3859
3852
- MachineBlockPlacementStats () : MachineFunctionPass(ID) {
3853
- initializeMachineBlockPlacementStatsPass (*PassRegistry::getPassRegistry ());
3860
+ MachineBlockPlacementStatsLegacy () : MachineFunctionPass(ID) {
3861
+ initializeMachineBlockPlacementStatsLegacyPass (
3862
+ *PassRegistry::getPassRegistry ());
3854
3863
}
3855
3864
3856
- bool runOnMachineFunction (MachineFunction &F) override ;
3865
+ bool runOnMachineFunction (MachineFunction &F) override {
3866
+ auto *MBPI =
3867
+ &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI ();
3868
+ auto *MBFI = &getAnalysis<MachineBlockFrequencyInfoWrapperPass>().getMBFI ();
3869
+ return MachineBlockPlacementStats (MBPI, MBFI).run (F);
3870
+ }
3857
3871
3858
3872
void getAnalysisUsage (AnalysisUsage &AU) const override {
3859
3873
AU.addRequired <MachineBranchProbabilityInfoWrapperPass>();
@@ -3865,28 +3879,35 @@ class MachineBlockPlacementStats : public MachineFunctionPass {
3865
3879
3866
3880
} // end anonymous namespace
3867
3881
3868
- char MachineBlockPlacementStats ::ID = 0 ;
3882
+ char MachineBlockPlacementStatsLegacy ::ID = 0 ;
3869
3883
3870
- char &llvm::MachineBlockPlacementStatsID = MachineBlockPlacementStats ::ID;
3884
+ char &llvm::MachineBlockPlacementStatsID = MachineBlockPlacementStatsLegacy ::ID;
3871
3885
3872
- INITIALIZE_PASS_BEGIN (MachineBlockPlacementStats , " block-placement-stats" ,
3886
+ INITIALIZE_PASS_BEGIN (MachineBlockPlacementStatsLegacy , " block-placement-stats" ,
3873
3887
" Basic Block Placement Stats" , false , false )
3874
3888
INITIALIZE_PASS_DEPENDENCY(MachineBranchProbabilityInfoWrapperPass)
3875
3889
INITIALIZE_PASS_DEPENDENCY(MachineBlockFrequencyInfoWrapperPass)
3876
- INITIALIZE_PASS_END(MachineBlockPlacementStats , " block-placement-stats" ,
3890
+ INITIALIZE_PASS_END(MachineBlockPlacementStatsLegacy , " block-placement-stats" ,
3877
3891
" Basic Block Placement Stats" , false , false )
3878
3892
3879
- bool MachineBlockPlacementStats::runOnMachineFunction(MachineFunction &F) {
3893
+ PreservedAnalyses
3894
+ MachineBlockPlacementStatsPass::run(MachineFunction &MF,
3895
+ MachineFunctionAnalysisManager &MFAM) {
3896
+ auto &MBPI = MFAM.getResult <MachineBranchProbabilityAnalysis>(MF);
3897
+ auto &MBFI = MFAM.getResult <MachineBlockFrequencyAnalysis>(MF);
3898
+
3899
+ MachineBlockPlacementStats (&MBPI, &MBFI).run (MF);
3900
+ return PreservedAnalyses::all ();
3901
+ }
3902
+
3903
+ bool MachineBlockPlacementStats::run (MachineFunction &F) {
3880
3904
// Check for single-block functions and skip them.
3881
3905
if (std::next (F.begin ()) == F.end ())
3882
3906
return false ;
3883
3907
3884
3908
if (!isFunctionInPrintList (F.getName ()))
3885
3909
return false ;
3886
3910
3887
- MBPI = &getAnalysis<MachineBranchProbabilityInfoWrapperPass>().getMBPI ();
3888
- MBFI = &getAnalysis<MachineBlockFrequencyInfoWrapperPass>().getMBFI ();
3889
-
3890
3911
for (MachineBasicBlock &MBB : F) {
3891
3912
BlockFrequency BlockFreq = MBFI->getBlockFreq (&MBB);
3892
3913
Statistic &NumBranches =
0 commit comments