On Mon, Aug 10, 2015 at 3:56 PM, Tyler Nowicki via cfe-commits <cfe-commits@lists.llvm.org> wrote: > Author: tnowicki > Date: Mon Aug 10 14:56:40 2015 > New Revision: 244492 > > URL: http://llvm.org/viewvc/llvm-project?rev=244492&view=rev > Log: > Append options for floating-point commutivity when related diagnostics are > produced. > > 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. > > Added: > cfe/trunk/test/Frontend/optimization-remark-options.c > Modified: > cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td > cfe/trunk/lib/CodeGen/CodeGenAction.cpp > > Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=244492&r1=244491&r2=244492&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Mon Aug 10 > 14:56:40 2015 > @@ -45,6 +45,10 @@ def remark_fe_backend_optimization_remar > InGroup<BackendOptimizationRemarkMissed>; > def remark_fe_backend_optimization_remark_analysis : Remark<"%0">, > BackendInfo, > InGroup<BackendOptimizationRemarkAnalysis>; > +def remark_fe_backend_optimization_remark_analysis_fpcommute : Remark<"%0; " > + "allow commutativity by specifying ‘#pragma clang loop > vectorize(enable)’ " > + "before the loop or by providing the compiler option ‘-ffast-math’">, > + BackendInfo, InGroup<BackendOptimizationRemarkAnalysis>;
It looks like some non-ASCII characters snuck in here. > def warn_fe_backend_optimization_failure : Warning<"%0">, BackendInfo, > InGroup<BackendOptimizationFailure>, DefaultWarn; > def note_fe_backend_optimization_remark_invalid_loc : Note<"could " > > Modified: cfe/trunk/lib/CodeGen/CodeGenAction.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenAction.cpp?rev=244492&r1=244491&r2=244492&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original) > +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Aug 10 14:56:40 2015 > @@ -256,6 +256,8 @@ namespace clang { > const llvm::DiagnosticInfoOptimizationRemarkMissed &D); > void OptimizationRemarkHandler( > const llvm::DiagnosticInfoOptimizationRemarkAnalysis &D); > + void OptimizationRemarkHandler( > + const llvm::DiagnosticInfoOptimizationRemarkAnalysisFPCommute &D); > void OptimizationFailureHandler( > const llvm::DiagnosticInfoOptimizationFailure &D); > }; > @@ -500,6 +502,17 @@ void BackendConsumer::OptimizationRemark > D, diag::remark_fe_backend_optimization_remark_analysis); > } > > +void BackendConsumer::OptimizationRemarkHandler( > + const llvm::DiagnosticInfoOptimizationRemarkAnalysisFPCommute &D) { > + // Optimization analysis remarks are active only if the -Rpass-analysis > + // flag has a regular expression that matches the name of the pass > + // name in \p D. > + if (CodeGenOpts.OptimizationRemarkAnalysisPattern && > + CodeGenOpts.OptimizationRemarkAnalysisPattern->match(D.getPassName())) > + EmitOptimizationMessage( > + D, diag::remark_fe_backend_optimization_remark_analysis_fpcommute); > +} > + > void BackendConsumer::OptimizationFailureHandler( > const llvm::DiagnosticInfoOptimizationFailure &D) { > EmitOptimizationMessage(D, diag::warn_fe_backend_optimization_failure); > @@ -553,6 +566,12 @@ void BackendConsumer::DiagnosticHandlerI > OptimizationRemarkHandler( > cast<DiagnosticInfoOptimizationRemarkAnalysis>(DI)); > return; > + case llvm::DK_OptimizationRemarkAnalysisFPCommute: > + // Optimization remarks are always handled completely by this > + // handler. There is no generic way of emitting them. > + OptimizationRemarkHandler( > + cast<DiagnosticInfoOptimizationRemarkAnalysisFPCommute>(DI)); > + return; > case llvm::DK_OptimizationFailure: > // Optimization failures are always handled completely by this > // handler. > > Added: cfe/trunk/test/Frontend/optimization-remark-options.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/optimization-remark-options.c?rev=244492&view=auto > ============================================================================== > --- cfe/trunk/test/Frontend/optimization-remark-options.c (added) > +++ cfe/trunk/test/Frontend/optimization-remark-options.c Mon Aug 10 14:56:40 > 2015 > @@ -0,0 +1,12 @@ > +// RUN: %clang -O1 -fvectorize -Rpass-analysis=loop-vectorize -emit-llvm -S > %s -o - 2>&1 | FileCheck %s > + > +// 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’ Here too. ~Aaron > + > +double foo(int N) { > + double v = 0.0; > + > + for (int i = 0; i < N; i++) > + v = v + 1.0; > + > + return v; > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits