Author: Reid Kleckner Date: 2020-03-12T11:54:31-07:00 New Revision: 26d254f084161f81f953cf3434e8d2ad9355b496
URL: https://github.com/llvm/llvm-project/commit/26d254f084161f81f953cf3434e8d2ad9355b496 DIFF: https://github.com/llvm/llvm-project/commit/26d254f084161f81f953cf3434e8d2ad9355b496.diff LOG: Sink more Attr.h inline methods, NFC This has very little impact on build time, but is a mechanical pre-req to removing the OpenMPClause.h include, which matters. Most of these pretty print methods require Expr to be complete. Added: Modified: clang/include/clang/AST/Attr.h clang/include/clang/Basic/Attr.td clang/lib/AST/AttrImpl.cpp clang/lib/AST/OpenMPClause.cpp clang/lib/CodeGen/CGLoopInfo.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/Attr.h b/clang/include/clang/AST/Attr.h index b2b53e80dc95..5f6035cb0c28 100644 --- a/clang/include/clang/AST/Attr.h +++ b/clang/include/clang/AST/Attr.h @@ -13,10 +13,9 @@ #ifndef LLVM_CLANG_AST_ATTR_H #define LLVM_CLANG_AST_ATTR_H -#include "clang/AST/ASTContextAllocate.h" // For Attrs.inc +#include "clang/AST/ASTFwd.h" #include "clang/AST/AttrIterator.h" #include "clang/AST/Decl.h" -#include "clang/AST/Expr.h" #include "clang/AST/OpenMPClause.h" #include "clang/AST/Type.h" #include "clang/Basic/AttrKinds.h" diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index b18cfef33fba..484691f419c3 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -3130,57 +3130,14 @@ def LoopHint : Attr { llvm_unreachable("Unhandled LoopHint option."); } - void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const { - unsigned SpellingIndex = getAttributeSpellingListIndex(); - // For "#pragma unroll" and "#pragma nounroll" the string "unroll" or - // "nounroll" is already emitted as the pragma name. - if (SpellingIndex == Pragma_nounroll || SpellingIndex == Pragma_nounroll_and_jam) - return; - else if (SpellingIndex == Pragma_unroll || SpellingIndex == Pragma_unroll_and_jam) { - OS << ' ' << getValueString(Policy); - return; - } - - assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); - OS << ' ' << getOptionName(option) << getValueString(Policy); - } + void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const; // Return a string containing the loop hint argument including the // enclosing parentheses. - std::string getValueString(const PrintingPolicy &Policy) const { - std::string ValueName; - llvm::raw_string_ostream OS(ValueName); - OS << "("; - if (state == Numeric) - value->printPretty(OS, nullptr, Policy); - else if (state == Enable) - OS << "enable"; - else if (state == Full) - OS << "full"; - else if (state == AssumeSafety) - OS << "assume_safety"; - else - OS << "disable"; - OS << ")"; - return OS.str(); - } + std::string getValueString(const PrintingPolicy &Policy) const; // Return a string suitable for identifying this attribute in diagnostics. - std::string getDiagnosticName(const PrintingPolicy &Policy) const { - unsigned SpellingIndex = getAttributeSpellingListIndex(); - if (SpellingIndex == Pragma_nounroll) - return "#pragma nounroll"; - else if (SpellingIndex == Pragma_unroll) - return "#pragma unroll" + (option == UnrollCount ? getValueString(Policy) : ""); - else if (SpellingIndex == Pragma_nounroll_and_jam) - return "#pragma nounroll_and_jam"; - else if (SpellingIndex == Pragma_unroll_and_jam) - return "#pragma unroll_and_jam" + - (option == UnrollAndJamCount ? getValueString(Policy) : ""); - - assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); - return getOptionName(option) + getValueString(Policy); - } + std::string getDiagnosticName(const PrintingPolicy &Policy) const; }]; let Documentation = [LoopHintDocs, UnrollHintDocs]; @@ -3240,53 +3197,7 @@ def OMPDeclareSimdDecl : Attr { ]; let AdditionalMembers = [{ void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy) - const { - if (getBranchState() != BS_Undefined) - OS << ' ' << ConvertBranchStateTyToStr(getBranchState()); - if (auto *E = getSimdlen()) { - OS << " simdlen("; - E->printPretty(OS, nullptr, Policy); - OS << ")"; - } - if (uniforms_size() > 0) { - OS << " uniform"; - StringRef Sep = "("; - for (auto *E : uniforms()) { - OS << Sep; - E->printPretty(OS, nullptr, Policy); - Sep = ", "; - } - OS << ")"; - } - alignments_iterator NI = alignments_begin(); - for (auto *E : aligneds()) { - OS << " aligned("; - E->printPretty(OS, nullptr, Policy); - if (*NI) { - OS << ": "; - (*NI)->printPretty(OS, nullptr, Policy); - } - OS << ")"; - ++NI; - } - steps_iterator I = steps_begin(); - modifiers_iterator MI = modifiers_begin(); - for (auto *E : linears()) { - OS << " linear("; - if (*MI != OMPC_LINEAR_unknown) - OS << getOpenMPSimpleClauseTypeName(OMPC_linear, *MI) << "("; - E->printPretty(OS, nullptr, Policy); - if (*MI != OMPC_LINEAR_unknown) - OS << ")"; - if (*I) { - OS << ": "; - (*I)->printPretty(OS, nullptr, Policy); - } - OS << ")"; - ++I; - ++MI; - } - } + const; }]; } @@ -3304,30 +3215,10 @@ def OMPDeclareTargetDecl : InheritableAttr { [ "DT_Host", "DT_NoHost", "DT_Any" ]> ]; let AdditionalMembers = [{ - void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const { - // Use fake syntax because it is for testing and debugging purpose only. - if (getDevType() != DT_Any) - OS << " device_type(" << ConvertDevTypeTyToStr(getDevType()) << ")"; - if (getMapType() != MT_To) - OS << ' ' << ConvertMapTypeTyToStr(getMapType()); - } + void printPrettyPragma(raw_ostream &OS, const PrintingPolicy &Policy) const; static llvm::Optional<MapTypeTy> - isDeclareTargetDeclaration(const ValueDecl *VD) { - if (!VD->hasAttrs()) - return llvm::None; - if (const auto *Attr = VD->getAttr<OMPDeclareTargetDeclAttr>()) - return Attr->getMapType(); - - return llvm::None; - } - static llvm::Optional<DevTypeTy> getDeviceType(const ValueDecl *VD) { - if (!VD->hasAttrs()) - return llvm::None; - if (const auto *Attr = VD->getAttr<OMPDeclareTargetDeclAttr>()) - return Attr->getDevType(); - - return llvm::None; - } + isDeclareTargetDeclaration(const ValueDecl *VD); + static llvm::Optional<DevTypeTy> getDeviceType(const ValueDecl *VD); }]; } @@ -3368,16 +3259,7 @@ def OMPDeclareVariant : InheritableAttr { let AdditionalMembers = [{ OMPTraitInfo &getTraitInfo() { return traitInfos; } void printPrettyPragma(raw_ostream & OS, const PrintingPolicy &Policy) - const { - if (const Expr *E = getVariantFuncRef()) { - OS << "("; - E->printPretty(OS, nullptr, Policy); - OS << ")"; - } - OS << " match("; - traitInfos.print(OS, Policy); - OS << ")"; - } + const; }]; } diff --git a/clang/lib/AST/AttrImpl.cpp b/clang/lib/AST/AttrImpl.cpp index 0ef925ec1c90..2c76f86713fb 100644 --- a/clang/lib/AST/AttrImpl.cpp +++ b/clang/lib/AST/AttrImpl.cpp @@ -16,4 +16,151 @@ #include "clang/AST/Type.h" using namespace clang; +void LoopHintAttr::printPrettyPragma(raw_ostream &OS, + const PrintingPolicy &Policy) const { + unsigned SpellingIndex = getAttributeSpellingListIndex(); + // For "#pragma unroll" and "#pragma nounroll" the string "unroll" or + // "nounroll" is already emitted as the pragma name. + if (SpellingIndex == Pragma_nounroll || + SpellingIndex == Pragma_nounroll_and_jam) + return; + else if (SpellingIndex == Pragma_unroll || + SpellingIndex == Pragma_unroll_and_jam) { + OS << ' ' << getValueString(Policy); + return; + } + + assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); + OS << ' ' << getOptionName(option) << getValueString(Policy); +} + +// Return a string containing the loop hint argument including the +// enclosing parentheses. +std::string LoopHintAttr::getValueString(const PrintingPolicy &Policy) const { + std::string ValueName; + llvm::raw_string_ostream OS(ValueName); + OS << "("; + if (state == Numeric) + value->printPretty(OS, nullptr, Policy); + else if (state == Enable) + OS << "enable"; + else if (state == Full) + OS << "full"; + else if (state == AssumeSafety) + OS << "assume_safety"; + else + OS << "disable"; + OS << ")"; + return OS.str(); +} + +// Return a string suitable for identifying this attribute in diagnostics. +std::string +LoopHintAttr::getDiagnosticName(const PrintingPolicy &Policy) const { + unsigned SpellingIndex = getAttributeSpellingListIndex(); + if (SpellingIndex == Pragma_nounroll) + return "#pragma nounroll"; + else if (SpellingIndex == Pragma_unroll) + return "#pragma unroll" + + (option == UnrollCount ? getValueString(Policy) : ""); + else if (SpellingIndex == Pragma_nounroll_and_jam) + return "#pragma nounroll_and_jam"; + else if (SpellingIndex == Pragma_unroll_and_jam) + return "#pragma unroll_and_jam" + + (option == UnrollAndJamCount ? getValueString(Policy) : ""); + + assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling"); + return getOptionName(option) + getValueString(Policy); +} + +void OMPDeclareSimdDeclAttr::printPrettyPragma( + raw_ostream &OS, const PrintingPolicy &Policy) const { + if (getBranchState() != BS_Undefined) + OS << ' ' << ConvertBranchStateTyToStr(getBranchState()); + if (auto *E = getSimdlen()) { + OS << " simdlen("; + E->printPretty(OS, nullptr, Policy); + OS << ")"; + } + if (uniforms_size() > 0) { + OS << " uniform"; + StringRef Sep = "("; + for (auto *E : uniforms()) { + OS << Sep; + E->printPretty(OS, nullptr, Policy); + Sep = ", "; + } + OS << ")"; + } + alignments_iterator NI = alignments_begin(); + for (auto *E : aligneds()) { + OS << " aligned("; + E->printPretty(OS, nullptr, Policy); + if (*NI) { + OS << ": "; + (*NI)->printPretty(OS, nullptr, Policy); + } + OS << ")"; + ++NI; + } + steps_iterator I = steps_begin(); + modifiers_iterator MI = modifiers_begin(); + for (auto *E : linears()) { + OS << " linear("; + if (*MI != OMPC_LINEAR_unknown) + OS << getOpenMPSimpleClauseTypeName(OMPC_linear, *MI) << "("; + E->printPretty(OS, nullptr, Policy); + if (*MI != OMPC_LINEAR_unknown) + OS << ")"; + if (*I) { + OS << ": "; + (*I)->printPretty(OS, nullptr, Policy); + } + OS << ")"; + ++I; + ++MI; + } +} + +void OMPDeclareTargetDeclAttr::printPrettyPragma( + raw_ostream &OS, const PrintingPolicy &Policy) const { + // Use fake syntax because it is for testing and debugging purpose only. + if (getDevType() != DT_Any) + OS << " device_type(" << ConvertDevTypeTyToStr(getDevType()) << ")"; + if (getMapType() != MT_To) + OS << ' ' << ConvertMapTypeTyToStr(getMapType()); +} + +llvm::Optional<OMPDeclareTargetDeclAttr::MapTypeTy> +OMPDeclareTargetDeclAttr::isDeclareTargetDeclaration(const ValueDecl *VD) { + if (!VD->hasAttrs()) + return llvm::None; + if (const auto *Attr = VD->getAttr<OMPDeclareTargetDeclAttr>()) + return Attr->getMapType(); + + return llvm::None; +} + +llvm::Optional<OMPDeclareTargetDeclAttr::DevTypeTy> +OMPDeclareTargetDeclAttr::getDeviceType(const ValueDecl *VD) { + if (!VD->hasAttrs()) + return llvm::None; + if (const auto *Attr = VD->getAttr<OMPDeclareTargetDeclAttr>()) + return Attr->getDevType(); + + return llvm::None; +} + +void OMPDeclareVariantAttr::printPrettyPragma( + raw_ostream &OS, const PrintingPolicy &Policy) const { + if (const Expr *E = getVariantFuncRef()) { + OS << "("; + E->printPretty(OS, nullptr, Policy); + OS << ")"; + } + OS << " match("; + traitInfos.print(OS, Policy); + OS << ")"; +} + #include "clang/AST/AttrImpl.inc" diff --git a/clang/lib/AST/OpenMPClause.cpp b/clang/lib/AST/OpenMPClause.cpp index 00d43425c270..e68a5d6820a9 100644 --- a/clang/lib/AST/OpenMPClause.cpp +++ b/clang/lib/AST/OpenMPClause.cpp @@ -12,6 +12,7 @@ #include "clang/AST/OpenMPClause.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/Attr.h" #include "clang/AST/Decl.h" #include "clang/AST/DeclOpenMP.h" #include "clang/Basic/LLVM.h" diff --git a/clang/lib/CodeGen/CGLoopInfo.cpp b/clang/lib/CodeGen/CGLoopInfo.cpp index e4b184eb8798..5addf1976168 100644 --- a/clang/lib/CodeGen/CGLoopInfo.cpp +++ b/clang/lib/CodeGen/CGLoopInfo.cpp @@ -9,6 +9,7 @@ #include "CGLoopInfo.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Attr.h" +#include "clang/AST/Expr.h" #include "llvm/IR/BasicBlock.h" #include "llvm/IR/CFG.h" #include "llvm/IR/Constants.h" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits