summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-04 22:05:21 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2015-02-04 22:05:21 +0000
commit077c0318dcf2e996df82924b232c55c525242949 (patch)
tree2c3a4e0930b006fdbb5459c9deac728d345182dd /llvm/lib
parent79ede571947ff1232f1d63d6249299003b78b777 (diff)
downloadbcm5719-llvm-077c0318dcf2e996df82924b232c55c525242949.tar.gz
bcm5719-llvm-077c0318dcf2e996df82924b232c55c525242949.zip
AsmParser: Move MDField details to source file, NFC
Move all the types of `MDField` to an anonymous namespace in the source file. This also eliminates the duplication of `ParseMDField()` declarations in the header for each new field type. llvm-svn: 228211
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/AsmParser/LLParser.cpp42
-rw-r--r--llvm/lib/AsmParser/LLParser.h40
2 files changed, 44 insertions, 38 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp
index 31c9d65d1e2..427b38ee3b8 100644
--- a/llvm/lib/AsmParser/LLParser.cpp
+++ b/llvm/lib/AsmParser/LLParser.cpp
@@ -2923,6 +2923,44 @@ bool LLParser::ParseMDNodeTail(MDNode *&N) {
return ParseMDNodeID(N);
}
+namespace {
+
+/// Structure to represent an optional metadata field.
+template <class FieldTy> struct MDFieldImpl {
+ typedef MDFieldImpl ImplTy;
+ FieldTy Val;
+ bool Seen;
+
+ void assign(FieldTy Val) {
+ Seen = true;
+ this->Val = std::move(Val);
+ }
+
+ explicit MDFieldImpl(FieldTy Default)
+ : Val(std::move(Default)), Seen(false) {}
+};
+struct MDUnsignedField : public MDFieldImpl<uint64_t> {
+ uint64_t Max;
+
+ MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX)
+ : ImplTy(Default), Max(Max) {}
+};
+struct DwarfTagField : public MDUnsignedField {
+ DwarfTagField() : MDUnsignedField(0, ~0u >> 16) {}
+};
+struct MDField : public MDFieldImpl<Metadata *> {
+ MDField() : ImplTy(nullptr) {}
+};
+struct MDStringField : public MDFieldImpl<std::string> {
+ MDStringField() : ImplTy(std::string()) {}
+};
+struct MDFieldList : public MDFieldImpl<SmallVector<Metadata *, 4>> {
+ MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {}
+};
+
+} // end namespace
+
+template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
MDUnsignedField &Result) {
if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned())
@@ -2938,6 +2976,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name,
return false;
}
+template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) {
if (Lex.getKind() == lltok::APSInt)
return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result));
@@ -2955,6 +2994,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) {
return false;
}
+template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) {
Metadata *MD;
if (ParseMetadata(MD, nullptr))
@@ -2964,6 +3004,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDField &Result) {
return false;
}
+template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result) {
std::string S;
if (ParseStringConstant(S))
@@ -2973,6 +3014,7 @@ bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result) {
return false;
}
+template <>
bool LLParser::ParseMDField(LocTy Loc, StringRef Name, MDFieldList &Result) {
SmallVector<Metadata *, 4> MDs;
if (ParseMDNodeVector(MDs))
diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h
index c9aafd99740..12506e53684 100644
--- a/llvm/lib/AsmParser/LLParser.h
+++ b/llvm/lib/AsmParser/LLParser.h
@@ -80,39 +80,6 @@ namespace llvm {
}
};
- /// Structure to represent an optional metadata field.
- template <class FieldTy> struct MDFieldImpl {
- typedef MDFieldImpl ImplTy;
- FieldTy Val;
- bool Seen;
-
- void assign(FieldTy Val) {
- Seen = true;
- this->Val = std::move(Val);
- }
-
- explicit MDFieldImpl(FieldTy Default)
- : Val(std::move(Default)), Seen(false) {}
- };
- struct MDUnsignedField : public MDFieldImpl<uint64_t> {
- uint64_t Max;
-
- MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX)
- : ImplTy(Default), Max(Max) {}
- };
- struct DwarfTagField : public MDUnsignedField {
- DwarfTagField() : MDUnsignedField(0, ~0u >> 16) {}
- };
- struct MDField : public MDFieldImpl<Metadata *> {
- MDField() : ImplTy(nullptr) {}
- };
- struct MDStringField : public MDFieldImpl<std::string> {
- MDStringField() : ImplTy(std::string()) {}
- };
- struct MDFieldList : public MDFieldImpl<SmallVector<Metadata *, 4>> {
- MDFieldList() : ImplTy(SmallVector<Metadata *, 4>()) {}
- };
-
class LLParser {
public:
typedef LLLexer::LocTy LocTy;
@@ -426,11 +393,8 @@ namespace llvm {
bool ParseMDNodeVector(SmallVectorImpl<Metadata *> &MDs);
bool ParseInstructionMetadata(Instruction *Inst, PerFunctionState *PFS);
- bool ParseMDField(LocTy Loc, StringRef Name, MDUnsignedField &Result);
- bool ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result);
- bool ParseMDField(LocTy Loc, StringRef Name, MDField &Result);
- bool ParseMDField(LocTy Loc, StringRef Name, MDStringField &Result);
- bool ParseMDField(LocTy Loc, StringRef Name, MDFieldList &Result);
+ template <class FieldTy>
+ bool ParseMDField(LocTy Loc, StringRef Name, FieldTy &Result);
template <class FieldTy> bool ParseMDField(StringRef Name, FieldTy &Result);
template <class ParserTy>
bool ParseMDFieldsImplBody(ParserTy parseField);
OpenPOWER on IntegriCloud