diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-04 21:57:52 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-02-04 21:57:52 +0000 |
commit | 39b10c2cbb8fb1d4604697c79365c7c582de229b (patch) | |
tree | b292e23b5edcd40e8181293223d2bdfee8e20010 /llvm/lib/AsmParser | |
parent | f85d0e217f3c52d31f5dfa18ab6f42f39acfca37 (diff) | |
download | bcm5719-llvm-39b10c2cbb8fb1d4604697c79365c7c582de229b.tar.gz bcm5719-llvm-39b10c2cbb8fb1d4604697c79365c7c582de229b.zip |
AsmParser: Simplify MDUnsignedField
We only need `uint64_t` for storage.
llvm-svn: 228205
Diffstat (limited to 'llvm/lib/AsmParser')
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 16 | ||||
-rw-r--r-- | llvm/lib/AsmParser/LLParser.h | 15 |
2 files changed, 14 insertions, 17 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 1f5087c152c..6441dc3f6f5 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -2924,23 +2924,23 @@ bool LLParser::ParseMDNodeTail(MDNode *&N) { } bool LLParser::ParseMDField(LocTy Loc, StringRef Name, - MDUnsignedField<uint32_t> &Result) { + MDUnsignedField &Result) { if (Lex.getKind() != lltok::APSInt || Lex.getAPSIntVal().isSigned()) return TokError("expected unsigned integer"); - uint64_t Val64 = Lex.getAPSIntVal().getLimitedValue(Result.Max + 1ull); - if (Val64 > Result.Max) + auto &U = Lex.getAPSIntVal(); + if (U.ugt(Result.Max)) return TokError("value for '" + Name + "' too large, limit is " + Twine(Result.Max)); - Result.assign(Val64); + Result.assign(U.getZExtValue()); + assert(Result.Val <= Result.Max && "Expected value in range"); Lex.Lex(); return false; } bool LLParser::ParseMDField(LocTy Loc, StringRef Name, DwarfTagField &Result) { if (Lex.getKind() == lltok::APSInt) - return ParseMDField(Loc, Name, - static_cast<MDUnsignedField<uint32_t> &>(Result)); + return ParseMDField(Loc, Name, static_cast<MDUnsignedField &>(Result)); if (Result.Seen) return Error(Loc, @@ -3063,8 +3063,8 @@ bool LLParser::ParseSpecializedMDNode(MDNode *&N, bool IsDistinct) { /// ::= !MDLocation(line: 43, column: 8, scope: !5, inlinedAt: !6) bool LLParser::ParseMDLocation(MDNode *&Result, bool IsDistinct) { #define VISIT_MD_FIELDS(OPTIONAL, REQUIRED) \ - OPTIONAL(line, MDUnsignedField<uint32_t>, (0, ~0u >> 8)); \ - OPTIONAL(column, MDUnsignedField<uint32_t>, (0, ~0u >> 16)); \ + OPTIONAL(line, MDUnsignedField, (0, ~0u >> 8)); \ + OPTIONAL(column, MDUnsignedField, (0, ~0u >> 16)); \ REQUIRED(scope, MDField, ); \ OPTIONAL(inlinedAt, MDField, ); PARSE_MD_FIELDS(); diff --git a/llvm/lib/AsmParser/LLParser.h b/llvm/lib/AsmParser/LLParser.h index 240fb608138..c9aafd99740 100644 --- a/llvm/lib/AsmParser/LLParser.h +++ b/llvm/lib/AsmParser/LLParser.h @@ -94,16 +94,14 @@ namespace llvm { explicit MDFieldImpl(FieldTy Default) : Val(std::move(Default)), Seen(false) {} }; - template <class NumTy> struct MDUnsignedField : public MDFieldImpl<NumTy> { - typedef typename MDUnsignedField::ImplTy ImplTy; - NumTy Max; + struct MDUnsignedField : public MDFieldImpl<uint64_t> { + uint64_t Max; - MDUnsignedField(NumTy Default = 0, - NumTy Max = std::numeric_limits<NumTy>::max()) + MDUnsignedField(uint64_t Default = 0, uint64_t Max = UINT64_MAX) : ImplTy(Default), Max(Max) {} }; - struct DwarfTagField : public MDUnsignedField<uint32_t> { - DwarfTagField() : MDUnsignedField<uint32_t>(0, ~0u >> 16) {} + struct DwarfTagField : public MDUnsignedField { + DwarfTagField() : MDUnsignedField(0, ~0u >> 16) {} }; struct MDField : public MDFieldImpl<Metadata *> { MDField() : ImplTy(nullptr) {} @@ -428,8 +426,7 @@ namespace llvm { bool ParseMDNodeVector(SmallVectorImpl<Metadata *> &MDs); bool ParseInstructionMetadata(Instruction *Inst, PerFunctionState *PFS); - bool ParseMDField(LocTy Loc, StringRef Name, - MDUnsignedField<uint32_t> &Result); + 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); |