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