Makes opt-bisect work with scop passes.
Details
Details
Diff Detail
Diff Detail
- Repository
- rG LLVM Github Monorepo
Event Timeline
Comment Actions
If I recall correctly, I tried this already. Unfortunately I encountered a design problem.
Running -print-after-all (which uses PassInstrumentation to insert a printer pass) crashes:
$ opt newpm.ll -polly -O3 -print-after-all [...] Unknown wrapped IR type UNREACHABLE executed at /home/meinersbur/src/llvm-project/llvm/lib/Passes/StandardInstrumentations.cpp:321! PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace. Stack dump: 0. Program arguments: /home/meinersbur/build/llvm-project/release/bin/opt newpm.ll -polly -O3 -print-after-all #0 0x00007f1ed0880081 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/meinersbur/build/llvm-project/release/bin/opt+0x2cc4081) #1 0x00007f1ed087dab4 llvm::sys::RunSignalHandlers() (/home/meinersbur/build/llvm-project/release/bin/opt+0x2cc1ab4) #2 0x00007f1ed087dc2b SignalHandler(int) Signals.cpp:0:0 #3 0x00007f1ecdb643c0 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x153c0) #4 0x00007f1ecd5c618b raise /build/glibc-eX1tMB/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1 #5 0x00007f1ecd5a5859 abort /build/glibc-eX1tMB/glibc-2.31/stdlib/abort.c:81:7 #6 0x00007f1ed07cdd4e (/home/meinersbur/build/llvm-project/release/bin/opt+0x2c11d4e) #7 0x00007f1ed0c49807 (anonymous namespace)::shouldPrintIR(llvm::Any) StandardInstrumentations.cpp:0:0 #8 0x00007f1ed0c4fbe0 llvm::PrintIRInstrumentation::printAfterPass(llvm::StringRef, llvm::Any) (/home/meinersbur/build/llvm-project/release/bin/opt+0x3093be0) #9 0x00007f1ed0c4fe96 void llvm::detail::UniqueFunctionBase<void, llvm::StringRef, llvm::Any, llvm::PreservedAnalyses const&>::CallImpl<llvm::PrintIRInstrumentation::registerCallbacks(llvm::PassInstrumentationCallbacks&)::'lambda0'(llvm::StringRef, llvm::Any, llvm::PreservedAnalyses const&)>(void*, llvm::StringRef, llvm::Any&, llvm::PreservedAnalyses const&) StandardInstrumentations.cpp:0:0 #10 0x00007f1ed0d9d30b llvm::PassManager<polly::Scop, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&>::run(polly::Scop&, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>&, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&) (/home/meinersbur/build/llvm-project/release/bin/opt+0x31e130b) #11 0x00007f1ed0d2f913 polly::FunctionToScopPassAdaptor<llvm::PassManager<polly::Scop, llvm::AnalysisManager<polly::Scop, polly::ScopStandardAnalysisResults&>, polly::ScopStandardAnalysisResults&, polly::SPMUpdater&> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) RegisterPasses.cpp:0:0
This is because it calls the instrumentation's IRUnit-generic function meant to handle all IRUints (Module, SCC, Function, Loop). Unfortunately nobody though about custom PassManagers, so it crashes when not knowing what to do with the IRUnit of a Scop.
I settled to just ignoring the Scop pass instrumentations instead of crashing. To fix this properly, PassPlugin would need an additional interface for how to handle additional IRUnits.