mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 02:33:06 +01:00
[openacc][openmp] Reduce number of generated file and prefer inclusion of .inc
Follow up from D92955 and D83636. This patch makes the base cpp files OMP.cpp and ACC.cpp normal files and they now include the XXX.inc file generated by tablegen. This reduces the number of file generated by the DirectiveEmitter backend and makes it closer to the proposal in D83636. Reviewed By: Meinersbur Differential Revision: https://reviews.llvm.org/D93560
This commit is contained in:
parent
c1e5a01132
commit
49cf4f2457
@ -23,7 +23,6 @@ def OpenACC : DirectiveLanguage {
|
||||
let clausePrefix = "ACCC_";
|
||||
let makeEnumAvailableInNamespace = true;
|
||||
let enableBitmaskEnumInNamespace = true;
|
||||
let includeHeader = "llvm/Frontend/OpenACC/ACC.h.inc";
|
||||
let clauseEnumSetClass = "AccClauseSet";
|
||||
let flangClauseBaseClass = "AccClause";
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
set(LLVM_TARGET_DEFINITIONS ACC.td)
|
||||
tablegen(LLVM ACC.h.inc --gen-directive-decl)
|
||||
tablegen(LLVM ACC.inc --gen-directive-gen)
|
||||
tablegen(LLVM ACC.inc --gen-directive-impl)
|
||||
add_public_tablegen_target(acc_gen)
|
||||
|
@ -1,4 +1,4 @@
|
||||
set(LLVM_TARGET_DEFINITIONS OMP.td)
|
||||
tablegen(LLVM OMP.h.inc --gen-directive-decl)
|
||||
tablegen(LLVM OMP.inc --gen-directive-gen)
|
||||
tablegen(LLVM OMP.inc --gen-directive-impl)
|
||||
add_public_tablegen_target(omp_gen)
|
||||
|
@ -23,7 +23,6 @@ def OpenMP : DirectiveLanguage {
|
||||
let clausePrefix = "OMPC_";
|
||||
let makeEnumAvailableInNamespace = true;
|
||||
let enableBitmaskEnumInNamespace = true;
|
||||
let includeHeader = "llvm/Frontend/OpenMP/OMP.h.inc";
|
||||
let clauseEnumSetClass = "OmpClauseSet";
|
||||
let flangClauseBaseClass = "OmpClause";
|
||||
}
|
||||
|
@ -30,10 +30,6 @@ public:
|
||||
return Def->getValueAsString("clausePrefix");
|
||||
}
|
||||
|
||||
StringRef getIncludeHeader() const {
|
||||
return Def->getValueAsString("includeHeader");
|
||||
}
|
||||
|
||||
StringRef getClauseEnumSetClass() const {
|
||||
return Def->getValueAsString("clauseEnumSetClass");
|
||||
}
|
||||
|
19
lib/Frontend/OpenACC/ACC.cpp
Normal file
19
lib/Frontend/OpenACC/ACC.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
//===- ACC.cpp ------ Collection of helpers for OpenACC -------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Frontend/OpenACC/ACC.h.inc"
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace acc;
|
||||
|
||||
#define GEN_DIRECTIVES_IMPL
|
||||
#include "llvm/Frontend/OpenACC/ACC.inc"
|
@ -1,9 +1,5 @@
|
||||
set(LLVM_TARGET_DEFINITIONS ${LLVM_MAIN_INCLUDE_DIR}/llvm/Frontend/OpenACC/ACC.td)
|
||||
tablegen(LLVM ACC.cpp --gen-directive-impl)
|
||||
add_public_tablegen_target(acc_cpp)
|
||||
|
||||
add_llvm_component_library(LLVMFrontendOpenACC
|
||||
ACC.cpp # Generated by tablegen above
|
||||
ACC.cpp
|
||||
|
||||
ADDITIONAL_HEADER_DIRS
|
||||
${LLVM_MAIN_INCLUDE_DIR}/llvm/Frontend
|
||||
@ -11,7 +7,6 @@ add_llvm_component_library(LLVMFrontendOpenACC
|
||||
|
||||
DEPENDS
|
||||
acc_gen
|
||||
acc_cpp
|
||||
)
|
||||
|
||||
target_link_libraries(LLVMFrontendOpenACC LLVMSupport)
|
||||
|
@ -1,9 +1,5 @@
|
||||
set(LLVM_TARGET_DEFINITIONS ${LLVM_MAIN_INCLUDE_DIR}/llvm/Frontend/OpenMP/OMP.td)
|
||||
tablegen(LLVM OMP.cpp --gen-directive-impl)
|
||||
add_public_tablegen_target(omp_cpp)
|
||||
|
||||
add_llvm_component_library(LLVMFrontendOpenMP
|
||||
OMP.cpp # Generated by tablegen above
|
||||
OMP.cpp
|
||||
OMPContext.cpp
|
||||
OMPIRBuilder.cpp
|
||||
|
||||
@ -14,7 +10,6 @@ add_llvm_component_library(LLVMFrontendOpenMP
|
||||
DEPENDS
|
||||
intrinsics_gen
|
||||
omp_gen
|
||||
omp_cpp
|
||||
|
||||
LINK_COMPONENTS
|
||||
Core
|
||||
|
19
lib/Frontend/OpenMP/OMP.cpp
Normal file
19
lib/Frontend/OpenMP/OMP.cpp
Normal file
@ -0,0 +1,19 @@
|
||||
//===- OMP.cpp ------ Collection of helpers for OpenMP --------------------===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Frontend/OpenMP/OMP.h.inc"
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
#include "llvm/ADT/StringSwitch.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
using namespace llvm;
|
||||
using namespace omp;
|
||||
|
||||
#define GEN_DIRECTIVES_IMPL
|
||||
#include "llvm/Frontend/OpenMP/OMP.inc"
|
@ -1,6 +1,5 @@
|
||||
// RUN: llvm-tblgen -gen-directive-decl -I %p/../../include %s | FileCheck -match-full-lines %s
|
||||
// RUN: llvm-tblgen -gen-directive-impl -I %p/../../include %s | FileCheck -match-full-lines %s -check-prefix=IMPL
|
||||
// RUN: llvm-tblgen -gen-directive-gen -I %p/../../include %s | FileCheck -match-full-lines %s -check-prefix=GEN
|
||||
|
||||
include "llvm/Frontend/Directive/DirectiveBase.td"
|
||||
|
||||
@ -101,12 +100,143 @@ def TDL_DirA : Directive<"dira"> {
|
||||
// CHECK-NEXT: #endif // LLVM_Tdl_INC
|
||||
|
||||
|
||||
// IMPL: #include "llvm/ADT/StringRef.h"
|
||||
// IMPL-NEXT: #include "llvm/ADT/StringSwitch.h"
|
||||
// IMPL-NEXT: #include "llvm/Support/ErrorHandling.h"
|
||||
// IMPL: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: using namespace llvm;
|
||||
// IMPL-NEXT: using namespace tdl;
|
||||
// IMPL-NEXT: namespace llvm {
|
||||
// IMPL-NEXT: namespace tdl {
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: // Sets for dira
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedClauses_TDLD_dira {
|
||||
// IMPL-NEXT: llvm::tdl::Clause::TDLC_clausea,
|
||||
// IMPL-NEXT: llvm::tdl::Clause::TDLC_clauseb,
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedOnceClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedExclusiveClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static requiredClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-NEXT: } // namespace tdl
|
||||
// IMPL-NEXT: } // namespace llvm
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: {
|
||||
// IMPL-NEXT: {llvm::tdl::Directive::TDLD_dira,
|
||||
// IMPL-NEXT: {
|
||||
// IMPL-NEXT: llvm::tdl::allowedClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::allowedOnceClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::allowedExclusiveClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::requiredClauses_TDLD_dira,
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-NEXT: },
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: EMPTY_CLASS(Clausea);
|
||||
// IMPL-NEXT: WRAPPER_CLASS(Clauseb, std::optional<IntExpr>);
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: Clausea
|
||||
// IMPL-NEXT: , Clauseb
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: NODE(TdlClause, Clausea)
|
||||
// IMPL-NEXT: NODE(TdlClause, Clauseb)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: void Before(const TdlClause::Clausea &) { Word("CLAUSEA"); }
|
||||
// IMPL-NEXT: void Unparse(const TdlClause::Clauseb &x) {
|
||||
// IMPL-NEXT: Word("CLAUSEB");
|
||||
// IMPL-NEXT: Walk("(", x.v, ")");
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_UNPARSE
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: void Enter(const parser::TdlClause::Clausea &);
|
||||
// IMPL-NEXT: void Enter(const parser::TdlClause::Clauseb &);
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: if constexpr (std::is_same_v<A, parser::TdlClause::Clausea>)
|
||||
// IMPL-NEXT: return llvm::tdl::Clause::TDLC_clausea;
|
||||
// IMPL-NEXT: if constexpr (std::is_same_v<A, parser::TdlClause::Clauseb>)
|
||||
// IMPL-NEXT: return llvm::tdl::Clause::TDLC_clauseb;
|
||||
// IMPL-NEXT: llvm_unreachable("Invalid Tdl Parser clause");
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_CLANG_CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef GEN_CLANG_CLAUSE_CLASS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifndef CLAUSE
|
||||
// IMPL-NEXT: #define CLAUSE(Enum, Str, Implicit)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-NEXT: #ifndef CLAUSE_CLASS
|
||||
// IMPL-NEXT: #define CLAUSE_CLASS(Enum, Str, Class)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-NEXT: #ifndef CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #define CLAUSE_NO_CLASS(Enum, Str)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #define __CLAUSE(Name, Class) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// IMPL-NEXT: CLAUSE_CLASS(TDLC_##Name, #Name, Class)
|
||||
// IMPL-NEXT: #define __CLAUSE_NO_CLASS(Name) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// IMPL-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, #Name)
|
||||
// IMPL-NEXT: #define __IMPLICIT_CLAUSE_CLASS(Name, Str, Class) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// IMPL-NEXT: CLAUSE_CLASS(TDLC_##Name, Str, Class)
|
||||
// IMPL-NEXT: #define __IMPLICIT_CLAUSE_NO_CLASS(Name, Str) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// IMPL-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, Str)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: __CLAUSE_NO_CLASS(clausea)
|
||||
// IMPL-NEXT: __CLAUSE_NO_CLASS(clauseb)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #undef __IMPLICIT_CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #undef __IMPLICIT_CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef __CLAUSE
|
||||
// IMPL-NEXT: #undef CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #undef CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef CLAUSE
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_CLANG_CLAUSE_CLASS
|
||||
// IMPL-EMPTY:
|
||||
|
||||
// IMPL: #ifdef GEN_DIRECTIVES_IMPL
|
||||
// IMPL-NEXT: #undef GEN_DIRECTIVES_IMPL
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: Directive llvm::tdl::getTdlDirectiveKind(llvm::StringRef Str) {
|
||||
// IMPL-NEXT: return llvm::StringSwitch<Directive>(Str)
|
||||
@ -177,102 +307,4 @@ def TDL_DirA : Directive<"dira"> {
|
||||
// IMPL-NEXT: llvm_unreachable("Invalid Tdl Directive kind");
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-EMPTY:
|
||||
|
||||
|
||||
|
||||
// GEN: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: namespace llvm {
|
||||
// GEN-NEXT: namespace tdl {
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: // Sets for dira
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedClauses_TDLD_dira {
|
||||
// GEN-NEXT: llvm::tdl::Clause::TDLC_clausea,
|
||||
// GEN-NEXT: llvm::tdl::Clause::TDLC_clauseb,
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedOnceClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedExclusiveClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static requiredClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-NEXT: } // namespace tdl
|
||||
// GEN-NEXT: } // namespace llvm
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: {
|
||||
// GEN-NEXT: {llvm::tdl::Directive::TDLD_dira,
|
||||
// GEN-NEXT: {
|
||||
// GEN-NEXT: llvm::tdl::allowedClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::allowedOnceClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::allowedExclusiveClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::requiredClauses_TDLD_dira,
|
||||
// GEN-NEXT: }
|
||||
// GEN-NEXT: },
|
||||
// GEN-NEXT: }
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: EMPTY_CLASS(Clausea);
|
||||
// GEN-NEXT: WRAPPER_CLASS(Clauseb, std::optional<IntExpr>);
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: Clausea
|
||||
// GEN-NEXT: , Clauseb
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-NEXT: #undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: NODE(TdlClause, Clausea)
|
||||
// GEN-NEXT: NODE(TdlClause, Clauseb)
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: void Before(const TdlClause::Clausea &) { Word("CLAUSEA"); }
|
||||
// GEN-NEXT: void Unparse(const TdlClause::Clauseb &x) {
|
||||
// GEN-NEXT: Word("CLAUSEB");
|
||||
// GEN-NEXT: Walk("(", x.v, ")");
|
||||
// GEN-NEXT: }
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_UNPARSE
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: void Enter(const parser::TdlClause::Clausea &);
|
||||
// GEN-NEXT: void Enter(const parser::TdlClause::Clauseb &);
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_CHECK_ENTER
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: if constexpr (std::is_same_v<A, parser::TdlClause::Clausea>)
|
||||
// GEN-NEXT: return llvm::tdl::Clause::TDLC_clausea;
|
||||
// GEN-NEXT: if constexpr (std::is_same_v<A, parser::TdlClause::Clauseb>)
|
||||
// GEN-NEXT: return llvm::tdl::Clause::TDLC_clauseb;
|
||||
// GEN-NEXT: llvm_unreachable("Invalid Tdl Parser clause");
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_KIND_MAP
|
||||
// GEN-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_DIRECTIVES_IMPL
|
||||
|
@ -1,6 +1,5 @@
|
||||
// RUN: llvm-tblgen -gen-directive-decl -I %p/../../include %s | FileCheck -match-full-lines %s
|
||||
// RUN: llvm-tblgen -gen-directive-impl -I %p/../../include %s | FileCheck -match-full-lines %s -check-prefix=IMPL
|
||||
// RUN: llvm-tblgen -gen-directive-gen -I %p/../../include %s | FileCheck -match-full-lines %s -check-prefix=GEN
|
||||
|
||||
include "llvm/Frontend/Directive/DirectiveBase.td"
|
||||
|
||||
@ -79,14 +78,143 @@ def TDL_DirA : Directive<"dira"> {
|
||||
// CHECK-NEXT: } // namespace llvm
|
||||
// CHECK-NEXT: #endif // LLVM_Tdl_INC
|
||||
|
||||
// IMPL: #include "tdl.h.inc"
|
||||
// IMPL: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #include "llvm/ADT/StringRef.h"
|
||||
// IMPL-NEXT: #include "llvm/ADT/StringSwitch.h"
|
||||
// IMPL-NEXT: #include "llvm/Support/ErrorHandling.h"
|
||||
// IMPL-NEXT: namespace llvm {
|
||||
// IMPL-NEXT: namespace tdl {
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: using namespace llvm;
|
||||
// IMPL-NEXT: using namespace tdl;
|
||||
// IMPL-NEXT: // Sets for dira
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedClauses_TDLD_dira {
|
||||
// IMPL-NEXT: llvm::tdl::Clause::TDLC_clausea,
|
||||
// IMPL-NEXT: llvm::tdl::Clause::TDLC_clauseb,
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedOnceClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static allowedExclusiveClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: static requiredClauses_TDLD_dira {
|
||||
// IMPL-NEXT: };
|
||||
// IMPL-NEXT: } // namespace tdl
|
||||
// IMPL-NEXT: } // namespace llvm
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: {
|
||||
// IMPL-NEXT: {llvm::tdl::Directive::TDLD_dira,
|
||||
// IMPL-NEXT: {
|
||||
// IMPL-NEXT: llvm::tdl::allowedClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::allowedOnceClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::allowedExclusiveClauses_TDLD_dira,
|
||||
// IMPL-NEXT: llvm::tdl::requiredClauses_TDLD_dira,
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-NEXT: },
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: EMPTY_CLASS(Clausea);
|
||||
// IMPL-NEXT: WRAPPER_CLASS(Clauseb, std::list<IntExpr>);
|
||||
// IMPL-NEXT: WRAPPER_CLASS(Clausec, std::optional<Name>);
|
||||
// IMPL-NEXT: EMPTY_CLASS(Claused);
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: Clausea
|
||||
// IMPL-NEXT: , Clauseb
|
||||
// IMPL-NEXT: , Clausec
|
||||
// IMPL-NEXT: , Claused
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-NEXT: #undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: NODE(TdlClause, Clausea)
|
||||
// IMPL-NEXT: NODE(TdlClause, Clauseb)
|
||||
// IMPL-NEXT: NODE(TdlClause, Clausec)
|
||||
// IMPL-NEXT: NODE(TdlClause, Claused)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifdef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// IMPL-NEXT: #undef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: void Before(const TdlClause::Clausea &) { Word("CLAUSEA"); }
|
||||
// IMPL-NEXT: void Unparse(const TdlClause::Clauseb &x) {
|
||||
// IMPL-NEXT: Word("CLAUSEB");
|
||||
// IMPL-NEXT: Put("(");
|
||||
// IMPL-NEXT: Walk(x.v, ",");
|
||||
// IMPL-NEXT: Put(")");
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-NEXT: void Unparse(const TdlClause::Clausec &x) {
|
||||
// IMPL-NEXT: Word("CLAUSEC");
|
||||
// IMPL-NEXT: Put("(");
|
||||
// IMPL-NEXT: if (x.v.has_value())
|
||||
// IMPL-NEXT: Walk(x.v);
|
||||
// IMPL-NEXT: else
|
||||
// IMPL-NEXT: Put("*");
|
||||
// IMPL-NEXT: Put(")");
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-NEXT: void Before(const TdlClause::Claused &) { Word("CLAUSED"); }
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_FLANG_CLAUSE_UNPARSE
|
||||
|
||||
// IMPL: #ifdef GEN_CLANG_CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef GEN_CLANG_CLAUSE_CLASS
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #ifndef CLAUSE
|
||||
// IMPL-NEXT: #define CLAUSE(Enum, Str, Implicit)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-NEXT: #ifndef CLAUSE_CLASS
|
||||
// IMPL-NEXT: #define CLAUSE_CLASS(Enum, Str, Class)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-NEXT: #ifndef CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #define CLAUSE_NO_CLASS(Enum, Str)
|
||||
// IMPL-NEXT: #endif
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #define __CLAUSE(Name, Class) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// IMPL-NEXT: CLAUSE_CLASS(TDLC_##Name, #Name, Class)
|
||||
// IMPL-NEXT: #define __CLAUSE_NO_CLASS(Name) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// IMPL-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, #Name)
|
||||
// IMPL-NEXT: #define __IMPLICIT_CLAUSE_CLASS(Name, Str, Class) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// IMPL-NEXT: CLAUSE_CLASS(TDLC_##Name, Str, Class)
|
||||
// IMPL-NEXT: #define __IMPLICIT_CLAUSE_NO_CLASS(Name, Str) \
|
||||
// IMPL-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// IMPL-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, Str)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: __IMPLICIT_CLAUSE_NO_CLASS(clausea, "clausea")
|
||||
// IMPL-NEXT: __CLAUSE_NO_CLASS(clauseb)
|
||||
// IMPL-NEXT: __CLAUSE(clausec, ClauseC)
|
||||
// IMPL-NEXT: __IMPLICIT_CLAUSE_CLASS(claused, "claused", ClauseD)
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #undef __IMPLICIT_CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #undef __IMPLICIT_CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef __CLAUSE
|
||||
// IMPL-NEXT: #undef CLAUSE_NO_CLASS
|
||||
// IMPL-NEXT: #undef CLAUSE_CLASS
|
||||
// IMPL-NEXT: #undef CLAUSE
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_CLANG_CLAUSE_CLASS
|
||||
|
||||
// IMPL: #ifdef GEN_DIRECTIVES_IMPL
|
||||
// IMPL-NEXT: #undef GEN_DIRECTIVES_IMPL
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: Directive llvm::tdl::getTdlDirectiveKind(llvm::StringRef Str) {
|
||||
// IMPL-NEXT: return llvm::StringSwitch<Directive>(Str)
|
||||
@ -142,140 +270,5 @@ def TDL_DirA : Directive<"dira"> {
|
||||
// IMPL-NEXT: }
|
||||
// IMPL-NEXT: llvm_unreachable("Invalid Tdl Directive kind");
|
||||
// IMPL-NEXT: }
|
||||
|
||||
|
||||
// GEN: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: namespace llvm {
|
||||
// GEN-NEXT: namespace tdl {
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: // Sets for dira
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedClauses_TDLD_dira {
|
||||
// GEN-NEXT: llvm::tdl::Clause::TDLC_clausea,
|
||||
// GEN-NEXT: llvm::tdl::Clause::TDLC_clauseb,
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedOnceClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static allowedExclusiveClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: static requiredClauses_TDLD_dira {
|
||||
// GEN-NEXT: };
|
||||
// GEN-NEXT: } // namespace tdl
|
||||
// GEN-NEXT: } // namespace llvm
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_SETS
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-NEXT: #undef GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: {
|
||||
// GEN-NEXT: {llvm::tdl::Directive::TDLD_dira,
|
||||
// GEN-NEXT: {
|
||||
// GEN-NEXT: llvm::tdl::allowedClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::allowedOnceClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::allowedExclusiveClauses_TDLD_dira,
|
||||
// GEN-NEXT: llvm::tdl::requiredClauses_TDLD_dira,
|
||||
// GEN-NEXT: }
|
||||
// GEN-NEXT: },
|
||||
// GEN-NEXT: }
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DIRECTIVE_CLAUSE_MAP
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: EMPTY_CLASS(Clausea);
|
||||
// GEN-NEXT: WRAPPER_CLASS(Clauseb, std::list<IntExpr>);
|
||||
// GEN-NEXT: WRAPPER_CLASS(Clausec, std::optional<Name>);
|
||||
// GEN-NEXT: EMPTY_CLASS(Claused);
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: Clausea
|
||||
// GEN-NEXT: , Clauseb
|
||||
// GEN-NEXT: , Clausec
|
||||
// GEN-NEXT: , Claused
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_PARSER_CLASSES_LIST
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-NEXT: #undef GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: NODE(TdlClause, Clausea)
|
||||
// GEN-NEXT: NODE(TdlClause, Clauseb)
|
||||
// GEN-NEXT: NODE(TdlClause, Clausec)
|
||||
// GEN-NEXT: NODE(TdlClause, Claused)
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_DUMP_PARSE_TREE_CLAUSES
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifdef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// GEN-NEXT: #undef GEN_FLANG_CLAUSE_UNPARSE
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: void Before(const TdlClause::Clausea &) { Word("CLAUSEA"); }
|
||||
// GEN-NEXT: void Unparse(const TdlClause::Clauseb &x) {
|
||||
// GEN-NEXT: Word("CLAUSEB");
|
||||
// GEN-NEXT: Put("(");
|
||||
// GEN-NEXT: Walk(x.v, ",");
|
||||
// GEN-NEXT: Put(")");
|
||||
// GEN-NEXT: }
|
||||
// GEN-NEXT: void Unparse(const TdlClause::Clausec &x) {
|
||||
// GEN-NEXT: Word("CLAUSEC");
|
||||
// GEN-NEXT: Put("(");
|
||||
// GEN-NEXT: if (x.v.has_value())
|
||||
// GEN-NEXT: Walk(x.v);
|
||||
// GEN-NEXT: else
|
||||
// GEN-NEXT: Put("*");
|
||||
// GEN-NEXT: Put(")");
|
||||
// GEN-NEXT: }
|
||||
// GEN-NEXT: void Before(const TdlClause::Claused &) { Word("CLAUSED"); }
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_FLANG_CLAUSE_UNPARSE
|
||||
|
||||
// GEN: #ifdef GEN_CLANG_CLAUSE_CLASS
|
||||
// GEN-NEXT: #undef GEN_CLANG_CLAUSE_CLASS
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #ifndef CLAUSE
|
||||
// GEN-NEXT: #define CLAUSE(Enum, Str, Implicit)
|
||||
// GEN-NEXT: #endif
|
||||
// GEN-NEXT: #ifndef CLAUSE_CLASS
|
||||
// GEN-NEXT: #define CLAUSE_CLASS(Enum, Str, Class)
|
||||
// GEN-NEXT: #endif
|
||||
// GEN-NEXT: #ifndef CLAUSE_NO_CLASS
|
||||
// GEN-NEXT: #define CLAUSE_NO_CLASS(Enum, Str)
|
||||
// GEN-NEXT: #endif
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #define __CLAUSE(Name, Class) \
|
||||
// GEN-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// GEN-NEXT: CLAUSE_CLASS(TDLC_##Name, #Name, Class)
|
||||
// GEN-NEXT: #define __CLAUSE_NO_CLASS(Name) \
|
||||
// GEN-NEXT: CLAUSE(TDLC_##Name, #Name, /* Implicit */ false) \
|
||||
// GEN-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, #Name)
|
||||
// GEN-NEXT: #define __IMPLICIT_CLAUSE_CLASS(Name, Str, Class) \
|
||||
// GEN-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// GEN-NEXT: CLAUSE_CLASS(TDLC_##Name, Str, Class)
|
||||
// GEN-NEXT: #define __IMPLICIT_CLAUSE_NO_CLASS(Name, Str) \
|
||||
// GEN-NEXT: CLAUSE(TDLC_##Name, Str, /* Implicit */ true) \
|
||||
// GEN-NEXT: CLAUSE_NO_CLASS(TDLC_##Name, Str)
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: __IMPLICIT_CLAUSE_NO_CLASS(clausea, "clausea")
|
||||
// GEN-NEXT: __CLAUSE_NO_CLASS(clauseb)
|
||||
// GEN-NEXT: __CLAUSE(clausec, ClauseC)
|
||||
// GEN-NEXT: __IMPLICIT_CLAUSE_CLASS(claused, "claused", ClauseD)
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #undef __IMPLICIT_CLAUSE_NO_CLASS
|
||||
// GEN-NEXT: #undef __IMPLICIT_CLAUSE_CLASS
|
||||
// GEN-NEXT: #undef __CLAUSE
|
||||
// GEN-NEXT: #undef CLAUSE_NO_CLASS
|
||||
// GEN-NEXT: #undef CLAUSE_CLASS
|
||||
// GEN-NEXT: #undef CLAUSE
|
||||
// GEN-EMPTY:
|
||||
// GEN-NEXT: #endif // GEN_CLANG_CLAUSE_CLASS
|
||||
|
||||
// IMPL-EMPTY:
|
||||
// IMPL-NEXT: #endif // GEN_DIRECTIVES_IMPL
|
||||
|
@ -1,6 +1,5 @@
|
||||
// RUN: not llvm-tblgen -gen-directive-decl -I %p/../../include %s 2>&1 | FileCheck -match-full-lines %s
|
||||
// RUN: not llvm-tblgen -gen-directive-impl -I %p/../../include %s 2>&1 | FileCheck -match-full-lines %s
|
||||
// RUN: not llvm-tblgen -gen-directive-gen -I %p/../../include %s 2>&1 | FileCheck -match-full-lines %s
|
||||
|
||||
include "llvm/Frontend/Directive/DirectiveBase.td"
|
||||
|
||||
|
@ -758,37 +758,11 @@ void GenerateClauseClassMacro(const DirectiveLanguage &DirLang,
|
||||
OS << "#undef CLAUSE\n";
|
||||
}
|
||||
|
||||
// Generate the implementation section for the enumeration in the directive
|
||||
// language.
|
||||
void EmitDirectivesGen(RecordKeeper &Records, raw_ostream &OS) {
|
||||
const auto DirLang = DirectiveLanguage{Records};
|
||||
if (DirLang.HasValidityErrors())
|
||||
return;
|
||||
|
||||
EmitDirectivesFlangImpl(DirLang, OS);
|
||||
|
||||
GenerateClauseClassMacro(DirLang, OS);
|
||||
}
|
||||
|
||||
// Generate the implementation for the enumeration in the directive
|
||||
// Generate the implemenation for the enumeration in the directive
|
||||
// language. This code can be included in library.
|
||||
void EmitDirectivesImpl(RecordKeeper &Records, raw_ostream &OS) {
|
||||
const auto DirLang = DirectiveLanguage{Records};
|
||||
if (DirLang.HasValidityErrors())
|
||||
return;
|
||||
|
||||
if (!DirLang.getIncludeHeader().empty())
|
||||
OS << "#include \"" << DirLang.getIncludeHeader() << "\"\n\n";
|
||||
|
||||
OS << "#include \"llvm/ADT/StringRef.h\"\n";
|
||||
OS << "#include \"llvm/ADT/StringSwitch.h\"\n";
|
||||
OS << "#include \"llvm/Support/ErrorHandling.h\"\n";
|
||||
OS << "\n";
|
||||
OS << "using namespace llvm;\n";
|
||||
llvm::SmallVector<StringRef, 2> Namespaces;
|
||||
llvm::SplitString(DirLang.getCppNamespace(), Namespaces, "::");
|
||||
for (auto Ns : Namespaces)
|
||||
OS << "using namespace " << Ns << ";\n";
|
||||
void EmitDirectivesBasicImpl(const DirectiveLanguage &DirLang,
|
||||
raw_ostream &OS) {
|
||||
IfDefScope Scope("GEN_DIRECTIVES_IMPL", OS);
|
||||
|
||||
// getDirectiveKind(StringRef Str)
|
||||
GenerateGetKind(DirLang.getDirectives(), OS, "Directive", DirLang,
|
||||
@ -814,4 +788,18 @@ void EmitDirectivesImpl(RecordKeeper &Records, raw_ostream &OS) {
|
||||
GenerateIsAllowedClause(DirLang, OS);
|
||||
}
|
||||
|
||||
// Generate the implemenation section for the enumeration in the directive
|
||||
// language.
|
||||
void EmitDirectivesImpl(RecordKeeper &Records, raw_ostream &OS) {
|
||||
const auto DirLang = DirectiveLanguage{Records};
|
||||
if (DirLang.HasValidityErrors())
|
||||
return;
|
||||
|
||||
EmitDirectivesFlangImpl(DirLang, OS);
|
||||
|
||||
GenerateClauseClassMacro(DirLang, OS);
|
||||
|
||||
EmitDirectivesBasicImpl(DirLang, OS);
|
||||
}
|
||||
|
||||
} // namespace llvm
|
||||
|
@ -57,7 +57,6 @@ enum ActionType {
|
||||
GenAutomata,
|
||||
GenDirectivesEnumDecl,
|
||||
GenDirectivesEnumImpl,
|
||||
GenDirectivesEnumGen,
|
||||
};
|
||||
|
||||
namespace llvm {
|
||||
@ -139,9 +138,7 @@ cl::opt<ActionType> Action(
|
||||
clEnumValN(GenDirectivesEnumDecl, "gen-directive-decl",
|
||||
"Generate directive related declaration code (header file)"),
|
||||
clEnumValN(GenDirectivesEnumImpl, "gen-directive-impl",
|
||||
"Generate directive related implementation code"),
|
||||
clEnumValN(GenDirectivesEnumGen, "gen-directive-gen",
|
||||
"Generate directive related implementation code part")));
|
||||
"Generate directive related implementation code")));
|
||||
|
||||
cl::OptionCategory PrintEnumsCat("Options for -print-enums");
|
||||
cl::opt<std::string> Class("class", cl::desc("Print Enum list for this class"),
|
||||
@ -275,9 +272,6 @@ bool LLVMTableGenMain(raw_ostream &OS, RecordKeeper &Records) {
|
||||
case GenDirectivesEnumImpl:
|
||||
EmitDirectivesImpl(Records, OS);
|
||||
break;
|
||||
case GenDirectivesEnumGen:
|
||||
EmitDirectivesGen(Records, OS);
|
||||
break;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -93,7 +93,6 @@ void EmitExegesis(RecordKeeper &RK, raw_ostream &OS);
|
||||
void EmitAutomata(RecordKeeper &RK, raw_ostream &OS);
|
||||
void EmitDirectivesDecl(RecordKeeper &RK, raw_ostream &OS);
|
||||
void EmitDirectivesImpl(RecordKeeper &RK, raw_ostream &OS);
|
||||
void EmitDirectivesGen(RecordKeeper &RK, raw_ostream &OS);
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
|
@ -8,7 +8,7 @@ tablegen("ACC") {
|
||||
|
||||
tablegen("ACCcpp") {
|
||||
visibility = [ ":acc_gen" ]
|
||||
args = [ "-gen-directive-gen" ]
|
||||
args = [ "-gen-directive-impl" ]
|
||||
output_name = "ACC.inc"
|
||||
td_file = "ACC.td"
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ tablegen("OMPh") {
|
||||
|
||||
tablegen("OMP") {
|
||||
visibility = [ ":public_tablegen" ]
|
||||
args = [ "-gen-directive-gen" ]
|
||||
args = [ "-gen-directive-impl" ]
|
||||
}
|
||||
|
||||
# Groups all tablegen() calls that create .inc files that are included in
|
||||
|
Loading…
Reference in New Issue
Block a user