[llvm-dev] opt - replicating multiple passes from -O3 -debug-pass=Executions
Sanjay Patel via llvm-dev
llvm-dev at lists.llvm.org
Wed Aug 12 05:12:44 PDT 2020
The pipeline built with -O3 includes non-default options for -simplifycfg
when it runs late. I don't know if it is possible to replicate that
behavior if you are trying to specify multiple runs of a pass via the
command-line options.
// Cleanup after loop vectorization, etc. Simplification passes like CVP
and
// GVN, loop transforms, and others have already run, so it's now better
to
// convert to more optimized IR using more aggressive simplify CFG
options.
// The extra sinking transform can create larger basic blocks, so do this
// before SLP vectorization.
// FIXME: study whether hoisting and/or sinking of common instructions
should
// be delayed until after SLP vectorizer.
MPM.add(createCFGSimplificationPass(SimplifyCFGOptions()
.forwardSwitchCondToPhi(true)
.convertSwitchToLookupTable(true)
.needCanonicalLoops(false)
.hoistCommonInsts(true)
.sinkCommonInsts(true)));
On Tue, Aug 11, 2020 at 1:14 PM Chad Verbowski via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
> Update: Comparing the -print-before-all and -print-after-all for -O3 and
> the run with the flags, I see a difference starting with the 7th (of 8)
> "*** IR Dump After Simplify the CFG ***" which I assume is the -simplifycfg
> flag.
>
> Is there any known reason -simplifycfg would behave differently if the
> pipeline of passes up to this point are identical (order and their input
> and output)?
>
> Thanks.
>
>
> On Mon, Aug 10, 2020 at 10:42 PM Chad Verbowski <chad at verbowski.com>
> wrote:
>
>> Hello,
>>
>> I am trying to replicate the output from opt -O3 foo.bc -o foo.opt.bc by
>> specifying the individual passes instead of the -O3 flag.
>>
>> Looking at the passes from opt -O3 foo.bc -o foo.bc
>> -debug-pass=Executions it seems there are two passes being run. When I run
>> the flags indicated for the two passes specified in the 'Pass Arguments:'
>> as two sequential opt processes or a single opt process with the
>> concatenated flags I get a different binary result compared to the O3 run.
>> (Note I had to remove the -targetpassconfig flag and
>> add -spec-exec-only-if-divergent-target to the second pass to get my run to
>> match O3's second pass.)
>>
>> Comparing the -debug-pass=Executions from my runs with the O3 run, it
>> seems the first pass in my run has additional 'TargetLibrary Information',
>> 'Target Pass Configuration' and the 'Module Pass Manager' entries compared
>> to O3 (copied below). My output shows the 'Pass Arguments:' line has
>> automatically added -targetpassconfig -verify -writebitcode, and the
>> -targetlibinfo flag was moved to the start.
>>
>> Is there a way I can address these differences to enable replicating the
>> -O3 first and second passes using opt flags?
>>
>> Thanks for considering this,
>>
>> -Chad
>>
>> (Opt -O3 first pass) Pass Arguments: -tti -tbaa -scoped-noalias
>> -assumption-cache-tracker -targetlibinfo -verify -ee-instrument
>> -simplifycfg -domtree -sroa -early-cse -lower-expect
>> Target Transform Information
>> Type-Based Alias Analysis
>> Scoped NoAlias Alias Analysis
>> Assumption Cache Tracker
>> Target Library Information
>> FunctionPass Manager
>> Module Verifier
>> Instrument function entry/exit with calls to e.g. mcount() (pre
>> inlining)
>> Simplify the CFG
>> Dominator Tree Construction
>> SROA
>> Early CSE
>> Lower 'expect' Intrinsics
>>
>> (My Run): opt in.bc -o out.bc -debug-pass=Executions -tti -tbaa
>> -scoped-noalias -assumption-cache-tracker -targetlibinfo -verify
>> -ee-instrument -simplifycfg -domtree -sroa -early-cse -lower-expect
>>
>> Pass Arguments: * -targetlibinfo* -tti *-targetpassconfig* -tbaa
>> -scoped-noalias -assumption-cache-tracker -verify -ee-instrument
>> -simplifycfg -domtree -sroa -early-cse -lower-expect *-verify
>> -write-bitcode*
>> *Target Library Information*
>> Target Transform Information
>> Target Pass Configuration
>> Type-Based Alias Analysis
>> Scoped NoAlias Alias Analysis
>> Assumption Cache Tracker
>> *ModulePass Manager*
>> FunctionPass Manager
>> Module Verifier
>> Instrument function entry/exit with calls to e.g. mcount() (pre
>> inlining)
>> Simplify the CFG
>> Dominator Tree Construction
>> SROA
>> Early CSE
>> Lower 'expect' Intrinsics
>>
> _______________________________________________
> 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/20200812/44e5b373/attachment.html>
More information about the llvm-dev
mailing list