LLVM: include/llvm/MC/MCParser/MCTargetAsmParser.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_MC_MCPARSER_MCTARGETASMPARSER_H
10#define LLVM_MC_MCPARSER_MCTARGETASMPARSER_H
11
21#include
22#include
23
24namespace llvm {
25
33
35
49
51 2,
52 2,
53 2,
54 3,
55 3,
56 3,
57 5,
58 1,
59 5,
60 2,
61 2
62};
63
64
65
73
75
77 StringRef offsetName, int64_t imm, bool needBracs)
82 }
87
88
91 return (Scale == 1) ||
93 }
94};
95
105
106public:
108 bool Restricted = false)
111 }
116};
117
125
126
128 enum class StatusTy {
129 Success,
130 Failure,
131 NoMatch,
132 } Status;
133
134public:
135#if __cplusplus >= 202002L
136 using enum StatusTy;
137#else
138 static constexpr StatusTy Success = StatusTy::Success;
139 static constexpr StatusTy Failure = StatusTy::Failure;
140 static constexpr StatusTy NoMatch = StatusTy::NoMatch;
141#endif
142
144
145 constexpr ParseStatus(StatusTy Status) : Status(Status) {}
146
148
150
151 constexpr bool isSuccess() const { return Status == StatusTy::Success; }
152 constexpr bool isFailure() const { return Status == StatusTy::Failure; }
153 constexpr bool isNoMatch() const { return Status == StatusTy::NoMatch; }
154};
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
200
201
202
203
204
205
206class NearMissInfo {
207public:
215
216
217
218 static NearMissInfo getSuccess() { return NearMissInfo(); }
219
220
221
222
224 NearMissInfo Result;
226 Result.Features = MissingFeatures;
227 return Result;
228 }
229
230
231
232
234 NearMissInfo Result;
236 Result.PredicateError = FailureCode;
237 return Result;
238 }
239
240
241
242
243
244
246 unsigned OperandClass, unsigned Opcode,
247 unsigned OperandIndex) {
248 NearMissInfo Result;
250 Result.MissedOperand.Error = OperandError;
251 Result.MissedOperand.Class = OperandClass;
252 Result.MissedOperand.Opcode = Opcode;
253 Result.MissedOperand.Index = OperandIndex;
254 return Result;
255 }
256
257
258
259
261 unsigned Opcode) {
262 NearMissInfo Result;
264 Result.TooFewOperands.Class = OperandClass;
265 Result.TooFewOperands.Opcode = Opcode;
266 return Result;
267 }
268
270
272
273
274
279
280
285
290
295
300
301
306
307private:
308 NearMissKind Kind;
309
310
311
312 struct MissedOpInfo {
313 unsigned Class;
314 unsigned Opcode;
316 unsigned Index;
317 };
318
319 struct TooFewOperandsInfo {
320 unsigned Class;
321 unsigned Opcode;
322 };
323
324 union {
329 };
330
332};
333
334
336public:
346
347protected:
350
351
353
354
356
357
359
360
361
363
364
366
367
369
371
372public:
375
377
379
386
389
391
395
396
398 return getParser().parsePrimaryExpr(Res, EndLoc, nullptr);
399 }
400
401
404 return getParser().parseExpression(Res, EndLoc);
405 }
406
408 SMLoc &EndLoc) = 0;
409
410
411
412
413
414
416 SMLoc &EndLoc) = 0;
417
418
419
420
421
422
423
424
425
426
427
428
429
430
437
438
439
440
441
442
443
444
445
446
447
448
450
451
452
453
454
455
456
457
458
459
460
462
463
464
465
466
467
468
472 bool MatchingInlineAsm) = 0;
473
474
476
477
478
479
480
482 unsigned Kind) {
484 }
485
486
487
488 virtual unsigned
492
493
494
498
501
502
503
504
507
508
510
512
516
519 return nullptr;
520 }
521
522
524
526
527
528
530
531
533
534
536};
537
538}
539
540#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static uint64_t scale(uint64_t Num, uint32_t N, uint32_t D)
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
Analysis containing CSE Info
Target independent representation for an assembler token.
LLVM_ABI SMLoc getLoc() const
Base class for user error types.
Lightweight error class with error context and mandatory checking.
Container class for subtarget features.
MCAsmParser & getParser()
Generic Sema callback for assembly parser.
Context object for machine code objects.
Base class for the full range of assembler expressions which are needed for parsing.
Instances of this class represent a single low-level machine instruction.
Interface to description of machine instruction set.
MCParsedAsmOperand - This abstract class represents a source-level assembly instruction operand.
Wrapper class representing physical registers. Should be passed by value.
Streaming machine code generation interface.
Generic base class for all target subtargets.
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
MCTargetAsmParser - Generic interface to target specific assembly parsers.
Definition MCTargetAsmParser.h:335
virtual bool tokenIsStartOfStatement(AsmToken::TokenKind Token)
Definition MCTargetAsmParser.h:513
virtual void onLabelParsed(MCSymbol *Symbol)
Definition MCTargetAsmParser.h:525
virtual bool parseInstruction(ParseInstructionInfo &Info, StringRef Name, SMLoc NameLoc, OperandVector &Operands)=0
Parse one assembly instruction.
const FeatureBitset & getAvailableFeatures() const
Definition MCTargetAsmParser.h:380
virtual void convertToMapAndConstraints(unsigned Kind, const OperandVector &Operands)=0
MCTargetOptions MCOptions
Set of options which affects instrumentation of inline assembly.
Definition MCTargetAsmParser.h:365
virtual const MCExpr * applySpecifier(const MCExpr *E, uint32_t, MCContext &Ctx)
Definition MCTargetAsmParser.h:517
bool ParsingMSInlineAsm
ParsingMSInlineAsm - Are we parsing ms-style inline assembly?
Definition MCTargetAsmParser.h:358
virtual bool equalIsAsmAssignment()
Definition MCTargetAsmParser.h:509
MatchResultTy
Definition MCTargetAsmParser.h:337
@ Match_MnemonicFail
Definition MCTargetAsmParser.h:341
@ Match_Success
Definition MCTargetAsmParser.h:342
@ Match_InvalidOperand
Definition MCTargetAsmParser.h:338
@ FIRST_TARGET_MATCH_RESULT_TY
Definition MCTargetAsmParser.h:344
@ Match_MissingFeature
Definition MCTargetAsmParser.h:340
@ Match_NearMisses
Definition MCTargetAsmParser.h:343
@ Match_InvalidTiedOperand
Definition MCTargetAsmParser.h:339
virtual bool parseRegister(MCRegister &Reg, SMLoc &StartLoc, SMLoc &EndLoc)=0
virtual bool ParseDirective(AsmToken DirectiveID)
ParseDirective - Parse a target specific assembler directive This method is deprecated,...
Definition MCTargetAsmParser.h:449
MCTargetAsmParser(MCTargetOptions const &, const MCSubtargetInfo &STI, const MCInstrInfo &MII)
MCAsmParserSemaCallback * SemaCallback
SemaCallback - The Sema callback implementation.
Definition MCTargetAsmParser.h:362
void setParsingMSInlineAsm(bool Value)
Definition MCTargetAsmParser.h:388
virtual void onBeginOfFile()
Definition MCTargetAsmParser.h:532
virtual bool parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc)
Definition MCTargetAsmParser.h:397
virtual bool omitRegisterFromClobberLists(MCRegister Reg)
Allows targets to let registers opt out of clobber lists.
Definition MCTargetAsmParser.h:475
virtual unsigned checkEarlyTargetMatchPredicate(MCInst &Inst, const OperandVector &Operands)
Validate the instruction match against any complex target predicates before rendering any operands to...
Definition MCTargetAsmParser.h:489
virtual bool parseDataExpr(const MCExpr *&Res)
Definition MCTargetAsmParser.h:402
virtual ParseStatus tryParseRegister(MCRegister &Reg, SMLoc &StartLoc, SMLoc &EndLoc)=0
tryParseRegister - parse one register if possible
virtual bool areEqualRegs(const MCParsedAsmOperand &Op1, const MCParsedAsmOperand &Op2) const
Returns whether two operands are registers and are equal.
virtual bool matchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, OperandVector &Operands, MCStreamer &Out, uint64_t &ErrorInfo, bool MatchingInlineAsm)=0
Recognize a series of operands of a parsed instruction as an actual MCInst and emit it to the specifi...
const MCInstrInfo & MII
Definition MCTargetAsmParser.h:370
virtual void flushPendingInstructions(MCStreamer &Out)
Ensure that all previously parsed instructions have been emitted to the output streamer,...
Definition MCTargetAsmParser.h:529
bool isParsingMSInlineAsm()
Definition MCTargetAsmParser.h:387
virtual void onEndOfFile()
Definition MCTargetAsmParser.h:535
virtual bool isLabel(AsmToken &Token)
Definition MCTargetAsmParser.h:511
void setAvailableFeatures(const FeatureBitset &Value)
Definition MCTargetAsmParser.h:383
virtual bool parseInstruction(ParseInstructionInfo &Info, StringRef Name, AsmToken Token, OperandVector &Operands)
Definition MCTargetAsmParser.h:433
const MCSubtargetInfo & getSTI() const
virtual void doBeforeLabelEmit(MCSymbol *Symbol, SMLoc IDLoc)
Definition MCTargetAsmParser.h:523
FeatureBitset AvailableFeatures
AvailableFeatures - The current set of available features.
Definition MCTargetAsmParser.h:355
void setSemaCallback(MCAsmParserSemaCallback *Callback)
Definition MCTargetAsmParser.h:392
MCTargetAsmParser(const MCTargetAsmParser &)=delete
virtual unsigned validateTargetOperandClass(MCParsedAsmOperand &Op, unsigned Kind)
Allow a target to add special case operand matching for things that tblgen doesn't/can't handle effec...
Definition MCTargetAsmParser.h:481
~MCTargetAsmParser() override
MCTargetAsmParser & operator=(const MCTargetAsmParser &)=delete
virtual unsigned checkTargetMatchPredicate(MCInst &Inst)
checkTargetMatchPredicate - Validate the instruction match against any complex target predicates not ...
Definition MCTargetAsmParser.h:495
MCTargetOptions getTargetOptions() const
Definition MCTargetAsmParser.h:390
const MCSubtargetInfo * STI
Current STI.
Definition MCTargetAsmParser.h:368
static NearMissInfo getMissedPredicate(unsigned FailureCode)
Definition MCTargetAsmParser.h:233
unsigned getOperandClass() const
Definition MCTargetAsmParser.h:286
static NearMissInfo getTooFewOperands(unsigned OperandClass, unsigned Opcode)
Definition MCTargetAsmParser.h:260
static NearMissInfo getMissedOperand(unsigned OperandError, unsigned OperandClass, unsigned Opcode, unsigned OperandIndex)
Definition MCTargetAsmParser.h:245
unsigned getOperandIndex() const
Definition MCTargetAsmParser.h:302
const FeatureBitset & getFeatures() const
Definition MCTargetAsmParser.h:275
NearMissKind getKind() const
Definition MCTargetAsmParser.h:271
FeatureBitset Features
Definition MCTargetAsmParser.h:325
static NearMissInfo getMissedFeature(const FeatureBitset &MissingFeatures)
Definition MCTargetAsmParser.h:223
TooFewOperandsInfo TooFewOperands
Definition MCTargetAsmParser.h:328
unsigned getOperandError() const
Definition MCTargetAsmParser.h:296
NearMissKind
Definition MCTargetAsmParser.h:208
@ NearMissOperand
Definition MCTargetAsmParser.h:210
@ NearMissTooFewOperands
Definition MCTargetAsmParser.h:213
@ NearMissPredicate
Definition MCTargetAsmParser.h:212
@ NearMissFeature
Definition MCTargetAsmParser.h:211
@ NoNearMiss
Definition MCTargetAsmParser.h:209
unsigned PredicateError
Definition MCTargetAsmParser.h:326
static NearMissInfo getSuccess()
Definition MCTargetAsmParser.h:218
unsigned getOpcode() const
Definition MCTargetAsmParser.h:291
unsigned getPredicateError() const
Definition MCTargetAsmParser.h:281
MissedOpInfo MissedOperand
Definition MCTargetAsmParser.h:327
Ternary parse status returned by various parse* methods.
Definition MCTargetAsmParser.h:127
constexpr bool isFailure() const
Definition MCTargetAsmParser.h:152
static constexpr StatusTy Failure
Definition MCTargetAsmParser.h:139
constexpr ParseStatus(bool Error)
Definition MCTargetAsmParser.h:147
constexpr ParseStatus(StatusTy Status)
Definition MCTargetAsmParser.h:145
constexpr bool isSuccess() const
Definition MCTargetAsmParser.h:151
static constexpr StatusTy Success
Definition MCTargetAsmParser.h:138
static constexpr StatusTy NoMatch
Definition MCTargetAsmParser.h:140
constexpr bool isNoMatch() const
Definition MCTargetAsmParser.h:153
constexpr ParseStatus(T)=delete
constexpr ParseStatus()
Definition MCTargetAsmParser.h:143
Represents a location in source code.
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringRef - Represent a constant reference to a string, i.e.
LLVM Value Representation.
This is an optimization pass for GlobalISel generic memory operations.
AsmRewriteKind
Definition MCTargetAsmParser.h:36
@ AOK_EVEN
Definition MCTargetAsmParser.h:38
@ AOK_Label
Definition MCTargetAsmParser.h:44
@ AOK_EndOfStatement
Definition MCTargetAsmParser.h:45
@ AOK_Output
Definition MCTargetAsmParser.h:42
@ AOK_SizeDirective
Definition MCTargetAsmParser.h:43
@ AOK_Emit
Definition MCTargetAsmParser.h:39
@ AOK_Skip
Definition MCTargetAsmParser.h:46
@ AOK_CallInput
Definition MCTargetAsmParser.h:40
@ AOK_Input
Definition MCTargetAsmParser.h:41
@ AOK_IntelExpr
Definition MCTargetAsmParser.h:47
@ AOK_Align
Definition MCTargetAsmParser.h:37
SmallVectorImpl< std::unique_ptr< MCParsedAsmOperand > > OperandVector
Definition MCTargetAsmParser.h:34
const char AsmRewritePrecedence[]
Definition MCTargetAsmParser.h:50
DWARFExpression::Operation Op
bool IntelExpRestricted
Definition MCTargetAsmParser.h:104
AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len=0, int64_t val=0, bool Restricted=false)
Definition MCTargetAsmParser.h:107
AsmRewriteKind Kind
Definition MCTargetAsmParser.h:97
AsmRewrite(SMLoc loc, unsigned len, IntelExpr exp)
Definition MCTargetAsmParser.h:114
IntelExpr IntelExp
Definition MCTargetAsmParser.h:103
AsmRewrite(AsmRewriteKind kind, SMLoc loc, unsigned len, StringRef label)
Definition MCTargetAsmParser.h:112
unsigned Len
Definition MCTargetAsmParser.h:99
SMLoc Loc
Definition MCTargetAsmParser.h:98
StringRef Label
Definition MCTargetAsmParser.h:102
bool Done
Definition MCTargetAsmParser.h:100
int64_t Val
Definition MCTargetAsmParser.h:101
constexpr DiagnosticPredicate(bool Matches)
Definition MCTargetAsmParser.h:191
PredicateTy
Definition MCTargetAsmParser.h:183
@ Match
Definition MCTargetAsmParser.h:184
@ NearMatch
Definition MCTargetAsmParser.h:185
@ NoMatch
Definition MCTargetAsmParser.h:186
enum llvm::DiagnosticPredicate::PredicateTy Predicate
constexpr bool isMatch() const
Definition MCTargetAsmParser.h:196
constexpr DiagnosticPredicate(PredicateTy T)
Definition MCTargetAsmParser.h:189
constexpr bool isNoMatch() const
Definition MCTargetAsmParser.h:198
constexpr bool isNearMatch() const
Definition MCTargetAsmParser.h:197
Definition MCTargetAsmParser.h:66
int64_t Imm
Definition MCTargetAsmParser.h:68
bool hasIndexReg() const
Definition MCTargetAsmParser.h:84
bool hasRegs() const
Definition MCTargetAsmParser.h:85
bool hasOffset() const
Definition MCTargetAsmParser.h:86
IntelExpr(StringRef baseReg, StringRef indexReg, unsigned scale, StringRef offsetName, int64_t imm, bool needBracs)
Definition MCTargetAsmParser.h:76
StringRef IndexReg
Definition MCTargetAsmParser.h:70
unsigned Scale
Definition MCTargetAsmParser.h:72
StringRef OffsetName
Definition MCTargetAsmParser.h:71
bool hasBaseReg() const
Definition MCTargetAsmParser.h:83
bool emitImm() const
Definition MCTargetAsmParser.h:89
bool NeedBracs
Definition MCTargetAsmParser.h:67
StringRef BaseReg
Definition MCTargetAsmParser.h:69
bool isValid() const
Definition MCTargetAsmParser.h:90
ParseInstructionInfo(SmallVectorImpl< AsmRewrite > *rewrites)
Definition MCTargetAsmParser.h:122
ParseInstructionInfo()=default
SmallVectorImpl< AsmRewrite > * AsmRewrites
Definition MCTargetAsmParser.h:119