LLVM 24.0.0git
MILexer.cpp File Reference
#include "MILexer.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/ADT/Twine.h"
#include <cassert>
#include <cctype>
#include <string>

Go to the source code of this file.

Functions

static Cursor skipWhitespace (Cursor C)
 Skip the leading whitespace characters and return the updated cursor.
static bool isNewlineChar (char C)
static Cursor skipComment (Cursor C)
 Skip a line comment and return the updated cursor.
static Cursor skipMachineOperandComment (Cursor C)
 Machine operands can have comments, enclosed between /* and ‍/.
static bool isIdentifierChar (char C)
 Return true if the given character satisfies the following regular expression: [-a-zA-Z$._0-9].
static std::string unescapeQuotedString (StringRef Value)
 Unescapes the given string value.
static Cursor lexStringConstant (Cursor C, ErrorCallbackType ErrorCallback)
 Lex a string constant using the following regular expression: "[^"]*".
static Cursor lexName (Cursor C, MIToken &Token, MIToken::TokenKind Type, unsigned PrefixLength, ErrorCallbackType ErrorCallback)
static MIToken::TokenKind getIdentifierKind (StringRef Identifier)
static Cursor maybeLexIdentifier (Cursor C, MIToken &Token)
static Cursor maybeLexMachineBasicBlock (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexIndex (Cursor C, MIToken &Token, StringRef Rule, MIToken::TokenKind Kind)
static Cursor maybeLexIndexAndName (Cursor C, MIToken &Token, StringRef Rule, MIToken::TokenKind Kind)
static Cursor maybeLexJumpTableIndex (Cursor C, MIToken &Token)
static Cursor maybeLexStackObject (Cursor C, MIToken &Token)
static Cursor maybeLexFixedStackObject (Cursor C, MIToken &Token)
static Cursor maybeLexConstantPoolItem (Cursor C, MIToken &Token)
static Cursor maybeLexSubRegisterIndex (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexIRBlock (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexIRValue (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexStringConstant (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor lexVirtualRegister (Cursor C, MIToken &Token)
static bool isRegisterChar (char C)
 Returns true for a character allowed in a register name.
static Cursor lexNamedVirtualRegister (Cursor C, MIToken &Token)
static Cursor maybeLexRegister (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexGlobalValue (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexExternalSymbol (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static Cursor maybeLexMCSymbol (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static bool isValidHexFloatingPointPrefix (char C)
static Cursor lexFloatingPointLiteral (Cursor Range, Cursor C, MIToken &Token)
static Cursor maybeLexHexadecimalLiteral (Cursor C, MIToken &Token)
static Cursor maybeLexFloatHexBits (Cursor C, MIToken &Token)
static Cursor maybeLexNumericalLiteral (Cursor C, MIToken &Token)
static MIToken::TokenKind getMetadataKeywordKind (StringRef Identifier)
static Cursor maybeLexExclaim (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)
static MIToken::TokenKind symbolToken (char C)
static Cursor maybeLexSymbol (Cursor C, MIToken &Token)
static Cursor maybeLexNewline (Cursor C, MIToken &Token)
static Cursor maybeLexEscapedIRValue (Cursor C, MIToken &Token, ErrorCallbackType ErrorCallback)

Function Documentation

◆ getIdentifierKind()

MIToken::TokenKind getIdentifierKind ( StringRef Identifier)
static

Definition at line 190 of file MILexer.cpp.

References llvm::StringSwitch< T, R >::Case(), llvm::StringSwitch< T, R >::Default(), llvm::MIToken::Identifier, llvm::MIToken::kw_addrspace, llvm::MIToken::kw_afn, llvm::MIToken::kw_align, llvm::MIToken::kw_arcp, llvm::MIToken::kw_basealign, llvm::MIToken::kw_bb_id, llvm::MIToken::kw_bbsections, llvm::MIToken::kw_bfloat, llvm::MIToken::kw_blockaddress, llvm::MIToken::kw_call_entry, llvm::MIToken::kw_call_frame_size, llvm::MIToken::kw_cfi_aarch64_negate_ra_sign_state, llvm::MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc, llvm::MIToken::kw_cfi_adjust_cfa_offset, llvm::MIToken::kw_cfi_def_cfa, llvm::MIToken::kw_cfi_def_cfa_offset, llvm::MIToken::kw_cfi_def_cfa_register, llvm::MIToken::kw_cfi_escape, llvm::MIToken::kw_cfi_llvm_def_aspace_cfa, llvm::MIToken::kw_cfi_llvm_register_pair, llvm::MIToken::kw_cfi_llvm_vector_offset, llvm::MIToken::kw_cfi_llvm_vector_register_mask, llvm::MIToken::kw_cfi_llvm_vector_registers, llvm::MIToken::kw_cfi_offset, llvm::MIToken::kw_cfi_register, llvm::MIToken::kw_cfi_rel_offset, llvm::MIToken::kw_cfi_remember_state, llvm::MIToken::kw_cfi_restore, llvm::MIToken::kw_cfi_restore_state, llvm::MIToken::kw_cfi_same_value, llvm::MIToken::kw_cfi_set_ra_state, llvm::MIToken::kw_cfi_type, llvm::MIToken::kw_cfi_undefined, llvm::MIToken::kw_cfi_window_save, llvm::MIToken::kw_constant_pool, llvm::MIToken::kw_contract, llvm::MIToken::kw_custom, llvm::MIToken::kw_dbg_instr_ref, llvm::MIToken::kw_deactivation_symbol, llvm::MIToken::kw_dead, llvm::MIToken::kw_debug_instr_number, llvm::MIToken::kw_debug_location, llvm::MIToken::kw_debug_use, llvm::MIToken::kw_def, llvm::MIToken::kw_dereferenceable, llvm::MIToken::kw_disjoint, llvm::MIToken::kw_distinct, llvm::MIToken::kw_double, llvm::MIToken::kw_early_clobber, llvm::MIToken::kw_ehfunclet_entry, llvm::MIToken::kw_ehscope_entry, llvm::MIToken::kw_exact, llvm::MIToken::kw_float, llvm::MIToken::kw_floatpred, llvm::MIToken::kw_fp128, llvm::MIToken::kw_frame_destroy, llvm::MIToken::kw_frame_setup, llvm::MIToken::kw_got, llvm::MIToken::kw_half, llvm::MIToken::kw_heap_alloc_marker, llvm::MIToken::kw_implicit, llvm::MIToken::kw_implicit_define, llvm::MIToken::kw_inbounds, llvm::MIToken::kw_inlineasm_br_indirect_target, llvm::MIToken::kw_internal, llvm::MIToken::kw_intpred, llvm::MIToken::kw_intrinsic, llvm::MIToken::kw_invariant, llvm::MIToken::kw_ir_block_address_taken, llvm::MIToken::kw_jump_table, llvm::MIToken::kw_killed, llvm::MIToken::kw_landing_pad, llvm::MIToken::kw_lanemask, llvm::MIToken::kw_liveins, llvm::MIToken::kw_liveout, llvm::MIToken::kw_lr_split, llvm::MIToken::kw_machine_block_address_taken, llvm::MIToken::kw_mmra, llvm::MIToken::kw_ninf, llvm::MIToken::kw_nnan, llvm::MIToken::kw_nneg, llvm::MIToken::kw_noconvergent, llvm::MIToken::kw_nofpexcept, llvm::MIToken::kw_non_temporal, llvm::MIToken::kw_nsw, llvm::MIToken::kw_nsz, llvm::MIToken::kw_nusw, llvm::MIToken::kw_nuw, llvm::MIToken::kw_pcsections, llvm::MIToken::kw_post_instr_symbol, llvm::MIToken::kw_ppc_fp128, llvm::MIToken::kw_pre_instr_symbol, llvm::MIToken::kw_reassoc, llvm::MIToken::kw_renamable, llvm::MIToken::kw_samesign, llvm::MIToken::kw_shufflemask, llvm::MIToken::kw_stack, llvm::MIToken::kw_successors, llvm::MIToken::kw_target_flags, llvm::MIToken::kw_target_index, llvm::MIToken::kw_tied_def, llvm::MIToken::kw_undef, llvm::MIToken::kw_unknown_address, llvm::MIToken::kw_unknown_size, llvm::MIToken::kw_unpredictable, llvm::MIToken::kw_volatile, llvm::MIToken::kw_x86_fp80, and llvm::MIToken::underscore.

Referenced by maybeLexIdentifier().

◆ getMetadataKeywordKind()

◆ isIdentifierChar()

bool isIdentifierChar ( char C)
static

Return true if the given character satisfies the following regular expression: [-a-zA-Z$._0-9].

Definition at line 118 of file MILexer.cpp.

References C().

Referenced by isRegisterChar(), lexName(), maybeLexExclaim(), maybeLexIdentifier(), maybeLexIndexAndName(), maybeLexMachineBasicBlock(), and maybeLexMCSymbol().

◆ isNewlineChar()

bool isNewlineChar ( char C)
static

Definition at line 91 of file MILexer.cpp.

References C().

Referenced by lexStringConstant(), maybeLexEscapedIRValue(), maybeLexNewline(), and skipComment().

◆ isRegisterChar()

bool isRegisterChar ( char C)
static

Returns true for a character allowed in a register name.

Definition at line 456 of file MILexer.cpp.

References C(), and isIdentifierChar().

Referenced by lexNamedVirtualRegister(), and maybeLexRegister().

◆ isValidHexFloatingPointPrefix()

bool isValidHexFloatingPointPrefix ( char C)
static

Definition at line 567 of file MILexer.cpp.

References C().

Referenced by maybeLexHexadecimalLiteral().

◆ lexFloatingPointLiteral()

Cursor lexFloatingPointLiteral ( Cursor Range,
Cursor C,
MIToken & Token )
static

Definition at line 571 of file MILexer.cpp.

References C(), llvm::MIToken::FloatingPointLiteral, Range, and llvm::MIToken::reset().

Referenced by maybeLexNumericalLiteral().

◆ lexName()

◆ lexNamedVirtualRegister()

Cursor lexNamedVirtualRegister ( Cursor C,
MIToken & Token )
static

◆ lexStringConstant()

Cursor lexStringConstant ( Cursor C,
ErrorCallbackType ErrorCallback )
static

Lex a string constant using the following regular expression: "[^"]*".

Definition at line 154 of file MILexer.cpp.

References assert(), C(), and isNewlineChar().

Referenced by lexName(), and maybeLexMCSymbol().

◆ lexVirtualRegister()

Cursor lexVirtualRegister ( Cursor C,
MIToken & Token )
static

◆ maybeLexConstantPoolItem()

Cursor maybeLexConstantPoolItem ( Cursor C,
MIToken & Token )
static

Definition at line 403 of file MILexer.cpp.

References C(), llvm::MIToken::ConstantPoolItem, and maybeLexIndex().

◆ maybeLexEscapedIRValue()

Cursor maybeLexEscapedIRValue ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexExclaim()

Cursor maybeLexExclaim ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexExternalSymbol()

Cursor maybeLexExternalSymbol ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

Definition at line 512 of file MILexer.cpp.

References C(), llvm::MIToken::ExternalSymbol, and lexName().

◆ maybeLexFixedStackObject()

Cursor maybeLexFixedStackObject ( Cursor C,
MIToken & Token )
static

Definition at line 399 of file MILexer.cpp.

References C(), llvm::MIToken::FixedStackObject, and maybeLexIndex().

◆ maybeLexFloatHexBits()

Cursor maybeLexFloatHexBits ( Cursor C,
MIToken & Token )
static

Definition at line 609 of file MILexer.cpp.

References C(), llvm::MIToken::FloatingPointLiteral, Range, and llvm::MIToken::reset().

◆ maybeLexGlobalValue()

Cursor maybeLexGlobalValue ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexHexadecimalLiteral()

Cursor maybeLexHexadecimalLiteral ( Cursor C,
MIToken & Token )
static

◆ maybeLexIdentifier()

Cursor maybeLexIdentifier ( Cursor C,
MIToken & Token )
static

◆ maybeLexIndex()

◆ maybeLexIndexAndName()

Cursor maybeLexIndexAndName ( Cursor C,
MIToken & Token,
StringRef Rule,
MIToken::TokenKind Kind )
static

◆ maybeLexIRBlock()

Cursor maybeLexIRBlock ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexIRValue()

Cursor maybeLexIRValue ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexJumpTableIndex()

Cursor maybeLexJumpTableIndex ( Cursor C,
MIToken & Token )
static

Definition at line 391 of file MILexer.cpp.

References C(), llvm::MIToken::JumpTableIndex, and maybeLexIndex().

◆ maybeLexMachineBasicBlock()

◆ maybeLexMCSymbol()

◆ maybeLexNewline()

Cursor maybeLexNewline ( Cursor C,
MIToken & Token )
static

Definition at line 718 of file MILexer.cpp.

References C(), isNewlineChar(), llvm::MIToken::Newline, Range, and llvm::MIToken::reset().

◆ maybeLexNumericalLiteral()

Cursor maybeLexNumericalLiteral ( Cursor C,
MIToken & Token )
static

◆ maybeLexRegister()

Cursor maybeLexRegister ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

◆ maybeLexStackObject()

Cursor maybeLexStackObject ( Cursor C,
MIToken & Token )
static

Definition at line 395 of file MILexer.cpp.

References C(), maybeLexIndexAndName(), and llvm::MIToken::StackObject.

◆ maybeLexStringConstant()

Cursor maybeLexStringConstant ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

Definition at line 436 of file MILexer.cpp.

References C(), lexName(), and llvm::MIToken::StringConstant.

◆ maybeLexSubRegisterIndex()

Cursor maybeLexSubRegisterIndex ( Cursor C,
MIToken & Token,
ErrorCallbackType ErrorCallback )
static

Definition at line 407 of file MILexer.cpp.

References C(), lexName(), llvm::StringRef::size(), and llvm::MIToken::SubRegisterIndex.

◆ maybeLexSymbol()

Cursor maybeLexSymbol ( Cursor C,
MIToken & Token )
static

◆ skipComment()

Cursor skipComment ( Cursor C)
static

Skip a line comment and return the updated cursor.

Definition at line 94 of file MILexer.cpp.

References C(), and isNewlineChar().

◆ skipMachineOperandComment()

Cursor skipMachineOperandComment ( Cursor C)
static

Machine operands can have comments, enclosed between /* and ‍/.

This eats up all tokens, including / and *‍/.

Definition at line 104 of file MILexer.cpp.

References C().

◆ skipWhitespace()

Cursor skipWhitespace ( Cursor C)
static

Skip the leading whitespace characters and return the updated cursor.

Definition at line 85 of file MILexer.cpp.

References C().

◆ symbolToken()

◆ unescapeQuotedString()

std::string unescapeQuotedString ( StringRef Value)
static

Unescapes the given string value.

Expects the string value to be quoted.

Definition at line 126 of file MILexer.cpp.

References assert(), C(), and llvm::hexDigitValue().

Referenced by lexName(), and maybeLexMCSymbol().