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