Arthur Eubanks via llvm-dev
2021-May-12 16:37 UTC
[llvm-dev] Adding LoopNest case to getIRName
Looks like even in LoopNest mode, FunctionToLoopPassAdaptor passes a Loop to PassInstrumentation. But LoopPassManager::runSinglePass either passes a Loop or LoopNest. Seems like that should be fixed to always pass the Loop to PassInstrumentation. On Tue, May 11, 2021 at 11:26 PM raghesh via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Hi All > > While working on a LoopNest pass, I hit 'unreachable code' in the > getIRName, which is invoked as part of debugging options (like > -debug-pass-manager). It is figured out that within getIRName, LoopNest is > not handled. I could fix it with the following patch. > > diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp > b/llvm/lib/Passes/StandardInstrumentations.cpp > index e64df0b1147f..65e0e7d4cf27 100644 > --- a/llvm/lib/Passes/StandardInstrumentations.cpp > +++ b/llvm/lib/Passes/StandardInstrumentations.cpp > @@ -20,6 +20,7 @@ > #include "llvm/Analysis/LazyCallGraph.h" > #include "llvm/Analysis/LoopInfo.h" > #include "llvm/IR/Function.h" > +#include "llvm/Analysis/LoopNestAnalysis.h" > #include "llvm/IR/Module.h" > #include "llvm/IR/PassInstrumentation.h" > #include "llvm/IR/PassManager.h" > @@ -285,6 +286,17 @@ std::string getIRName(Any IR) { > return OS.str(); > } > > + if (any_isa<const LoopNest *>(IR)) { > + const Loop *L = &any_cast<const LoopNest *>(IR)->getOutermostLoop(); > + std::string S; > + raw_string_ostream OS(S); > + assert(L && "Loop should be valid for printing"); > + L->print(OS, /*Verbose*/ false, /*PrintNested*/ false); > + return OS.str(); > + } > + > llvm_unreachable("Unknown wrapped IR type"); > } > > Just wanted to make sure that this is the right fix and if it is so we can > upstream this change. > > Regards, > ------------------------------ > Raghesh Aloor > AMD India Pvt. Ltd. > Bengaluru. > ------------------------------ > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210512/e8078b9c/attachment.html>
Hi Arthur, Thanks for that update. Do you mean to say that runSinglePass is a (one of the) common place(s) where we can pass the Loop to PassInstrumentation even in LoopNest Mode? That would be ideal rather than updating PassInstrumentation as I could see other places also (similar to the following) where we should do the same. --- a/llvm/lib/Passes/StandardInstrumentations.cpp +++ b/llvm/lib/Passes/StandardInstrumentations.cpp @@ -861,6 +861,13 @@ bool OptNoneInstrumentation::shouldRun(StringRef PassID, Any IR) { } else if (any_isa<const Loop *>(IR)) { F = any_cast<const Loop *>(IR)->getHeader()->getParent(); } + else if (any_isa<const LoopNest *>(IR)) { + const Loop *L = &any_cast<const LoopNest *>(IR)->getOutermostLoop(); + F = L->getHeader()->getParent(); + } + bool ShouldRun = !(F && F->hasOptNone()); if (!ShouldRun && DebugLogging) { errs() << "Skipping pass " << PassID << " on " << F->getName() Regards, ------------------------------ Raghesh Aloor AMD India Pvt. Ltd. Bengaluru. ------------------------------ On Wed, May 12, 2021 at 10:07 PM Arthur Eubanks <aeubanks at google.com> wrote:> Looks like even in LoopNest mode, FunctionToLoopPassAdaptor passes a Loop > to PassInstrumentation. But LoopPassManager::runSinglePass either passes a > Loop or LoopNest. Seems like that should be fixed to always pass the Loop > to PassInstrumentation. > > On Tue, May 11, 2021 at 11:26 PM raghesh via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > >> Hi All >> >> While working on a LoopNest pass, I hit 'unreachable code' in the >> getIRName, which is invoked as part of debugging options (like >> -debug-pass-manager). It is figured out that within getIRName, LoopNest is >> not handled. I could fix it with the following patch. >> >> diff --git a/llvm/lib/Passes/StandardInstrumentations.cpp >> b/llvm/lib/Passes/StandardInstrumentations.cpp >> index e64df0b1147f..65e0e7d4cf27 100644 >> --- a/llvm/lib/Passes/StandardInstrumentations.cpp >> +++ b/llvm/lib/Passes/StandardInstrumentations.cpp >> @@ -20,6 +20,7 @@ >> #include "llvm/Analysis/LazyCallGraph.h" >> #include "llvm/Analysis/LoopInfo.h" >> #include "llvm/IR/Function.h" >> +#include "llvm/Analysis/LoopNestAnalysis.h" >> #include "llvm/IR/Module.h" >> #include "llvm/IR/PassInstrumentation.h" >> #include "llvm/IR/PassManager.h" >> @@ -285,6 +286,17 @@ std::string getIRName(Any IR) { >> return OS.str(); >> } >> >> + if (any_isa<const LoopNest *>(IR)) { >> + const Loop *L = &any_cast<const LoopNest *>(IR)->getOutermostLoop(); >> + std::string S; >> + raw_string_ostream OS(S); >> + assert(L && "Loop should be valid for printing"); >> + L->print(OS, /*Verbose*/ false, /*PrintNested*/ false); >> + return OS.str(); >> + } >> + >> llvm_unreachable("Unknown wrapped IR type"); >> } >> >> Just wanted to make sure that this is the right fix and if it is so we >> can upstream this change. >> >> Regards, >> ------------------------------ >> Raghesh Aloor >> AMD India Pvt. Ltd. >> Bengaluru. >> ------------------------------ >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210513/e59f9caa/attachment.html>