r244526 - Append options for vectorization when pointer checking threshold is exceeded.
Tyler Nowicki via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 10 17:21:53 PDT 2015
Oh, sorry about that! I'll make that change.
Tyler
On Mon, Aug 10, 2015 at 4:35 PM, Hal Finkel <hfinkel at anl.gov> wrote:
> ----- Original Message -----
> > From: "Tyler Nowicki via cfe-commits" <cfe-commits at lists.llvm.org>
> > To: cfe-commits at 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 at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
> >
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150810/ea1f98c0/attachment-0001.html>
More information about the cfe-commits
mailing list