Skip to content

Commit 9c3307d

Browse files
aus-inteligcbot
authored andcommitted
Fix dependencies handling in genx printer
Mark optional dependencies as used if available (1). Add helper to get FG analysis for given FG. Fallback to group baling for function printer if function group analysis is available (2). 1) Fixes problem that analyses are not printed after cisa builder because they were erased as unused before running printer. 2) Fixes problem that baling is not printed in tidy cf pass.
1 parent df3965e commit 9c3307d

File tree

1 file changed

+34
-33
lines changed

1 file changed

+34
-33
lines changed

IGC/VectorCompiler/lib/GenXCodeGen/GenXPrinter.cpp

Lines changed: 34 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)