<div dir="ltr"><div class="">
        <span style="" title="View upvote and downvote totals" itemprop="upvoteCount" class="">0</span>
        <a class="" title="This question does not show any research effort; it is unclear or not useful">down vote</a>

        <a class="" href="http://stackoverflow.com/questions/34049511/how-to-pass-optimization-passes-to-clang#" title="This is a favorite question (click again to undo)">favorite</a>
        


</div>

            
            

<div>
    <div class="" itemprop="text">

<p>I'm trying to debug an issue for a new target where a testcase fails with -O1 optimization and passes with -O0 optimization. </p>

<p>I got a list of optimization passes being performed when 'clang -O1' is called like this:</p>

<pre><code>llvm-as < /dev/null | opt -O1 -disable-output -debug-pass=Arguments
</code></pre>

<p>Which results in:</p><p>Pass Arguments:  -no-aa -tbaa -targetlibinfo -basicaa -notti -preverify -domtree -verify -simplifycfg -domtree -sroa -early-cse -lower-expect<br>Pass Arguments:  -targetlibinfo -no-aa -tbaa -basicaa -notti -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -inline-cost -always-inline -functionattrs -sroa -domtree -early-cse -simplify-libcalls -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -indvars -loop-idiom -loop-deletion -loop-unroll -memdep -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -instcombine -strip-dead-prototypes -preverify -domtree -verify<br></p><p>(BTW: why are there two Pass Arguments lists returned there?)<br></p><p>Now my intent is to figure out which optimization pass is causing the
 problem by trying each one until I hit the same problem as with -O1, but clang itself doesn't seem to allow these commandline 
options, for example:</p>

<pre><code>clang -loops -lcssa ....
</code></pre>

<p>Results in:</p>

<pre><code>clang: warning: -loops: 'linker' input unused
clang: warning: -lcssa: 'linker' input unused<br><br></code></pre><pre><code><br>(Makes sense as it conflicts with the -l command line opt) <br></code>So is there a way to pass these in on the command line? (or bonus if 
there's a way to specify a file which contains a list of optimization 
passes to perform)

</pre><p>Note: I realize there must be a way to break everything up into stages and use <em>opt</em>
 at some point and pass the optimization command line options to it, but
 I've got a pretty large set of Makefiles which would need to change to 
do that.</p>
    </div></div></div>