----- Original Message ----- > From: "Tyler Nowicki via cfe-commits" <cfe-commits@lists.llvm.org> > To: cfe-commits@lists.llvm.org > Sent: Monday, August 10, 2015 6:05:17 PM > Subject: r244526 - Append options for vectorization when pointer checking > threshold is exceeded. > > Author: tnowicki > Date: Mon Aug 10 18:05:16 2015 > New Revision: 244526 > > URL: http://llvm.org/viewvc/llvm-project?rev=244526&view=rev > Log: > Append options for vectorization when pointer checking threshold is > exceeded. > > Following one of the appended options will allow the loop to be > vectorized. We do not include a command line option for modifying > the pointer checking threshold because there is no clang-level > interface for this currently. > > Modified: > cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td > cfe/trunk/lib/CodeGen/CodeGenAction.cpp > cfe/trunk/test/Frontend/optimization-remark-options.c > > Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=244526&r1=244525&r2=244526&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td > (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Mon Aug > 10 18:05:16 2015 > @@ -49,6 +49,12 @@ def remark_fe_backend_optimization_remar > "allow commutativity by specifying '#pragma clang loop > vectorize(enable)' " > "before the loop or by providing the compiler option > '-ffast-math'">, > BackendInfo, InGroup<BackendOptimizationRemarkAnalysis>; > +def remark_fe_backend_optimization_remark_analysis_aliasing : > Remark<"%0; " > + "avoid runtime pointer checking when you know the arrays will > always be " > + "independent by specifying '#pragma clang loop > vectorize(assume_safety)' " > + "before the loop or by specifying 'restrict' on the array > arguments. "
Hi Tyler, Sorry I missed this earlier, but this needs to say '__restrict__' (or '__restrict') when compiling in C++ mode because 'restrict' is not a valid keyword in C++. Thanks again, Hal > + "Erroneous results will occur if these options are incorrectly > applied!">, > + BackendInfo, InGroup<BackendOptimizationRemarkAnalysis>; > 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=244526&r1=244525&r2=244526&view=diff > ============================================================================== > --- cfe/trunk/lib/CodeGen/CodeGenAction.cpp (original) > +++ cfe/trunk/lib/CodeGen/CodeGenAction.cpp Mon Aug 10 18:05:16 2015 > @@ -258,6 +258,8 @@ namespace clang { > const llvm::DiagnosticInfoOptimizationRemarkAnalysis &D); > void OptimizationRemarkHandler( > const > llvm::DiagnosticInfoOptimizationRemarkAnalysisFPCommute > &D); > + void OptimizationRemarkHandler( > + const llvm::DiagnosticInfoOptimizationRemarkAnalysisAliasing > &D); > void OptimizationFailureHandler( > const llvm::DiagnosticInfoOptimizationFailure &D); > }; > @@ -513,6 +515,17 @@ void BackendConsumer::OptimizationRemark > D, > diag::remark_fe_backend_optimization_remark_analysis_fpcommute); > } > > +void BackendConsumer::OptimizationRemarkHandler( > + const llvm::DiagnosticInfoOptimizationRemarkAnalysisAliasing &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_aliasing); > +} > + > void BackendConsumer::OptimizationFailureHandler( > const llvm::DiagnosticInfoOptimizationFailure &D) { > EmitOptimizationMessage(D, > diag::warn_fe_backend_optimization_failure); > @@ -572,6 +585,12 @@ void BackendConsumer::DiagnosticHandlerI > OptimizationRemarkHandler( > cast<DiagnosticInfoOptimizationRemarkAnalysisFPCommute>(DI)); > return; > + case llvm::DK_OptimizationRemarkAnalysisAliasing: > + // Optimization remarks are always handled completely by this > + // handler. There is no generic way of emitting them. > + OptimizationRemarkHandler( > + cast<DiagnosticInfoOptimizationRemarkAnalysisAliasing>(DI)); > + return; > case llvm::DK_OptimizationFailure: > // Optimization failures are always handled completely by this > // handler. > > Modified: cfe/trunk/test/Frontend/optimization-remark-options.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/optimization-remark-options.c?rev=244526&r1=244525&r2=244526&view=diff > ============================================================================== > --- cfe/trunk/test/Frontend/optimization-remark-options.c (original) > +++ cfe/trunk/test/Frontend/optimization-remark-options.c Mon Aug 10 > 18:05:16 2015 > @@ -10,3 +10,12 @@ double foo(int N) { > > return v; > } > + > +// CHECK: {{.*}}:18:13: remark: loop not vectorized: cannot prove > pointers refer to independent arrays in memory. The loop requires 9 > runtime independence checks to vectorize the loop, but that would > exceed the limit of 8 checks; avoid runtime pointer checking when > you know the arrays will always be independent by specifying > '#pragma clang loop vectorize(assume_safety)' before the loop or by > specifying 'restrict' on the array arguments. Erroneous results will > occur if these options are incorrectly applied! > + > +void foo2(int *dw, int *uw, int *A, int *B, int *C, int *D, int N) { > + for (int i = 0; i < N; i++) { > + dw[i] = A[i] + B[i - 1] + C[i - 2] + D[i - 3]; > + uw[i] = A[i] + B[i + 1] + C[i + 2] + D[i + 3]; > + } > +} > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > -- Hal Finkel Assistant Computational Scientist Leadership Computing Facility Argonne National Laboratory _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits