Oh, sorry about that! I'll make that change. Tyler
On Mon, Aug 10, 2015 at 4:35 PM, Hal Finkel <hfin...@anl.gov> wrote: > ----- 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