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];
];
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;
}];
}
[ "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);
}];
}
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;
}];
}