<div dir="ltr">Thanks for pointing this out.<div><br></div><div>The following is a more extensive test.</div><div><br></div><div>//succeed means dumping help info without Error message.</div><div><br></div><div>clang -help #succeed<br></div><div>'clang -help-hidden' #Fail<br></div><div>'clang --help-hidden' #Succeed</div><div><br></div><div>clang -mllvm -v -help #Succeed<br></div><div>clang -mllvm -v -help-hidden #Fail</div><div>clang -mllvm -v --help-hidden #Succeed<br></div><div><br></div><div><div>'clang -mllvm -help -c LULESH.cc' #Succeed<br></div><div>'clang -mllvm -help LULESH.cc' # Fail</div></div><div><br></div><div>clang -cc1 -help #Succeed<br></div><div>clang -cc1 -help-hidden #Fail . (may be no hidden option)<br></div><div>clang -cc1 --help-hidden #Fail<br></div><div><br></div><div>opt -help  #Succeed</div><div>opt --help #Succeed</div><div>opt -help-hidden #Succeed</div><div>opt --help-hidden #Succeed<br></div><div><br></div><div>llc -help  #Succeed</div><div>llc --help #Succeed</div><div>llc -help-hidden #Succeed</div><div>llc --help-hidden #Succeed </div><div><br></div><div>lld -help #Succeed</div><div>lld --help #Succeed</div><div>lld -help-hidden #Fail (may be no hidden option)</div><div>lld --help-hidden # Fail<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 9, 2018 at 2:07 AM, toddy wang <span dir="ltr"><<a href="mailto:wenwangtoddy@gmail.com" target="_blank">wenwangtoddy@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">clang -O3 -mllvm -help -c  LULESH.cc succeeds.<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 9, 2018 at 2:05 AM, toddy wang <span dir="ltr"><<a href="mailto:wenwangtoddy@gmail.com" target="_blank">wenwangtoddy@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Quick results:</div><div><br></div><div>[twang15@c89 temp]$ clang -mllvm -help</div><div>clang-5.0: error: no input files</div><div>[twang15@c89 temp]$ clang -mllvm -help-hidden</div><div>clang-5.0: error: no input files</div><div>[twang15@c89 temp]$ clang -mllvm --help-hidden</div><div>clang-5.0: error: no input files</div><div>[twang15@c89 temp]$ clang -mllvm --help</div><div>clang-5.0: error: no input files</div><div><br></div><div>Anything wrong?</div></div><div class="m_2212981656993686728HOEnZb"><div class="m_2212981656993686728h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 9, 2018 at 1:56 AM, Craig Topper <span dir="ltr"><<a href="mailto:craig.topper@gmail.com" target="_blank">craig.topper@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">There's a hack in lib/Driver/ToolChains/Clang.cp<wbr>p to accept "-mllvm -disable-llvm-optzns" as a hack for legacy compatibility. It's deprecated and the -Xclang spelling should be used.<div><br></div><div>There does appear to be a bug with "-mllvm -disable-llvm-optzns" and -save-temps. -save-temps causes clang to be invoked separately to text assembly into binary code, and it looks like that call to clang gets -mllvm -disable-llvm-optzns passed to it but it isn't capable of handling it.  You can see this if you add "-v" to your command line so you can see all the subprocesses that get invoked.</div><div><br></div><div>For the -help question, when clang printed "<span style="font-size:12.8px">Try: 'clang (LLVM option parsing) -help'" it was trying and failing to tell you to type "clang -mllvm -help" or "clang -mllvm -help-hidden". This will print the help from the llvm components.</span></div></div><div class="gmail_extra"><br clear="all"><div><div class="m_2212981656993686728m_-1706727891211905793m_-4871570487362076808gmail_signature" data-smartmail="gmail_signature">~Craig</div></div>
<br><div class="gmail_quote"><div><div class="m_2212981656993686728m_-1706727891211905793h5">On Mon, Jan 8, 2018 at 10:40 PM, toddy wang via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_2212981656993686728m_-1706727891211905793h5"><div dir="ltr"><div>Hi guys,</div><div><br></div><div>According to this patch review:</div><div><i>Title: Remove the '-disable-llvm-passes' flag (which I didn't even know existed, and I suspect many others aren't aware of either) and strength '-disable-llvm-optzns' to <b>do the same thing</b></i></div><div>Link: <a href="https://reviews.llvm.org/D28047" target="_blank">https://reviews.llvm.org/D2804<wbr>7</a></div><div><br></div><div><b>-disable-llvm-optzns and -disable-llvm-passes are aliasing each other.</b><br></div><div><b><br></b></div><div><b>1. Both  can be passed to cc1 w/ -Xclang when compilation is run to finish.</b></div><div>E.g</div><div><div>[twang15@c89 temp]$ clang++ -O2 -Xclang -disable-llvm-optzns -save-temps LULESH.cc </div><div>[twang15@c89 temp]$ cp a.out a.out.1</div><div>[twang15@c89 temp]$ clang++ -O2 -Xclang -disable-llvm-passes -save-temps LULESH.cc <br></div><div>[twang15@c89 temp]$ diff a.out a.out.1</div><div>[twang15@c89 temp]$ </div></div><div><br></div><div><div><b>2. Both cannot be passed w/ -mllvm without -emit-llvm -c</b></div><div><br></div><div><div>[twang15@c89 temp]$ clang++ -O2 -mllvm -disable-llvm-optzns -save-temps  LULESH.cc </div><div>clang (LLVM option parsing): Unknown command line argument '-disable-llvm-optzns'.  Try: 'clang (LLVM option parsing) -help'</div><div>clang (LLVM option parsing): Did you mean '-disable-cgp-gc-opts'?</div></div><div><br></div><div><div>[twang15@c89 temp]$ clang++ -O2 -mllvm -disable-llvm-passes -save-temps  LULESH.cc </div><div>clang (LLVM option parsing): Unknown command line argument '-disable-llvm-passes'.  Try: 'clang (LLVM option parsing) -help'</div><div>clang (LLVM option parsing): Did you mean '-disable-cleanups'?</div></div></div><div><br></div><div><b>3. However, -disable-llvm-optzns can be passed w/ -mllvm when -emit-llvm is also passed, but -disable-llvm-passes cannot </b></div><div><div><br></div><div>[twang15@c89 temp]$ clang++ -O2 -mllvm -disable-llvm-optzns -save-temps -emit-llvm -c LULESH.cc <br></div></div><div><div><br></div><div>[twang15@c89 temp]$ clang++ -O2 -mllvm -disable-llvm-passes -save-temps -emit-llvm -c LULESH.cc </div><div>clang (LLVM option parsing): Unknown command line argument '-disable-llvm-passes'.  Try: 'clang (LLVM option parsing) -help'</div><div>clang (LLVM option parsing): Did you mean '-disable-cleanups'?</div></div><div><br></div><div><b>My questions: </b></div><div>1. Is there a bug?<br></div><div><br></div><div>2. Lastly, try as clang instructs me: Try: 'clang (LLVM option parsing) -help'</div><div><br></div><div><div>[twang15@c89 temp]$ clang (LLVM option parsing) -help</div><div>-bash: syntax error near unexpected token `LLVM'</div></div><div><br></div><div>Can clang give me more helpful information on which flags can be passed with mllvm and which can be passed with -Xclang?</div><div><br></div><div>3. It seems to me clang cc1 has at least two major stages to handle *bc file.</div><div>The first stage is to transform c/c++ to bc without any or w/ little optimizations, and -disable-llvm-passes is enabled by default.</div><div><br></div><div>The second stage is to optimize bc files and output .s assembly. And by default, -disable-llvm-passes is disabled for this stage. -Xclang -disable-llvm-passes or -Xclang disable-llvm-optzns will affect this stage.</div><div><br></div><div>Is this a correct understanding? or Partially correct? Where -mllvm options come into play?</div><div><br></div><div>Thanks a lot!</div></div>
<br></div></div>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>