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