X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=blobdiff_plain;f=lib%2FCodeGen%2FMIRParser%2FMILexer.h;h=ff54aa3554d87d8a951daf08b388b585658ac2ff;hp=d33e0499f27c31c353671f39d823edc3008c381e;hb=c7804ab6e5052fcc776d1d173ee4f085c37800f6;hpb=3db44ce9a80418a6581852055bd9092b65a6926d diff --git a/lib/CodeGen/MIRParser/MILexer.h b/lib/CodeGen/MIRParser/MILexer.h index d33e0499f27..ff54aa3554d 100644 --- a/lib/CodeGen/MIRParser/MILexer.h +++ b/lib/CodeGen/MIRParser/MILexer.h @@ -30,6 +30,7 @@ struct MIToken { // Markers Eof, Error, + Newline, // Tokens with no info. comma, @@ -40,15 +41,25 @@ struct MIToken { exclaim, lparen, rparen, + lbrace, + rbrace, + plus, + minus, // Keywords kw_implicit, kw_implicit_define, + kw_def, kw_dead, kw_killed, kw_undef, + kw_internal, + kw_early_clobber, + kw_debug_use, + kw_tied_def, kw_frame_setup, kw_debug_location, + kw_cfi_same_value, kw_cfi_offset, kw_cfi_def_cfa_register, kw_cfi_def_cfa_offset, @@ -61,18 +72,39 @@ struct MIToken { kw_x86_fp80, kw_fp128, kw_ppc_fp128, + kw_target_flags, + kw_volatile, + kw_non_temporal, + kw_invariant, + kw_align, + kw_stack, + kw_got, + kw_jump_table, + kw_constant_pool, + kw_call_entry, + kw_liveout, + kw_address_taken, + kw_landing_pad, + kw_liveins, + kw_successors, + + // Named metadata keywords + md_tbaa, + md_alias_scope, + md_noalias, + md_range, // Identifier tokens Identifier, + IntegerType, NamedRegister, + MachineBasicBlockLabel, MachineBasicBlock, StackObject, FixedStackObject, NamedGlobalValue, - QuotedNamedGlobalValue, GlobalValue, ExternalSymbol, - QuotedExternalSymbol, // Other tokens IntegerLiteral, @@ -81,30 +113,36 @@ struct MIToken { ConstantPoolItem, JumpTableIndex, NamedIRBlock, - QuotedNamedIRBlock, IRBlock, NamedIRValue, - QuotedNamedIRValue, + IRValue, + QuotedIRValue // `` }; private: TokenKind Kind; - unsigned StringOffset; StringRef Range; + StringRef StringValue; + std::string StringValueStorage; APSInt IntVal; public: - MIToken(TokenKind Kind, StringRef Range, unsigned StringOffset = 0) - : Kind(Kind), StringOffset(StringOffset), Range(Range) {} + MIToken() : Kind(Error) {} - MIToken(TokenKind Kind, StringRef Range, const APSInt &IntVal, - unsigned StringOffset = 0) - : Kind(Kind), StringOffset(StringOffset), Range(Range), IntVal(IntVal) {} + MIToken &reset(TokenKind Kind, StringRef Range); + + MIToken &setStringValue(StringRef StrVal); + MIToken &setOwnedStringValue(std::string StrVal); + MIToken &setIntegerValue(APSInt IntVal); TokenKind kind() const { return Kind; } bool isError() const { return Kind == Error; } + bool isNewlineOrEOF() const { return Kind == Newline || Kind == Eof; } + + bool isErrorOrEOF() const { return Kind == Error || Kind == Eof; } + bool isRegister() const { return Kind == NamedRegister || Kind == underscore || Kind == VirtualRegister; @@ -112,7 +150,14 @@ public: bool isRegisterFlag() const { return Kind == kw_implicit || Kind == kw_implicit_define || - Kind == kw_dead || Kind == kw_killed || Kind == kw_undef; + Kind == kw_def || Kind == kw_dead || Kind == kw_killed || + Kind == kw_undef || Kind == kw_internal || + Kind == kw_early_clobber || Kind == kw_debug_use; + } + + bool isMemoryOperandFlag() const { + return Kind == kw_volatile || Kind == kw_non_temporal || + Kind == kw_invariant; } bool is(TokenKind K) const { return Kind == K; } @@ -121,38 +166,19 @@ public: StringRef::iterator location() const { return Range.begin(); } - bool isStringValueQuoted() const { - return Kind == QuotedNamedGlobalValue || Kind == QuotedExternalSymbol || - Kind == QuotedNamedIRBlock || Kind == QuotedNamedIRValue; - } - - /// Return the token's raw string value. - /// - /// If the string value is quoted, this method returns that quoted string as - /// it is, without unescaping the string value. - StringRef rawStringValue() const { return Range.drop_front(StringOffset); } - - /// Return token's string value. - /// - /// Expects the string value to be unquoted. - StringRef stringValue() const { - assert(!isStringValueQuoted() && "String value is quoted"); - return Range.drop_front(StringOffset); - } + StringRef range() const { return Range; } - /// Unescapes the token's string value. - /// - /// Expects the string value to be quoted. - void unescapeQuotedStringValue(std::string &Str) const; + /// Return the token's string value. + StringRef stringValue() const { return StringValue; } const APSInt &integerValue() const { return IntVal; } bool hasIntegerValue() const { return Kind == IntegerLiteral || Kind == MachineBasicBlock || - Kind == StackObject || Kind == FixedStackObject || - Kind == GlobalValue || Kind == VirtualRegister || - Kind == ConstantPoolItem || Kind == JumpTableIndex || - Kind == IRBlock; + Kind == MachineBasicBlockLabel || Kind == StackObject || + Kind == FixedStackObject || Kind == GlobalValue || + Kind == VirtualRegister || Kind == ConstantPoolItem || + Kind == JumpTableIndex || Kind == IRBlock || Kind == IRValue; } };