LLVM 18.0.0git
MILexer.h
Go to the documentation of this file.
1//===- MILexer.h - Lexer for machine instructions ---------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file declares the function that lexes the machine instruction source
10// string.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_CODEGEN_MIRPARSER_MILEXER_H
15#define LLVM_LIB_CODEGEN_MIRPARSER_MILEXER_H
16
17#include "llvm/ADT/APSInt.h"
18#include "llvm/ADT/StringRef.h"
19#include <string>
20
21namespace llvm {
22
23class Twine;
24
25/// A token produced by the machine instruction lexer.
26struct MIToken {
27 enum TokenKind {
28 // Markers
32
33 // Tokens with no info.
49
50 // Keywords
140
141 // Metadata types.
143
144 // Named metadata keywords
151
152 // Identifier tokens
164
165 // Other tokens
177 QuotedIRValue, // `<constant value>`
180 };
181
182private:
183 TokenKind Kind = Error;
184 StringRef Range;
185 StringRef StringValue;
186 std::string StringValueStorage;
187 APSInt IntVal;
188
189public:
190 MIToken() = default;
191
192 MIToken &reset(TokenKind Kind, StringRef Range);
193
195 MIToken &setOwnedStringValue(std::string StrVal);
197
198 TokenKind kind() const { return Kind; }
199
200 bool isError() const { return Kind == Error; }
201
202 bool isNewlineOrEOF() const { return Kind == Newline || Kind == Eof; }
203
204 bool isErrorOrEOF() const { return Kind == Error || Kind == Eof; }
205
206 bool isRegister() const {
207 return Kind == NamedRegister || Kind == underscore ||
208 Kind == NamedVirtualRegister || Kind == VirtualRegister;
209 }
210
211 bool isRegisterFlag() const {
212 return Kind == kw_implicit || Kind == kw_implicit_define ||
213 Kind == kw_def || Kind == kw_dead || Kind == kw_killed ||
214 Kind == kw_undef || Kind == kw_internal ||
215 Kind == kw_early_clobber || Kind == kw_debug_use ||
216 Kind == kw_renamable;
217 }
218
219 bool isMemoryOperandFlag() const {
220 return Kind == kw_volatile || Kind == kw_non_temporal ||
221 Kind == kw_dereferenceable || Kind == kw_invariant ||
222 Kind == StringConstant;
223 }
224
225 bool is(TokenKind K) const { return Kind == K; }
226
227 bool isNot(TokenKind K) const { return Kind != K; }
228
229 StringRef::iterator location() const { return Range.begin(); }
230
231 StringRef range() const { return Range; }
232
233 /// Return the token's string value.
234 StringRef stringValue() const { return StringValue; }
235
236 const APSInt &integerValue() const { return IntVal; }
237
238 bool hasIntegerValue() const {
239 return Kind == IntegerLiteral || Kind == MachineBasicBlock ||
240 Kind == MachineBasicBlockLabel || Kind == StackObject ||
241 Kind == FixedStackObject || Kind == GlobalValue ||
242 Kind == VirtualRegister || Kind == ConstantPoolItem ||
243 Kind == JumpTableIndex || Kind == IRBlock || Kind == IRValue;
244 }
245};
246
247/// Consume a single machine instruction token in the given source and return
248/// the remaining source string.
250 StringRef Source, MIToken &Token,
251 function_ref<void(StringRef::iterator, const Twine &)> ErrorCallback);
252
253} // end namespace llvm
254
255#endif // LLVM_LIB_CODEGEN_MIRPARSER_MILEXER_H
This file implements the APSInt class, which is a simple class that represents an arbitrary sized int...
An arbitrary precision integer that knows its signedness.
Definition: APSInt.h:23
Lightweight error class with error context and mandatory checking.
Definition: Error.h:160
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
An efficient, type-erasing, non-owning reference to a callable.
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
StringRef lexMIToken(StringRef Source, MIToken &Token, function_ref< void(StringRef::iterator, const Twine &)> ErrorCallback)
Consume a single machine instruction token in the given source and return the remaining source string...
A token produced by the machine instruction lexer.
Definition: MILexer.h:26
bool isRegisterFlag() const
Definition: MILexer.h:211
MIToken & setStringValue(StringRef StrVal)
Definition: MILexer.cpp:68
TokenKind kind() const
Definition: MILexer.h:198
bool isNewlineOrEOF() const
Definition: MILexer.h:202
bool hasIntegerValue() const
Definition: MILexer.h:238
bool isNot(TokenKind K) const
Definition: MILexer.h:227
bool is(TokenKind K) const
Definition: MILexer.h:225
MIToken()=default
bool isMemoryOperandFlag() const
Definition: MILexer.h:219
StringRef stringValue() const
Return the token's string value.
Definition: MILexer.h:234
@ kw_target_flags
Definition: MILexer.h:105
@ kw_landing_pad
Definition: MILexer.h:119
@ kw_blockaddress
Definition: MILexer.h:96
@ kw_pre_instr_symbol
Definition: MILexer.h:127
@ md_alias_scope
Definition: MILexer.h:146
@ kw_intrinsic
Definition: MILexer.h:97
@ NamedGlobalValue
Definition: MILexer.h:160
@ kw_call_frame_size
Definition: MILexer.h:138
@ SubRegisterIndex
Definition: MILexer.h:178
@ kw_frame_setup
Definition: MILexer.h:63
@ kw_cfi_aarch64_negate_ra_sign_state
Definition: MILexer.h:95
@ ConstantPoolItem
Definition: MILexer.h:171
@ kw_cfi_llvm_def_aspace_cfa
Definition: MILexer.h:88
@ MachineBasicBlock
Definition: MILexer.h:157
@ kw_dbg_instr_ref
Definition: MILexer.h:79
@ NamedVirtualRegister
Definition: MILexer.h:155
@ kw_early_clobber
Definition: MILexer.h:59
@ kw_cfi_offset
Definition: MILexer.h:81
@ kw_unpredictable
Definition: MILexer.h:76
@ FloatingPointLiteral
Definition: MILexer.h:167
@ kw_debug_use
Definition: MILexer.h:60
@ kw_cfi_window_save
Definition: MILexer.h:94
@ kw_constant_pool
Definition: MILexer.h:115
@ kw_frame_destroy
Definition: MILexer.h:64
@ kw_cfi_undefined
Definition: MILexer.h:93
@ StringConstant
Definition: MILexer.h:179
@ MachineBasicBlockLabel
Definition: MILexer.h:156
@ kw_cfi_restore
Definition: MILexer.h:91
@ kw_non_temporal
Definition: MILexer.h:107
@ kw_cfi_register
Definition: MILexer.h:89
@ kw_inlineasm_br_indirect_target
Definition: MILexer.h:120
@ kw_cfi_rel_offset
Definition: MILexer.h:82
@ kw_ehfunclet_entry
Definition: MILexer.h:121
@ kw_cfi_def_cfa_register
Definition: MILexer.h:83
@ FixedStackObject
Definition: MILexer.h:159
@ kw_cfi_same_value
Definition: MILexer.h:80
@ kw_target_index
Definition: MILexer.h:98
@ kw_cfi_adjust_cfa_offset
Definition: MILexer.h:85
@ kw_dereferenceable
Definition: MILexer.h:55
@ kw_implicit_define
Definition: MILexer.h:52
@ kw_cfi_def_cfa
Definition: MILexer.h:87
@ kw_cfi_escape
Definition: MILexer.h:86
@ VirtualRegister
Definition: MILexer.h:170
@ kw_cfi_def_cfa_offset
Definition: MILexer.h:84
@ kw_machine_block_address_taken
Definition: MILexer.h:137
@ kw_renamable
Definition: MILexer.h:61
@ ExternalSymbol
Definition: MILexer.h:162
@ kw_unknown_size
Definition: MILexer.h:134
@ IntegerLiteral
Definition: MILexer.h:166
@ kw_cfi_remember_state
Definition: MILexer.h:90
@ kw_debug_instr_number
Definition: MILexer.h:78
@ kw_post_instr_symbol
Definition: MILexer.h:128
@ kw_cfi_restore_state
Definition: MILexer.h:92
@ kw_nofpexcept
Definition: MILexer.h:75
@ kw_ir_block_address_taken
Definition: MILexer.h:136
@ kw_unknown_address
Definition: MILexer.h:135
@ JumpTableIndex
Definition: MILexer.h:172
@ kw_shufflemask
Definition: MILexer.h:126
@ kw_debug_location
Definition: MILexer.h:77
@ kw_noconvergent
Definition: MILexer.h:139
@ kw_heap_alloc_marker
Definition: MILexer.h:129
StringRef range() const
Definition: MILexer.h:231
bool isRegister() const
Definition: MILexer.h:206
MIToken & setIntegerValue(APSInt IntVal)
Definition: MILexer.cpp:79
bool isErrorOrEOF() const
Definition: MILexer.h:204
MIToken & reset(TokenKind Kind, StringRef Range)
Definition: MILexer.cpp:62
bool isError() const
Definition: MILexer.h:200
MIToken & setOwnedStringValue(std::string StrVal)
Definition: MILexer.cpp:73
StringRef::iterator location() const
Definition: MILexer.h:229
const APSInt & integerValue() const
Definition: MILexer.h:236