Alexander Potapenko
2011-Nov-22 11:18 UTC
[LLVMdev] Instrumentation passes and -O0 optimization level
Hi LLVMdev,
llvm::PassManagerBuilder allows to customize the default pass
sequenceby registering passes at specific extension points.However all
of theextensions if the -O0 flag is added to the command line; as
thecomment says, "If all optimizations are disabled, just run
thealways-inline pass."This doesn't play well with
_instrumentation_passes which should not be disabled regardless of the
optimizationlevel.
My proposal is to add a specific extension point to preserve a
passeven if O0 is used (below is the usage example with
theAddressSanitizer pass)Another solution would be to introduce a
passattribute which tells whether the pass should be preserved if
theoptimizations are disabled, but this will require some refactoring
ofthe PassManagerBuilder class.
What do you think of the following patch?
-------------------------8<--------------------------------------------------Index:
include/llvm/Transforms/IPO/PassManagerBuilder.h===================================================================---
include/llvm/Transforms/IPO/PassManagerBuilder.h (revision
144800)+++ include/llvm/Transforms/IPO/PassManagerBuilder.h
(working copy)@@ -67,7 +67,12 @@ /// EP_ScalarOptimizerLate - This
extension point allows addingoptimization /// passes after most of
the main optimizations, but before the last /// cleanup-ish
optimizations.- EP_ScalarOptimizerLate+
EP_ScalarOptimizerLate,++ /// EP_EnabledOnOptLevel0 - This
extension point allows adding passes that+ /// should not be
disabled by O0 optimization level. The passes will be+ /// inserted
after the inlining pass.+ EP_EnabledOnOptLevel0 };
/// The Optimization Level - Specify the basic optimization
level.Index:
lib/Transforms/IPO/PassManagerBuilder.cpp===================================================================---
lib/Transforms/IPO/PassManagerBuilder.cpp (revision 144800)+++
lib/Transforms/IPO/PassManagerBuilder.cpp (working copy)@@ -101,6
+101,7 @@ MPM.add(Inliner); Inliner = 0; }+
addExtensionsToPM(EP_EnabledOnOptLevel0, MPM); return; }
Index:
tools/clang/lib/CodeGen/BackendUtil.cpp===================================================================---
tools/clang/lib/CodeGen/BackendUtil.cpp (revision 144800)+++
tools/clang/lib/CodeGen/BackendUtil.cpp (working copy)@@ -150,6
+150,8 @@ if (CodeGenOpts.AddressSanitizer) {
PMBuilder.addExtension(PassManagerBuilder::EP_ScalarOptimizerLate,
addAddressSanitizerPass);+
PMBuilder.addExtension(PassManagerBuilder::EP_EnabledOnOptLevel0,+
addAddressSanitizerPass); }
// Figure out
TargetLibraryInfo.-------------------------8<--------------------------------------------------
TIA,Alexander Potapenko
Software Engineer
Google Moscow
Chandler Carruth
2011-Nov-22 11:23 UTC
[LLVMdev] Instrumentation passes and -O0 optimization level
On Tue, Nov 22, 2011 at 3:18 AM, Alexander Potapenko <glider at google.com>wrote:> What do you think of the following patch? >Unfortunately, it looks like your email got garbled... Please attach patches as actual files rather than as text at the end of the message, otherwise lots of email software does the wrong thing with them... -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111122/ff059cd8/attachment.html>
Alexander Potapenko
2011-Nov-22 11:25 UTC
[LLVMdev] Instrumentation passes and -O0 optimization level
> Unfortunately, it looks like your email got garbled... Please attach patches > as actual files rather than as text at the end of the message, otherwise > lots of email software does the wrong thing with them...See attached. Sorry for that. -------------- next part -------------- A non-text attachment was scrubbed... Name: clang.patch Type: text/x-patch Size: 1819 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111122/d8baa0e3/attachment.bin>
Reasonably Related Threads
- [LLVMdev] Instrumentation passes and -O0 optimization level
- [LLVMdev] Instrumentation passes and -O0 optimization level
- [LLVMdev] Instrumentation passes and -O0 optimization level
- [LLVMdev] Instrumentation passes and -O0 optimization level
- [LLVMdev] Instrumentation passes and -O0 optimization level