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