@@ -38,6 +38,12 @@ class GenXPrinter : public FunctionPass {
3838 : FunctionPass(ID), OS(OS), Banner(Banner) { }
3939 StringRef getPassName () const override { return " GenX printer pass" ; }
4040 void getAnalysisUsage (AnalysisUsage &AU) const override {
41+ AU.addUsedIfAvailable <FunctionGroupAnalysis>();
42+ AU.addUsedIfAvailable <GenXVisaRegAlloc>();
43+ AU.addUsedIfAvailable <GenXLiveness>();
44+ AU.addUsedIfAvailable <GenXNumbering>();
45+ AU.addUsedIfAvailable <GenXFuncBaling>();
46+ AU.addUsedIfAvailable <GenXGroupBaling>();
4147 AU.setPreservesAll ();
4248 }
4349 bool runOnFunction (Function &F) override ;
@@ -58,6 +64,10 @@ class GenXGroupPrinter : public ModulePass {
5864 void getAnalysisUsage (AnalysisUsage &AU) const override {
5965 AU.addRequired <FunctionGroupAnalysis>();
6066 AU.addPreserved <FunctionGroupAnalysis>();
67+ AU.addUsedIfAvailable <GenXVisaRegAlloc>();
68+ AU.addUsedIfAvailable <GenXLiveness>();
69+ AU.addUsedIfAvailable <GenXNumbering>();
70+ AU.addUsedIfAvailable <GenXGroupBaling>();
6171 AU.setPreservesAll ();
6272 }
6373 bool runOnModule (Module &M) override {
@@ -204,55 +214,47 @@ static void printFunction(raw_ostream &OS, Function &F, GenXBaling *Baling,
204214 OS << " }\n " ;
205215}
206216
207- /* **********************************************************************
208- * GenXPrinter::runOnFunction : dump function with GenX analyses
209- */
210- bool GenXPrinter::runOnFunction (Function &F)
211- {
217+ // Helper to get FG analysis for given FG if it is available.
218+ template <typename Analysis>
219+ static Analysis *getAnalysisForFGIfAvailable (Pass &P, FunctionGroup &FG) {
220+ using FGWrapperTy = FunctionGroupWrapperPass<Analysis>;
221+ if (auto *Wrapper = P.getAnalysisIfAvailable <FGWrapperTy>())
222+ return &Wrapper->getFGPassImpl (&FG);
223+ return nullptr ;
224+ }
225+
226+ // Dump function with GenX analyses.
227+ bool GenXPrinter::runOnFunction (Function &F) {
212228 auto *FGA = getAnalysisIfAvailable<FunctionGroupAnalysis>();
229+ GenXBaling *Baling = getAnalysisIfAvailable<GenXFuncBaling>();
213230 GenXVisaRegAlloc *RA = nullptr ;
214231 GenXLiveness *Liveness = nullptr ;
215232 GenXNumbering *Numbering = nullptr ;
216233 if (FGA) {
217- auto *currentFG = FGA->getAnyGroup (&F);
218- if (auto *RAWrapper = getAnalysisIfAvailable<GenXVisaRegAllocWrapper>()) {
219- RA = &(RAWrapper->getFGPassImpl (currentFG));
220- }
221- if (auto *NumberingWrapper = getAnalysisIfAvailable<GenXNumberingWrapper>())
222- Numbering = &(NumberingWrapper->getFGPassImpl (currentFG));
223- if (auto *LivenessWrapper = getAnalysisIfAvailable<GenXLivenessWrapper>())
224- Liveness = &(LivenessWrapper->getFGPassImpl (currentFG));
234+ auto *FG = FGA->getAnyGroup (&F);
235+ RA = getAnalysisForFGIfAvailable<GenXVisaRegAlloc>(*this , *FG);
236+ Numbering = getAnalysisForFGIfAvailable<GenXNumbering>(*this , *FG);
237+ Liveness = getAnalysisForFGIfAvailable<GenXLiveness>(*this , *FG);
238+ Baling = getAnalysisForFGIfAvailable<GenXGroupBaling>(*this , *FG);
225239 }
226240
227- GenXBaling *Baling = getAnalysisIfAvailable<GenXFuncBaling>();
228241 OS << Banner;
229242 printFunction (OS, F, Baling, Liveness, Numbering, RA);
230243 return false ;
231244}
232245
233- /* **********************************************************************
234- * GenXGroupPrinter::runOnFunctionGroup : dump functions with GenX analyses
235- */
236- bool GenXGroupPrinter::runOnFunctionGroup (FunctionGroup &FG)
237- {
238- GenXVisaRegAlloc *RA = nullptr ;
239- if (auto *RAWrapper = getAnalysisIfAvailable<GenXVisaRegAllocWrapper>())
240- RA = &(RAWrapper->getFGPassImpl (&FG));
246+ // Dump function groups with GenX analyses.
247+ bool GenXGroupPrinter::runOnFunctionGroup (FunctionGroup &FG) {
248+ GenXVisaRegAlloc *RA =
249+ getAnalysisForFGIfAvailable<GenXVisaRegAlloc>(*this , FG);
250+ GenXBaling *Baling = getAnalysisForFGIfAvailable<GenXGroupBaling>(*this , FG);
241251
242252 GenXLiveness *Liveness = nullptr ;
243253 GenXNumbering *Numbering = nullptr ;
244254 if (!RA) {
245- if (auto *LivenessWrapper = getAnalysisIfAvailable<GenXLivenessWrapper>())
246- Liveness = &(LivenessWrapper->getFGPassImpl (&FG));
247- if (auto *NumberingWrapper = getAnalysisIfAvailable<GenXNumberingWrapper>())
248- Numbering = &(NumberingWrapper->getFGPassImpl (&FG));
255+ Liveness = getAnalysisForFGIfAvailable<GenXLiveness>(*this , FG);
256+ Numbering = getAnalysisForFGIfAvailable<GenXNumbering>(*this , FG);
249257 }
250- GenXBaling *Baling = nullptr ;
251- if (auto *GroupBalingWrapper =
252- getAnalysisIfAvailable<GenXGroupBalingWrapper>())
253- Baling = &(GroupBalingWrapper->getFGPassImpl (&FG));
254- if (!Baling)
255- Baling = getAnalysisIfAvailable<GenXFuncBaling>();
256258 OS << Banner;
257259 if (Liveness)
258260 OS << " (see below for GenXLiveness)" ;
@@ -265,4 +267,3 @@ bool GenXGroupPrinter::runOnFunctionGroup(FunctionGroup &FG)
265267 OS << " \n " ;
266268 return false ;
267269}
268-
0 commit comments