Disable inlining in opt

I have some code which uses llvm-13 to do optimizing while disabling inlining:

opt-13 -O3 -enable-new-pm=0 --disable-inlining

I’m wondering how to replicate this in LLVM 14 and 15. I’m assuming it might be using the new pass manager and adding all passes except an inliner. Is that correct? Is there a way to get a starting set of passes that will be an approximate match for -O3?

You can use -O3 -print-pipeline-passes to print an expanded -passes pipeline. There will be a devirt<4>(inline(...)) somewhere in there, which you’ll want to drop (probably while retaining the bit inside the parentheses).

If you can add noinline to all the functions before -O3 that would also work. The forceattrs pass can add arbitrary attributes to functions, although it’d need to be extended to allow a wildcard for matching functions.

@nikic That seemed to work. Left me with this:

opt-14 --passes "verify,annotation2metadata,forceattrs,inferattrs,function<eager-inv>(lower-expect,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;no-switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,sroa,early-cse<>,coro-early,callsite-splitting),openmp-opt,ipsccp,called-value-propagation,globalopt,function(mem2reg),deadargelim,function<eager-inv>(instcombine,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>),require<globals-aa>,function(invalidate<aa>),require<profile-summary>,cgscc(devirt<4>(function-attrs,argpromotion,openmp-opt-cgscc,function<eager-inv>(sroa,early-cse<memssa>,speculative-execution,jump-threading,correlated-propagation,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,aggressive-instcombine,libcalls-shrinkwrap,tailcallelim,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,reassociate,require<opt-remark-emit>,loop-mssa(loop-instsimplify,loop-simplifycfg,licm,loop-rotate,licm,simple-loop-unswitch<nontrivial;trivial>),simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,instcombine,loop(loop-idiom,indvars,loop-deletion,loop-unroll-full),sroa,mldst-motion<no-split-footer-bb>,gvn<>,sccp,bdce,instcombine,jump-threading,correlated-propagation,adce,memcpyopt,dse,loop-mssa(licm),coro-elide,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;hoist-common-insts;sink-common-insts>,instcombine),coro-split)),globalopt,globaldce,elim-avail-extern,rpo-function-attrs,require<globals-aa>,function<eager-inv>(float2int,lower-constant-intrinsics,loop(loop-rotate,loop-deletion),loop-distribute,inject-tli-mappings,loop-vectorize<no-interleave-forced-only;no-vectorize-forced-only;>,loop-load-elim,instcombine,simplifycfg<bonus-inst-threshold=1;forward-switch-cond;switch-range-to-icmp;switch-to-lookup;no-keep-loops;hoist-common-insts;sink-common-insts>,slp-vectorizer,vector-combine,instcombine,loop-unroll<O3>,transform-warning,instcombine,require<opt-remark-emit>,loop-mssa(licm),alignment-from-assumptions,loop-sink,instsimplify,div-rem-pairs,simplifycfg<bonus-inst-threshold=1;no-forward-switch-cond;switch-range-to-icmp;no-switch-to-lookup;keep-loops;no-hoist-common-insts;no-sink-common-insts>,coro-cleanup),cg-profile,globaldce,constmerge,rel-lookup-table-converter,function(annotation-remarks),verify"

Not exactly typeable, but scriptable.

@aeubanks I understand your approach: forceattrs to add noinline then run O3. I can’t seem to get the syntax to work, can you give an example?

I don’t think forceattrs currently allows adding an attribute to every function, currently you have to manually specify every function name. I meant if you wanted you could add an option to forceattrs to add some attribute to every function, and use that before running -O3.

You could also manually add optnone yourself if you’re using LLVM APIs.

Could you please give example using optnone . I want to disable few passes for O1 , O2 level using clang .

Could you please regarding this .

If you want to disable particular passes, optnone will not help you; it disables pretty much all optimizations.

Any idea , how can I disable specific pass from clang not opt .

On Wed, May 31, 2023, 7:04 AM Paul T Robinson via LLVM Discussion Forums <notifications@llvm.discoursemail.com> wrote:

pogo59
May 31

If you want to disable particular passes, optnone will not help you; it disables pretty much all optimizations.


Visit Topic or reply to this email to respond.

To unsubscribe from these emails, click here.

You can’t unless you patch the pass manager code.

If I want to change pass manager source code . Then how can I implement . Do you have any idea .