forked from OSchip/llvm-project
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:
parent
e77d24f70a
commit
a2ae14514a
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue