<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Hi Gonzalo,</div><div class=""><br class=""></div><div class="">Warnings are currently generated when a loop is illegal to vectorize and vectorize(enable) or interleave(enable) is specified. For example,</div><div class=""><br class=""></div><div class="">#pragma clang loop vectorize(enable)</div><div class=""><div style="margin: 0px;" class="">  for(int i = 0; i < N; i++) {</div><div style="margin: 0px;" class="">    if(array[i] > 0) break;</div><div style="margin: 0px;" class="">    else array[i] = 0;</div><div style="margin: 0px;" class="">  }</div></div><div style="margin: 0px;" class=""><br class=""></div><div style="margin: 0px;" class="">>clang -O3 code.c</div><div style="margin: 0px;" class="">    <b style="color: rgb(213, 59, 211);" class="">warning: </b><b class="">loop not vectorized: failed explicitly specified loop vectorization [-Wpass-failed]</b></div><div style="margin: 0px;" class=""><br class=""></div><div style="margin: 0px;" class="">See <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__blog.llvm.org_2014_11_loop-2Dvectorization-2Ddiagnostics-2Dand.html&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=hkSCmg4XYFenGSSArQCB3NLQVFQb0hnLMeV5PMqmARM&s=ep4R5s4ME4XIRtWN_ggW-tcdvs3_GZJN8Rg7fQOqwXA&e=" class="">http://blog.llvm.org/2014/11/loop-vectorization-diagnostics-and.html</a> for more info.</div><div style="margin: 0px;" class=""><br class=""></div><div style="margin: 0px;" class="">Its possible there is a bug in the code for generating the warning or we missed generating it somewhere. Could you provide the loop body?</div><div style="margin: 0px;" class=""><br class=""></div><div style="margin: 0px;" class="">When the loop is not beneficial to vectorize and vectorize(enable) is specified it will vectorize anyway with a width of 2.</div><div style="margin: 0px;" class=""><br class=""></div><div style="margin: 0px;" class="">Actually I’m a little worried that this could be resulting in inefficient code because people are specifying vectorize(enable) when in-fact they just want the fastest code according to the cost-model. Perhaps we should let the user specify vectorize without an option ‘#pragma loop vectorize’ to say ‘warn me if the structure of the loop cannot be vectorized otherwise select the fastest code according to the cost-model’.</div><div style="margin: 0px;" class=""><br class=""></div><div class="">Tyler</div><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 22, 2015, at 9:39 AM, Hal Finkel <<a href="mailto:hfinkel@anl.gov" class="">hfinkel@anl.gov</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">----- Original Message -----<br class=""><blockquote type="cite" class="">From: "Gonzalo BG" <<a href="mailto:gonzalobg88@gmail.com" class="">gonzalobg88@gmail.com</a>><br class="">To: "<a href="mailto:cfe-dev@cs.uiuc.edu" class="">cfe-dev@cs.uiuc.edu</a> Developers" <<a href="mailto:cfe-dev@cs.uiuc.edu" class="">cfe-dev@cs.uiuc.edu</a>><br class="">Sent: Wednesday, July 22, 2015 11:29:28 AM<br class="">Subject: [cfe-dev] Why doesn't pragma vectorize warn by default on failure<br class=""><br class=""><br class=""><br class="">Right now when writing code like:<br class=""><br class="">#pragma clang loop vectorize(enable) interleave(enable)<br class="">while(...) {<br class="">...<br class="">}<br class=""><br class="">one has to:<br class=""><br class=""><br class="">1) pass the compiler the flags "-Rpass-missed=loop-vectorize<br class="">-Rpass-analysis=loop-vectorize" to get a warning on all loops where<br class="">vectorization failed.<br class="">2) grep that output (which might be huge in a moderately sized<br class="">project) for that particular loop.<br class="">3) Check if vectorization worked.<br class="">4) Remove the compiler flags and recompile to keep working on<br class="">something else.<br class=""><br class="">This is really bad.<br class=""><br class=""><br class="">A user specified that a loop has to be vectorized. When I do this, it<br class="">is my intent that the loop gets vectorized. However, the current<br class="">workflow discourages users from actually checking that vectorization<br class="">worked. Furthermore, if months later something on that loop changes<br class="">that breaks vectorization, this happens silently.<br class=""><br class="">Why are things this way? Can something be done about this?<br class=""></blockquote><br class="">I agree, this seems like a nice idea. For loops that have the pragma, we should enable the pass "missed" informational messages from the vectorizer (unroller, etc.) by default. Patches are obviously welcome -- and/or, please file a bug report at <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=CnzuN65ENJ1H9py9XLiRvC_UQz6u3oG6GUNn7_wosSM&m=hkSCmg4XYFenGSSArQCB3NLQVFQb0hnLMeV5PMqmARM&s=rXBznwZ0B8Y7PZOGYvoqIzeXhDfDafh6KQDjUOl9WYU&e=" class="">https://llvm.org/bugs/</a><br class=""><br class=""> -Hal<br class=""><br class=""><blockquote type="cite" class=""><br class="">Could we get these warnings on by default for those loops explicitly<br class="">marked with the vectorize pragma?<br class="">_______________________________________________<br class="">cfe-dev mailing list<br class=""><a href="mailto:cfe-dev@cs.uiuc.edu" class="">cfe-dev@cs.uiuc.edu</a><br class="">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev<br class=""><br class=""></blockquote><br class="">-- <br class="">Hal Finkel<br class="">Assistant Computational Scientist<br class="">Leadership Computing Facility<br class="">Argonne National Laboratory<br class="">_______________________________________________<br class="">cfe-dev mailing list<br class=""><a href="mailto:cfe-dev@cs.uiuc.edu" class="">cfe-dev@cs.uiuc.edu</a><br class="">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev<br class=""></div></blockquote></div><br class=""></body></html>