<div dir="ltr">Thanks Aaron!<div><br></div><div>Fixed in r244506.</div><div><br></div><div>Tyler</div>







</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 10, 2015 at 12:58 PM, Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Mon, Aug 10, 2015 at 3:56 PM, Tyler Nowicki via cfe-commits<br>
<<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
> Author: tnowicki<br>
> Date: Mon Aug 10 14:56:40 2015<br>
> New Revision: 244492<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=244492&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=244492&view=rev</a><br>
> Log:<br>
> Append options for floating-point commutivity when related diagnostics are produced.<br>
><br>
> With this patch clang appends the command line options that would allow vectorization when floating-point commutativity is required. Specifically those are enabling fast-math or specifying a loop hint.<br>
><br>
> Added:<br>
>     cfe/trunk/test/Frontend/optimization-remark-options.c<br>
> Modified:<br>
>     cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br>
>     cfe/trunk/lib/CodeGen/CodeGenAction.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=244492&r1=244491&r2=244492&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=244492&r1=244491&r2=244492&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original)<br>
> +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Mon Aug 10 14:56:40 2015<br>
> @@ -45,6 +45,10 @@ def remark_fe_backend_optimization_remar<br>
>      InGroup<BackendOptimizationRemarkMissed>;<br>
>  def remark_fe_backend_optimization_remark_analysis : Remark<"%0">, BackendInfo,<br>
>      InGroup<BackendOptimizationRemarkAnalysis>;<br>
> +def remark_fe_backend_optimization_remark_analysis_fpcommute : Remark<"%0; "<br>
> +    "allow commutativity by specifying â€˜#pragma clang loop vectorize(enable)’ "<br>
> +    "before the loop or by providing the compiler option â€˜-ffast-math’">,<br>
> +    BackendInfo, InGroup<BackendOptimizationRemarkAnalysis>;<br>
<br>
It looks like some non-ASCII characters snuck in here.<br>
<br>
>  def warn_fe_backend_optimization_failure : Warning<"%0">, BackendInfo,<br>
>      InGroup<BackendOptimizationFailure>, DefaultWarn;<br>
>  def note_fe_backend_optimization_remark_invalid_loc : Note<"could "<br>
><br>
> Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=244492&r1=244491&r2=244492&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=244492&r1=244491&r2=244492&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original)<br>
> +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Aug 10 14:56:40 2015<br>
> @@ -256,6 +256,8 @@ namespace clang {<br>
>          const llvm::DiagnosticInfoOptimizationRemarkMissed &D);<br>
>      void OptimizationRemarkHandler(<br>
>          const llvm::DiagnosticInfoOptimizationRemarkAnalysis &D);<br>
> +    void OptimizationRemarkHandler(<br>
> +        const llvm::DiagnosticInfoOptimizationRemarkAnalysisFPCommute &D);<br>
>      void OptimizationFailureHandler(<br>
>          const llvm::DiagnosticInfoOptimizationFailure &D);<br>
>    };<br>
> @@ -500,6 +502,17 @@ void BackendConsumer::OptimizationRemark<br>
>          D, diag::remark_fe_backend_optimization_remark_analysis);<br>
>  }<br>
><br>
> +void BackendConsumer::OptimizationRemarkHandler(<br>
> +    const llvm::DiagnosticInfoOptimizationRemarkAnalysisFPCommute &D) {<br>
> +  // Optimization analysis remarks are active only if the -Rpass-analysis<br>
> +  // flag has a regular expression that matches the name of the pass<br>
> +  // name in \p D.<br>
> +  if (CodeGenOpts.OptimizationRemarkAnalysisPattern &&<br>
> +      CodeGenOpts.OptimizationRemarkAnalysisPattern->match(D.getPassName()))<br>
> +    EmitOptimizationMessage(<br>
> +        D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute);<br>
> +}<br>
> +<br>
>  void BackendConsumer::OptimizationFailureHandler(<br>
>      const llvm::DiagnosticInfoOptimizationFailure &D) {<br>
>    EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure);<br>
> @@ -553,6 +566,12 @@ void BackendConsumer::DiagnosticHandlerI<br>
>      OptimizationRemarkHandler(<br>
>          cast<DiagnosticInfoOptimizationRemarkAnalysis>(DI));<br>
>      return;<br>
> +  case llvm::DK_OptimizationRemarkAnalysisFPCommute:<br>
> +    // Optimization remarks are always handled completely by this<br>
> +    // handler. There is no generic way of emitting them.<br>
> +    OptimizationRemarkHandler(<br>
> +        cast<DiagnosticInfoOptimizationRemarkAnalysisFPCommute>(DI));<br>
> +    return;<br>
>    case llvm::DK_OptimizationFailure:<br>
>      // Optimization failures are always handled completely by this<br>
>      // handler.<br>
><br>
> Added: cfe/trunk/test/Frontend/optimization-remark-options.c<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/optimization-remark-options.c?rev=244492&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/optimization-remark-options.c?rev=244492&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Frontend/optimization-remark-options.c (added)<br>
> +++ cfe/trunk/test/Frontend/optimization-remark-options.c Mon Aug 10 14:56:40 2015<br>
> @@ -0,0 +1,12 @@<br>
> +// RUN: %clang -O1 -fvectorize -Rpass-analysis=loop-vectorize -emit-llvm -S %s -o - 2>&1 | FileCheck %s<br>
> +<br>
> +// CHECK: {{.*}}:9:11: remark: loop not vectorized: vectorization requires changes in the order of operations, however IEEE 754 floating-point operations are not commutative; allow commutativity by specifying â€˜#pragma clang loop vectorize(enable)’ before the loop or by providing the compiler option â€˜-ffast-math’<br>
<br>
Here too.<br>
<br>
~Aaron<br>
<br>
> +<br>
> +double foo(int N) {<br>
> +  double v = 0.0;<br>
> +<br>
> +  for (int i = 0; i < N; i++)<br>
> +    v = v + 1.0;<br>
> +<br>
> +  return v;<br>
> +}<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>