r202360 - [OPENMP] First changes for Parsing and Sema for 'omp simd' directive support

Alexander Musman alexander.musman at gmail.com
Thu Feb 27 06:45:38 PST 2014


Hi Aaron,

This warning is due to 'omp simd' had no allowed clauses in the first patch.
I hope to fix this soon by adding clauses (I will send first clause for
review tomorrow or early next week).


2014-02-27 18:44 GMT+04:00 Alexander Musman <alexander.musman at gmail.com>:

> Hi Aaron,
>
> This warning is due to 'omp simd' had no allowed clauses in the first
> patch.
> I hope to fix this soon by adding clauses (I will send first clause for
> review tomorrow or early next week).
>
>
>
> 2014-02-27 18:21 GMT+04:00 Aaron Ballman <aaron at aaronballman.com>:
>
> On Thu, Feb 27, 2014 at 3:29 AM, Alexey Bataev <a.bataev at hotmail.com>
>> wrote:
>> > Author: abataev
>> > Date: Thu Feb 27 02:29:12 2014
>> > New Revision: 202360
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=202360&view=rev
>> > Log:
>> > [OPENMP] First changes for Parsing and Sema for 'omp simd' directive
>> support
>> >
>> > Added:
>> >     cfe/trunk/test/OpenMP/simd_ast_print.cpp   (with props)
>> >     cfe/trunk/test/OpenMP/simd_misc_messages.c   (with props)
>> > Modified:
>> >     cfe/trunk/include/clang-c/Index.h
>> >     cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>> >     cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
>> >     cfe/trunk/include/clang/AST/StmtOpenMP.h
>> >     cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> >     cfe/trunk/include/clang/Basic/OpenMPKinds.def
>> >     cfe/trunk/include/clang/Basic/StmtNodes.td
>> >     cfe/trunk/include/clang/Sema/Sema.h
>> >     cfe/trunk/include/clang/Serialization/ASTBitCodes.h
>> >     cfe/trunk/lib/AST/Stmt.cpp
>> >     cfe/trunk/lib/AST/StmtPrinter.cpp
>> >     cfe/trunk/lib/AST/StmtProfile.cpp
>> >     cfe/trunk/lib/Basic/OpenMPKinds.cpp
>> >     cfe/trunk/lib/CodeGen/CGStmt.cpp
>> >     cfe/trunk/lib/Parse/ParseOpenMP.cpp
>> >     cfe/trunk/lib/Sema/SemaOpenMP.cpp
>> >     cfe/trunk/lib/Sema/TreeTransform.h
>> >     cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
>> >     cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
>> >     cfe/trunk/lib/StaticAnalyzer/Core/ExprEngine.cpp
>> >     cfe/trunk/tools/libclang/CIndex.cpp
>> >     cfe/trunk/tools/libclang/CXCursor.cpp
>> >
>> > Modified: cfe/trunk/include/clang-c/Index.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang-c/Index.h (original)
>> > +++ cfe/trunk/include/clang-c/Index.h Thu Feb 27 02:29:12 2014
>> > @@ -2135,7 +2135,11 @@ enum CXCursorKind {
>> >     */
>> >    CXCursor_OMPParallelDirective          = 232,
>> >
>> > -  CXCursor_LastStmt                      =
>> CXCursor_OMPParallelDirective,
>> > +  /** \brief OpenMP simd directive.
>> > +   */
>> > +  CXCursor_OMPSimdDirective              = 233,
>> > +
>> > +  CXCursor_LastStmt                      = CXCursor_OMPSimdDirective,
>> >
>> >    /**
>> >     * \brief Cursor that represents the translation unit itself.
>> >
>> > Modified: cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h (original)
>> > +++ cfe/trunk/include/clang/AST/DataRecursiveASTVisitor.h Thu Feb 27
>> 02:29:12 2014
>> > @@ -424,6 +424,7 @@ private:
>> >    bool TraverseFunctionHelper(FunctionDecl *D);
>> >    bool TraverseVarHelper(VarDecl *D);
>> >    bool TraverseOMPClause(OMPClause *C);
>> > +  bool TraverseOMPExecutableDirective(OMPExecutableDirective *S);
>> >  #define OPENMP_CLAUSE(Name, Class)
>>  \
>> >    bool Visit##Class(Class *C);
>> >  #include "clang/Basic/OpenMPKinds.def"
>> > @@ -2331,11 +2332,22 @@ DEF_TRAVERSE_STMT(ObjCDictionaryLiteral,
>> >  DEF_TRAVERSE_STMT(AsTypeExpr, { })
>> >
>> >  // OpenMP directives.
>> > -DEF_TRAVERSE_STMT(OMPParallelDirective, {
>> > +template<typename Derived>
>> > +bool DataRecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
>> > +                                               OMPExecutableDirective
>> *S) {
>> >    ArrayRef<OMPClause *> Clauses = S->clauses();
>> >    for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E =
>> Clauses.end();
>> >         I != E; ++I)
>> >      if (!TraverseOMPClause(*I)) return false;
>> > +  return true;
>> > +}
>> > +
>> > +DEF_TRAVERSE_STMT(OMPParallelDirective, {
>> > +  if (!TraverseOMPExecutableDirective(S)) return false;
>> > +})
>> > +
>> > +DEF_TRAVERSE_STMT(OMPSimdDirective, {
>> > +  if (!TraverseOMPExecutableDirective(S)) return false;
>> >  })
>> >
>> >  // OpenMP clauses.
>> >
>> > Modified: cfe/trunk/include/clang/AST/RecursiveASTVisitor.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/RecursiveASTVisitor.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/AST/RecursiveASTVisitor.h (original)
>> > +++ cfe/trunk/include/clang/AST/RecursiveASTVisitor.h Thu Feb 27
>> 02:29:12 2014
>> > @@ -441,6 +441,7 @@ private:
>> >    bool TraverseFunctionHelper(FunctionDecl *D);
>> >    bool TraverseVarHelper(VarDecl *D);
>> >    bool TraverseOMPClause(OMPClause *C);
>> > +  bool TraverseOMPExecutableDirective(OMPExecutableDirective *S);
>> >  #define OPENMP_CLAUSE(Name, Class)
>>  \
>> >    bool Visit##Class(Class *C);
>> >  #include "clang/Basic/OpenMPKinds.def"
>> > @@ -2355,11 +2356,22 @@ DEF_TRAVERSE_STMT(ObjCDictionaryLiteral,
>> >  DEF_TRAVERSE_STMT(AsTypeExpr, { })
>> >
>> >  // OpenMP directives.
>> > -DEF_TRAVERSE_STMT(OMPParallelDirective, {
>> > +template<typename Derived>
>> > +bool RecursiveASTVisitor<Derived>::TraverseOMPExecutableDirective(
>> > +                                           OMPExecutableDirective *S) {
>> >    ArrayRef<OMPClause *> Clauses = S->clauses();
>> >    for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E =
>> Clauses.end();
>> >         I != E; ++I)
>> >      if (!TraverseOMPClause(*I)) return false;
>> > +  return true;
>> > +}
>> > +
>> > +DEF_TRAVERSE_STMT(OMPParallelDirective, {
>> > +  if (!TraverseOMPExecutableDirective(S)) return false;
>> > +})
>> > +
>> > +DEF_TRAVERSE_STMT(OMPSimdDirective, {
>> > +  if (!TraverseOMPExecutableDirective(S)) return false;
>> >  })
>> >
>> >  // OpenMP clauses.
>> >
>> > Modified: cfe/trunk/include/clang/AST/StmtOpenMP.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/StmtOpenMP.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/AST/StmtOpenMP.h (original)
>> > +++ cfe/trunk/include/clang/AST/StmtOpenMP.h Thu Feb 27 02:29:12 2014
>> > @@ -140,17 +140,18 @@ class OMPParallelDirective : public OMPE
>> >    /// \param EndLoc Ending Location of the directive.
>> >    ///
>> >    OMPParallelDirective(SourceLocation StartLoc, SourceLocation EndLoc,
>> > -                       unsigned N)
>> > +                       unsigned NumClauses)
>> >        : OMPExecutableDirective(this, OMPParallelDirectiveClass,
>> OMPD_parallel,
>> > -                               StartLoc, EndLoc, N, 1) {}
>> > +                               StartLoc, EndLoc, NumClauses, 1) {}
>> >
>> >    /// \brief Build an empty directive.
>> >    ///
>> > -  /// \param N Number of clauses.
>> > +  /// \param NumClauses Number of clauses.
>> >    ///
>> > -  explicit OMPParallelDirective(unsigned N)
>> > +  explicit OMPParallelDirective(unsigned NumClauses)
>> >        : OMPExecutableDirective(this, OMPParallelDirectiveClass,
>> OMPD_parallel,
>> > -                               SourceLocation(), SourceLocation(), N,
>> 1) {}
>> > +                               SourceLocation(), SourceLocation(),
>> > +                               NumClauses, 1) {}
>> >
>> >  public:
>> >    /// \brief Creates directive with a list of \a Clauses.
>> > @@ -168,9 +169,10 @@ public:
>> >    /// \brief Creates an empty directive with the place for \a N
>> clauses.
>> >    ///
>> >    /// \param C AST context.
>> > -  /// \param N The number of clauses.
>> > +  /// \param NumClauses Number of clauses.
>> >    ///
>> > -  static OMPParallelDirective *CreateEmpty(const ASTContext &C,
>> unsigned N,
>> > +  static OMPParallelDirective *CreateEmpty(const ASTContext &C,
>> > +                                           unsigned NumClauses,
>> >                                             EmptyShell);
>> >
>> >    static bool classof(const Stmt *T) {
>> > @@ -178,6 +180,76 @@ public:
>> >    }
>> >  };
>> >
>> > +/// \brief This represents '#pragma omp simd' directive.
>> > +///
>> > +/// \code
>> > +/// #pragma omp simd private(a,b) linear(i,j:s) reduction(+:c,d)
>> > +/// \endcode
>> > +/// In this example directive '#pragma omp simd' has clauses 'private'
>> > +/// with the variables 'a' and 'b', 'linear' with variables 'i', 'j'
>> and
>> > +/// linear step 's', 'reduction' with operator '+' and variables 'c'
>> and 'd'.
>> > +///
>> > +class OMPSimdDirective : public OMPExecutableDirective {
>> > +  friend class ASTStmtReader;
>> > +  /// \brief Number of collapsed loops as specified by 'collapse'
>> clause.
>> > +  unsigned CollapsedNum;
>> > +  /// \brief Build directive with the given start and end location.
>> > +  ///
>> > +  /// \param StartLoc Starting location of the directive kind.
>> > +  /// \param EndLoc Ending location of the directive.
>> > +  /// \param CollapsedNum Number of collapsed nested loops.
>> > +  /// \param NumClauses Number of clauses.
>> > +  ///
>> > +  OMPSimdDirective(SourceLocation StartLoc, SourceLocation EndLoc,
>> > +                  unsigned CollapsedNum, unsigned NumClauses)
>> > +    : OMPExecutableDirective(this, OMPSimdDirectiveClass, OMPD_simd,
>> > +                             StartLoc, EndLoc, NumClauses, 1),
>> > +      CollapsedNum(CollapsedNum) { }
>> > +
>> > +  /// \brief Build an empty directive.
>> > +  ///
>> > +  /// \param CollapsedNum Number of collapsed nested loops.
>> > +  /// \param NumClauses Number of clauses.
>> > +  ///
>> > +  explicit OMPSimdDirective(unsigned CollapsedNum, unsigned NumClauses)
>> > +    : OMPExecutableDirective(this, OMPSimdDirectiveClass, OMPD_simd,
>> > +                             SourceLocation(), SourceLocation(),
>> > +                             NumClauses, 1),
>> > +                             CollapsedNum(CollapsedNum) { }
>> > +public:
>> > +  /// \brief Creates directive with a list of \a Clauses.
>> > +  ///
>> > +  /// \param C AST context.
>> > +  /// \param StartLoc Starting location of the directive kind.
>> > +  /// \param EndLoc Ending Location of the directive.
>> > +  /// \param Clauses List of clauses.
>> > +  /// \param AssociatedStmt Statement, associated with the directive.
>> > +  ///
>> > +  static OMPSimdDirective *Create(const ASTContext &C,
>> > +                                  SourceLocation StartLoc,
>> > +                                  SourceLocation EndLoc,
>> > +                                  ArrayRef<OMPClause *> Clauses,
>> > +                                  Stmt *AssociatedStmt);
>> > +
>> > +  /// \brief Creates an empty directive with the place
>> > +  /// for \a NumClauses clauses.
>> > +  ///
>> > +  /// \param C AST context.
>> > +  /// \param CollapsedNum Number of collapsed nested loops.
>> > +  /// \param NumClauses Number of clauses.
>> > +  ///
>> > +  static OMPSimdDirective *CreateEmpty(const ASTContext &C,
>> > +                                       unsigned NumClauses,
>> > +                                       unsigned CollapsedNum,
>> > +                                       EmptyShell);
>> > +
>> > +  unsigned getCollapsedNumber() const { return CollapsedNum; }
>> > +
>> > +  static bool classof(const Stmt *T) {
>> > +    return T->getStmtClass() == OMPSimdDirectiveClass;
>> > +  }
>> > +};
>> > +
>> >  } // end namespace clang
>> >
>> >  #endif
>> >
>> > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>> > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Feb 27
>> 02:29:12 2014
>> > @@ -6835,24 +6835,26 @@ def err_omp_private_incomplete_type : Er
>> >    "a private variable with incomplete type %0">;
>> >  def err_omp_firstprivate_incomplete_type : Error<
>> >    "a firstprivate variable with incomplete type %0">;
>> > -def err_omp_unexpected_clause_value : Error <
>> > +def err_omp_unexpected_clause_value : Error<
>> >    "expected %0 in OpenMP clause '%1'">;
>> > -def err_omp_expected_var_name : Error <
>> > +def err_omp_expected_var_name : Error<
>> >    "expected variable name">;
>> > -def err_omp_required_method : Error <
>> > +def err_omp_required_method : Error<
>> >    "%0 variable must have an accessible, unambiguous %select{default
>> constructor|copy constructor|copy assignment operator|'%2'|destructor}1">;
>> >  def err_omp_clause_ref_type_arg : Error<
>> >    "arguments of OpenMP clause '%0' cannot be of reference type %1">;
>> >  def err_omp_threadprivate_incomplete_type : Error<
>> >    "threadprivate variable with incomplete type %0">;
>> > -def err_omp_no_dsa_for_variable : Error <
>> > +def err_omp_no_dsa_for_variable : Error<
>> >    "variable %0 must have explicitly specified data sharing
>> attributes">;
>> >  def err_omp_wrong_dsa : Error<
>> >    "%0 variable cannot be %1">;
>> > -def note_omp_explicit_dsa : Note <
>> > +def note_omp_explicit_dsa : Note<
>> >    "defined as %0">;
>> > -def note_omp_predetermined_dsa : Note <
>> > +def note_omp_predetermined_dsa : Note<
>> >    "predetermined as %0">;
>> > +def err_omp_not_for : Error<
>> > +  "statement after '#pragma omp %0' must be a for loop">;
>> >  } // end of OpenMP category
>> >
>> >  let CategoryName = "Related Result Type Issue" in {
>> >
>> > Modified: cfe/trunk/include/clang/Basic/OpenMPKinds.def
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/OpenMPKinds.def?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/Basic/OpenMPKinds.def (original)
>> > +++ cfe/trunk/include/clang/Basic/OpenMPKinds.def Thu Feb 27 02:29:12
>> 2014
>> > @@ -21,6 +21,9 @@
>> >  #ifndef OPENMP_PARALLEL_CLAUSE
>> >  #  define OPENMP_PARALLEL_CLAUSE(Name)
>> >  #endif
>> > +#ifndef OPENMP_SIMD_CLAUSE
>> > +#  define OPENMP_SIMD_CLAUSE(Name)
>> > +#endif
>> >  #ifndef OPENMP_DEFAULT_KIND
>> >  #  define OPENMP_DEFAULT_KIND(Name)
>> >  #endif
>> > @@ -29,6 +32,7 @@
>> >  OPENMP_DIRECTIVE(threadprivate)
>> >  OPENMP_DIRECTIVE(parallel)
>> >  OPENMP_DIRECTIVE(task)
>> > +OPENMP_DIRECTIVE(simd)
>> >
>> >  // OpenMP clauses.
>> >  OPENMP_CLAUSE(if, OMPIfClause)
>> > @@ -44,6 +48,8 @@ OPENMP_PARALLEL_CLAUSE(private)
>> >  OPENMP_PARALLEL_CLAUSE(firstprivate)
>> >  OPENMP_PARALLEL_CLAUSE(shared)
>> >
>> > +// FIXME: clauses allowed for directive 'omp simd'.
>> > +
>> >  // Static attributes for 'default' clause.
>> >  OPENMP_DEFAULT_KIND(none)
>> >  OPENMP_DEFAULT_KIND(shared)
>> > @@ -52,3 +58,5 @@ OPENMP_DEFAULT_KIND(shared)
>> >  #undef OPENMP_DIRECTIVE
>> >  #undef OPENMP_CLAUSE
>> >  #undef OPENMP_PARALLEL_CLAUSE
>> > +#undef OPENMP_SIMD_CLAUSE
>> > +
>> >
>> > Modified: cfe/trunk/include/clang/Basic/StmtNodes.td
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/StmtNodes.td?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/Basic/StmtNodes.td (original)
>> > +++ cfe/trunk/include/clang/Basic/StmtNodes.td Thu Feb 27 02:29:12 2014
>> > @@ -178,3 +178,4 @@ def AsTypeExpr : DStmt<Expr>;
>> >  // OpenMP Directives.
>> >  def OMPExecutableDirective : Stmt<1>;
>> >  def OMPParallelDirective : DStmt<OMPExecutableDirective>;
>> > +def OMPSimdDirective : DStmt<OMPExecutableDirective>;
>> >
>> > Modified: cfe/trunk/include/clang/Sema/Sema.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/Sema/Sema.h (original)
>> > +++ cfe/trunk/include/clang/Sema/Sema.h Thu Feb 27 02:29:12 2014
>> > @@ -7111,6 +7111,12 @@ public:
>> >                                            Stmt *AStmt,
>> >                                            SourceLocation StartLoc,
>> >                                            SourceLocation EndLoc);
>> > +  /// \brief Called on well-formed '\#pragma omp simd' after parsing
>> > +  /// of the associated statement.
>> > +  StmtResult ActOnOpenMPSimdDirective(ArrayRef<OMPClause *> Clauses,
>> > +                                      Stmt *AStmt,
>> > +                                      SourceLocation StartLoc,
>> > +                                      SourceLocation EndLoc);
>> >
>> >    OMPClause *ActOnOpenMPSingleExprClause(OpenMPClauseKind Kind,
>> >                                           Expr *Expr,
>> >
>> > Modified: cfe/trunk/include/clang/Serialization/ASTBitCodes.h
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTBitCodes.h?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/include/clang/Serialization/ASTBitCodes.h (original)
>> > +++ cfe/trunk/include/clang/Serialization/ASTBitCodes.h Thu Feb 27
>> 02:29:12 2014
>> > @@ -1333,6 +1333,7 @@ namespace clang {
>> >
>> >        // OpenMP drectives
>> >        STMT_OMP_PARALLEL_DIRECTIVE,
>> > +      STMT_OMP_SIMD_DIRECTIVE,
>> >
>> >        // ARC
>> >        EXPR_OBJC_BRIDGED_CAST,     // ObjCBridgedCastExpr
>> >
>> > Modified: cfe/trunk/lib/AST/Stmt.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Stmt.cpp?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/lib/AST/Stmt.cpp (original)
>> > +++ cfe/trunk/lib/AST/Stmt.cpp Thu Feb 27 02:29:12 2014
>> > @@ -1217,10 +1217,39 @@ OMPParallelDirective *OMPParallelDirecti
>> >  }
>> >
>> >  OMPParallelDirective *OMPParallelDirective::CreateEmpty(const
>> ASTContext &C,
>> > -                                                        unsigned N,
>> > +                                                        unsigned
>> NumClauses,
>> >                                                          EmptyShell) {
>> >    unsigned Size =
>> llvm::RoundUpToAlignment(sizeof(OMPParallelDirective),
>> >                                             llvm::alignOf<OMPClause
>> *>());
>> > -  void *Mem = C.Allocate(Size + sizeof(OMPClause *) * N + sizeof(Stmt
>> *));
>> > -  return new (Mem) OMPParallelDirective(N);
>> > +  void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
>> > +                         sizeof(Stmt *));
>> > +  return new (Mem) OMPParallelDirective(NumClauses);
>> >  }
>> > +
>> > +OMPSimdDirective *OMPSimdDirective::Create(const ASTContext &C,
>> > +                                           SourceLocation StartLoc,
>> > +                                           SourceLocation EndLoc,
>> > +                                           ArrayRef<OMPClause *>
>> Clauses,
>> > +                                           Stmt *AssociatedStmt) {
>> > +  unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective),
>> > +                                           llvm::alignOf<OMPClause
>> *>());
>> > +  void *Mem = C.Allocate(Size + sizeof(OMPClause *) * Clauses.size() +
>> > +                         sizeof(Stmt *));
>> > +  OMPSimdDirective *Dir = new (Mem) OMPSimdDirective(StartLoc, EndLoc,
>> > +                                                     1,
>> Clauses.size());
>> > +  Dir->setClauses(Clauses);
>> > +  Dir->setAssociatedStmt(AssociatedStmt);
>> > +  return Dir;
>> > +}
>> > +
>> > +OMPSimdDirective *OMPSimdDirective::CreateEmpty(const ASTContext &C,
>> > +                                                unsigned NumClauses,
>> > +                                                unsigned CollapsedNum,
>> > +                                                EmptyShell) {
>> > +  unsigned Size = llvm::RoundUpToAlignment(sizeof(OMPSimdDirective),
>> > +                                           llvm::alignOf<OMPClause
>> *>());
>> > +  void *Mem = C.Allocate(Size + sizeof(OMPClause *) * NumClauses +
>> > +                         sizeof(Stmt *));
>> > +  return new (Mem) OMPSimdDirective(CollapsedNum, NumClauses);
>> > +}
>> > +
>> >
>> > Modified: cfe/trunk/lib/AST/StmtPrinter.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtPrinter.cpp?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/lib/AST/StmtPrinter.cpp (original)
>> > +++ cfe/trunk/lib/AST/StmtPrinter.cpp Thu Feb 27 02:29:12 2014
>> > @@ -70,6 +70,7 @@ namespace  {
>> >      void PrintCallArgs(CallExpr *E);
>> >      void PrintRawSEHExceptHandler(SEHExceptStmt *S);
>> >      void PrintRawSEHFinallyStmt(SEHFinallyStmt *S);
>> > +    void PrintOMPExecutableDirective(OMPExecutableDirective *S);
>> >
>> >      void PrintExpr(Expr *E) {
>> >        if (E)
>> > @@ -89,7 +90,7 @@ namespace  {
>> >            return;
>> >        else StmtVisitor<StmtPrinter>::Visit(S);
>> >      }
>> > -
>> > +
>> >      void VisitStmt(Stmt *Node) LLVM_ATTRIBUTE_UNUSED {
>> >        Indent() << "<<unknown stmt type>>\n";
>> >      }
>> > @@ -656,11 +657,9 @@ void OMPClausePrinter::VisitOMPSharedCla
>> >  //  OpenMP directives printing methods
>> >
>>  //===----------------------------------------------------------------------===//
>> >
>> > -void StmtPrinter::VisitOMPParallelDirective(OMPParallelDirective
>> *Node) {
>> > -  Indent() << "#pragma omp parallel ";
>> > -
>> > +void StmtPrinter::PrintOMPExecutableDirective(OMPExecutableDirective
>> *S) {
>> >    OMPClausePrinter Printer(OS, Policy);
>> > -  ArrayRef<OMPClause *> Clauses = Node->clauses();
>> > +  ArrayRef<OMPClause *> Clauses = S->clauses();
>> >    for (ArrayRef<OMPClause *>::iterator I = Clauses.begin(), E =
>> Clauses.end();
>> >         I != E; ++I)
>> >      if (*I && !(*I)->isImplicit()) {
>> > @@ -668,13 +667,24 @@ void StmtPrinter::VisitOMPParallelDirect
>> >        OS << ' ';
>> >      }
>> >    OS << "\n";
>> > -  if (Node->getAssociatedStmt()) {
>> > -    assert(isa<CapturedStmt>(Node->getAssociatedStmt()) &&
>> > +  if (S->getAssociatedStmt()) {
>> > +    assert(isa<CapturedStmt>(S->getAssociatedStmt()) &&
>> >             "Expected captured statement!");
>> > -    Stmt *CS =
>> cast<CapturedStmt>(Node->getAssociatedStmt())->getCapturedStmt();
>> > +    Stmt *CS =
>> cast<CapturedStmt>(S->getAssociatedStmt())->getCapturedStmt();
>> >      PrintStmt(CS);
>> >    }
>> >  }
>> > +
>> > +void StmtPrinter::VisitOMPParallelDirective(OMPParallelDirective
>> *Node) {
>> > +  Indent() << "#pragma omp parallel ";
>> > +  PrintOMPExecutableDirective(Node);
>> > +}
>> > +
>> > +void StmtPrinter::VisitOMPSimdDirective(OMPSimdDirective *Node) {
>> > +  Indent() << "#pragma omp simd ";
>> > +  PrintOMPExecutableDirective(Node);
>> > +}
>> > +
>> >
>>  //===----------------------------------------------------------------------===//
>> >  //  Expr printing methods.
>> >
>>  //===----------------------------------------------------------------------===//
>> >
>> > Modified: cfe/trunk/lib/AST/StmtProfile.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/lib/AST/StmtProfile.cpp (original)
>> > +++ cfe/trunk/lib/AST/StmtProfile.cpp Thu Feb 27 02:29:12 2014
>> > @@ -293,7 +293,7 @@ void OMPClauseProfiler::VisitOMPSharedCl
>> >  }
>> >
>> >  void
>> > -StmtProfiler::VisitOMPParallelDirective(const OMPParallelDirective *S)
>> {
>> > +StmtProfiler::VisitOMPExecutableDirective(const OMPExecutableDirective
>> *S) {
>> >    VisitStmt(S);
>> >    OMPClauseProfiler P(this);
>> >    ArrayRef<OMPClause *> Clauses = S->clauses();
>> > @@ -303,6 +303,14 @@ StmtProfiler::VisitOMPParallelDirective(
>> >        P.Visit(*I);
>> >  }
>> >
>> > +void StmtProfiler::VisitOMPParallelDirective(const
>> OMPParallelDirective *S) {
>> > +  VisitOMPExecutableDirective(S);
>> > +}
>> > +
>> > +void StmtProfiler::VisitOMPSimdDirective(const OMPSimdDirective *S) {
>> > +  VisitOMPExecutableDirective(S);
>> > +}
>> > +
>> >  void StmtProfiler::VisitExpr(const Expr *S) {
>> >    VisitStmt(S);
>> >  }
>> >
>> > Modified: cfe/trunk/lib/Basic/OpenMPKinds.cpp
>> > URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/OpenMPKinds.cpp?rev=202360&r1=202359&r2=202360&view=diff
>> >
>> ==============================================================================
>> > --- cfe/trunk/lib/Basic/OpenMPKinds.cpp (original)
>> > +++ cfe/trunk/lib/Basic/OpenMPKinds.cpp Thu Feb 27 02:29:12 2014
>> > @@ -125,6 +125,15 @@ bool clang::isAllowedClauseForDirective(
>> >        break;
>> >      }
>> >      break;
>> > +  case OMPD_simd:
>> > +    switch (CKind) {
>> > +#define OPENMP_SIMD_CLAUSE(Name) \
>> > +    case OMPC_##Name: return true;
>> > +#include "clang/Basic/OpenMPKinds.def"
>> > +    default:
>> > +      break;
>>
>> This is causing a warning for me in MSVC:
>>
>> Warning 1 warning C4065: switch statement contains 'default' but no
>> 'case' labels E:\llvm\llvm\tools\clang\lib\Basic\OpenMPKinds.cpp 135
>>
>> Will this switch statement gain content in the near future, or is this
>> something we can remove for the time being?
>>
>> ~Aaron
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>
>
>
> --
> Best regards,
> Alexander Musman
> +79154687051
> skype: alexander.musman
>
>


-- 
Best regards,
Alexander Musman
+79154687051
skype: alexander.musman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140227/19ac7a55/attachment.html>


More information about the cfe-commits mailing list