@@ -26,20 +26,35 @@ static cl::opt<bool>
2626ViewEdgeBundles (" view-edge-bundles" , cl::Hidden,
2727 cl::desc (" Pop up a window to show edge bundle graphs" ));
2828
29- char EdgeBundles ::ID = 0 ;
29+ char EdgeBundlesWrapperLegacy ::ID = 0 ;
3030
31- INITIALIZE_PASS (EdgeBundles, " edge-bundles" , " Bundle Machine CFG Edges" ,
32- /* cfg = */ true , /* is_analysis = */ true )
31+ INITIALIZE_PASS (EdgeBundlesWrapperLegacy, " edge-bundles" ,
32+ " Bundle Machine CFG Edges" ,
33+ /* cfg = */ true , /* is_analysis = */ true )
3334
34- char &llvm::EdgeBundlesID = EdgeBundles ::ID;
35+ char &llvm::EdgeBundlesWrapperLegacyID = EdgeBundlesWrapperLegacy ::ID;
3536
36- void EdgeBundles ::getAnalysisUsage (AnalysisUsage &AU) const {
37+ void EdgeBundlesWrapperLegacy ::getAnalysisUsage (AnalysisUsage &AU) const {
3738 AU.setPreservesAll ();
3839 MachineFunctionPass::getAnalysisUsage (AU);
3940}
4041
41- bool EdgeBundles::runOnMachineFunction (MachineFunction &mf) {
42- MF = &mf;
42+ AnalysisKey EdgeBundlesAnalysis::Key;
43+
44+ EdgeBundles EdgeBundlesAnalysis::run (MachineFunction &MF,
45+ MachineFunctionAnalysisManager &MFAM) {
46+ EdgeBundles Impl (MF);
47+ return Impl;
48+ }
49+
50+ bool EdgeBundlesWrapperLegacy::runOnMachineFunction (MachineFunction &MF) {
51+ Impl.reset (new EdgeBundles (MF));
52+ return false ;
53+ }
54+
55+ EdgeBundles::EdgeBundles (MachineFunction &MF) : MF(&MF) { init (); }
56+
57+ void EdgeBundles::init () {
4358 EC.clear ();
4459 EC.grow (2 * MF->getNumBlockIDs ());
4560
@@ -64,8 +79,6 @@ bool EdgeBundles::runOnMachineFunction(MachineFunction &mf) {
6479 if (b1 != b0)
6580 Blocks[b1].push_back (i);
6681 }
67-
68- return false ;
6982}
7083
7184namespace llvm {
@@ -100,3 +113,11 @@ raw_ostream &WriteGraph<>(raw_ostream &O, const EdgeBundles &G,
100113void EdgeBundles::view () const {
101114 ViewGraph (*this , " EdgeBundles" );
102115}
116+
117+ bool EdgeBundles::invalidate (MachineFunction &MF, const PreservedAnalyses &PA,
118+ MachineFunctionAnalysisManager::Invalidator &Inv) {
119+ // Invalidated when CFG is not preserved
120+ auto PAC = PA.getChecker <EdgeBundlesAnalysis>();
121+ return !PAC.preserved () && !PAC.preservedSet <CFGAnalyses>() &&
122+ !PAC.preservedSet <AllAnalysesOn<MachineFunction>>();
123+ }
0 commit comments