Making Instrumentation aware of LoopNest Pass

Intrumentation callbacks are not made aware of LoopNest passes. From the loop pass manager, we can pass the outermost loop of the LoopNest to instrumentation in case of LoopNest passes.

The current patch made the change in two places in StandardInstrumentation.cpp. I will submit a proper patch where the OuterMostLoop is passed from the LoopPassManager to the call backs. That way we will avoid making changes at multiple places in StandardInstrumentation.cpp.

A testcase also will be submitted.

Reviewed By: aeubanks

Differential Revision: https://reviews.llvm.org/D102463
This commit is contained in:
Arthur Eubanks 2021-05-24 18:44:14 -07:00
parent e77d24f70a
commit a2ae14514a
2 changed files with 20 additions and 2 deletions

View File

@ -183,6 +183,12 @@ protected:
PreservedAnalyses runWithoutLoopNestPasses(Loop &L, LoopAnalysisManager &AM,
LoopStandardAnalysisResults &AR,
LPMUpdater &U);
private:
static const Loop &getLoopFromIR(Loop &L) { return L; }
static const Loop &getLoopFromIR(LoopNest &LN) {
return LN.getOutermostLoop();
}
};
/// The Loop pass manager.
@ -358,9 +364,12 @@ template <typename IRUnitT, typename PassT>
Optional<PreservedAnalyses> LoopPassManager::runSinglePass(
IRUnitT &IR, PassT &Pass, LoopAnalysisManager &AM,
LoopStandardAnalysisResults &AR, LPMUpdater &U, PassInstrumentation &PI) {
// Get the loop in case of Loop pass and outermost loop in case of LoopNest
// pass which is to be passed to BeforePass and AfterPass call backs.
const Loop &L = getLoopFromIR(IR);
// Check the PassInstrumentation's BeforePass callbacks before running the
// pass, skip its execution completely if asked to (callback returns false).
if (!PI.runBeforePass<IRUnitT>(*Pass, IR))
if (!PI.runBeforePass<Loop>(*Pass, L))
return None;
PreservedAnalyses PA;
@ -373,7 +382,7 @@ Optional<PreservedAnalyses> LoopPassManager::runSinglePass(
if (U.skipCurrentLoop())
PI.runAfterPassInvalidated<IRUnitT>(*Pass, PA);
else
PI.runAfterPass<IRUnitT>(*Pass, IR, PA);
PI.runAfterPass<Loop>(*Pass, L, PA);
return PA;
}

View File

@ -0,0 +1,9 @@
;RUN: opt -disable-output -passes=loop-interchange -print-after-all < %s 2>&1 | FileCheck %s
; CHECK: IR Dump After LoopInterchangePass
define void @foo() {
entry:
br label %for.cond
for.cond:
br label %for.cond
}