1 //===- MIParser.cpp - Machine instructions parser implementation ----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the parsing of machine instructions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "MIParser.h" 15 #include "MILexer.h" 16 #include "llvm/ADT/StringMap.h" 17 #include "llvm/AsmParser/Parser.h" 18 #include "llvm/AsmParser/SlotMapping.h" 19 #include "llvm/CodeGen/MachineBasicBlock.h" 20 #include "llvm/CodeGen/MachineFrameInfo.h" 21 #include "llvm/CodeGen/MachineFunction.h" 22 #include "llvm/CodeGen/MachineInstr.h" 23 #include "llvm/CodeGen/MachineInstrBuilder.h" 24 #include "llvm/CodeGen/MachineMemOperand.h" 25 #include "llvm/CodeGen/MachineModuleInfo.h" 26 #include "llvm/CodeGen/MachineRegisterInfo.h" 27 #include "llvm/IR/Constants.h" 28 #include "llvm/IR/Instructions.h" 29 #include "llvm/IR/Module.h" 30 #include "llvm/IR/ModuleSlotTracker.h" 31 #include "llvm/IR/ValueSymbolTable.h" 32 #include "llvm/Support/SourceMgr.h" 33 #include "llvm/Support/raw_ostream.h" 34 #include "llvm/Target/TargetInstrInfo.h" 35 #include "llvm/Target/TargetSubtargetInfo.h" 36 37 using namespace llvm; 38 39 PerFunctionMIParsingState::PerFunctionMIParsingState(MachineFunction &MF, 40 SourceMgr &SM, const SlotMapping &IRSlots) 41 : MF(MF), SM(&SM), IRSlots(IRSlots) { 42 } 43 44 namespace { 45 46 /// A wrapper struct around the 'MachineOperand' struct that includes a source 47 /// range and other attributes. 48 struct ParsedMachineOperand { 49 MachineOperand Operand; 50 StringRef::iterator Begin; 51 StringRef::iterator End; 52 Optional<unsigned> TiedDefIdx; 53 54 ParsedMachineOperand(const MachineOperand &Operand, StringRef::iterator Begin, 55 StringRef::iterator End, Optional<unsigned> &TiedDefIdx) 56 : Operand(Operand), Begin(Begin), End(End), TiedDefIdx(TiedDefIdx) { 57 if (TiedDefIdx) 58 assert(Operand.isReg() && Operand.isUse() && 59 "Only used register operands can be tied"); 60 } 61 }; 62 63 class MIParser { 64 MachineFunction &MF; 65 SMDiagnostic &Error; 66 StringRef Source, CurrentSource; 67 MIToken Token; 68 const PerFunctionMIParsingState &PFS; 69 /// Maps from instruction names to op codes. 70 StringMap<unsigned> Names2InstrOpCodes; 71 /// Maps from register names to registers. 72 StringMap<unsigned> Names2Regs; 73 /// Maps from register mask names to register masks. 74 StringMap<const uint32_t *> Names2RegMasks; 75 /// Maps from subregister names to subregister indices. 76 StringMap<unsigned> Names2SubRegIndices; 77 /// Maps from slot numbers to function's unnamed basic blocks. 78 DenseMap<unsigned, const BasicBlock *> Slots2BasicBlocks; 79 /// Maps from slot numbers to function's unnamed values. 80 DenseMap<unsigned, const Value *> Slots2Values; 81 /// Maps from target index names to target indices. 82 StringMap<int> Names2TargetIndices; 83 /// Maps from direct target flag names to the direct target flag values. 84 StringMap<unsigned> Names2DirectTargetFlags; 85 /// Maps from direct target flag names to the bitmask target flag values. 86 StringMap<unsigned> Names2BitmaskTargetFlags; 87 88 public: 89 MIParser(const PerFunctionMIParsingState &PFS, SMDiagnostic &Error, 90 StringRef Source); 91 92 /// \p SkipChar gives the number of characters to skip before looking 93 /// for the next token. 94 void lex(unsigned SkipChar = 0); 95 96 /// Report an error at the current location with the given message. 97 /// 98 /// This function always return true. 99 bool error(const Twine &Msg); 100 101 /// Report an error at the given location with the given message. 102 /// 103 /// This function always return true. 104 bool error(StringRef::iterator Loc, const Twine &Msg); 105 106 bool 107 parseBasicBlockDefinitions(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots); 108 bool parseBasicBlocks(); 109 bool parse(MachineInstr *&MI); 110 bool parseStandaloneMBB(MachineBasicBlock *&MBB); 111 bool parseStandaloneNamedRegister(unsigned &Reg); 112 bool parseStandaloneVirtualRegister(unsigned &Reg); 113 bool parseStandaloneStackObject(int &FI); 114 bool parseStandaloneMDNode(MDNode *&Node); 115 116 bool 117 parseBasicBlockDefinition(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots); 118 bool parseBasicBlock(MachineBasicBlock &MBB); 119 bool parseBasicBlockLiveins(MachineBasicBlock &MBB); 120 bool parseBasicBlockSuccessors(MachineBasicBlock &MBB); 121 122 bool parseRegister(unsigned &Reg); 123 bool parseRegisterFlag(unsigned &Flags); 124 bool parseSubRegisterIndex(unsigned &SubReg); 125 bool parseRegisterTiedDefIndex(unsigned &TiedDefIdx); 126 bool parseSize(unsigned &Size); 127 bool parseRegisterOperand(MachineOperand &Dest, 128 Optional<unsigned> &TiedDefIdx, bool IsDef = false); 129 bool parseImmediateOperand(MachineOperand &Dest); 130 bool parseIRConstant(StringRef::iterator Loc, StringRef Source, 131 const Constant *&C); 132 bool parseIRConstant(StringRef::iterator Loc, const Constant *&C); 133 bool parseIRType(StringRef::iterator Loc, StringRef Source, unsigned &Read, 134 Type *&Ty); 135 // \p MustBeSized defines whether or not \p Ty must be sized. 136 bool parseIRType(StringRef::iterator Loc, Type *&Ty, bool MustBeSized = true); 137 bool parseTypedImmediateOperand(MachineOperand &Dest); 138 bool parseFPImmediateOperand(MachineOperand &Dest); 139 bool parseMBBReference(MachineBasicBlock *&MBB); 140 bool parseMBBOperand(MachineOperand &Dest); 141 bool parseStackFrameIndex(int &FI); 142 bool parseStackObjectOperand(MachineOperand &Dest); 143 bool parseFixedStackFrameIndex(int &FI); 144 bool parseFixedStackObjectOperand(MachineOperand &Dest); 145 bool parseGlobalValue(GlobalValue *&GV); 146 bool parseGlobalAddressOperand(MachineOperand &Dest); 147 bool parseConstantPoolIndexOperand(MachineOperand &Dest); 148 bool parseSubRegisterIndexOperand(MachineOperand &Dest); 149 bool parseJumpTableIndexOperand(MachineOperand &Dest); 150 bool parseExternalSymbolOperand(MachineOperand &Dest); 151 bool parseMDNode(MDNode *&Node); 152 bool parseMetadataOperand(MachineOperand &Dest); 153 bool parseCFIOffset(int &Offset); 154 bool parseCFIRegister(unsigned &Reg); 155 bool parseCFIOperand(MachineOperand &Dest); 156 bool parseIRBlock(BasicBlock *&BB, const Function &F); 157 bool parseBlockAddressOperand(MachineOperand &Dest); 158 bool parseTargetIndexOperand(MachineOperand &Dest); 159 bool parseLiveoutRegisterMaskOperand(MachineOperand &Dest); 160 bool parseMachineOperand(MachineOperand &Dest, 161 Optional<unsigned> &TiedDefIdx); 162 bool parseMachineOperandAndTargetFlags(MachineOperand &Dest, 163 Optional<unsigned> &TiedDefIdx); 164 bool parseOffset(int64_t &Offset); 165 bool parseAlignment(unsigned &Alignment); 166 bool parseOperandsOffset(MachineOperand &Op); 167 bool parseIRValue(const Value *&V); 168 bool parseMemoryOperandFlag(MachineMemOperand::Flags &Flags); 169 bool parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV); 170 bool parseMachinePointerInfo(MachinePointerInfo &Dest); 171 bool parseMachineMemoryOperand(MachineMemOperand *&Dest); 172 173 private: 174 /// Convert the integer literal in the current token into an unsigned integer. 175 /// 176 /// Return true if an error occurred. 177 bool getUnsigned(unsigned &Result); 178 179 /// Convert the integer literal in the current token into an uint64. 180 /// 181 /// Return true if an error occurred. 182 bool getUint64(uint64_t &Result); 183 184 /// If the current token is of the given kind, consume it and return false. 185 /// Otherwise report an error and return true. 186 bool expectAndConsume(MIToken::TokenKind TokenKind); 187 188 /// If the current token is of the given kind, consume it and return true. 189 /// Otherwise return false. 190 bool consumeIfPresent(MIToken::TokenKind TokenKind); 191 192 void initNames2InstrOpCodes(); 193 194 /// Try to convert an instruction name to an opcode. Return true if the 195 /// instruction name is invalid. 196 bool parseInstrName(StringRef InstrName, unsigned &OpCode); 197 198 bool parseInstruction(unsigned &OpCode, unsigned &Flags); 199 200 bool assignRegisterTies(MachineInstr &MI, 201 ArrayRef<ParsedMachineOperand> Operands); 202 203 bool verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands, 204 const MCInstrDesc &MCID); 205 206 void initNames2Regs(); 207 208 /// Try to convert a register name to a register number. Return true if the 209 /// register name is invalid. 210 bool getRegisterByName(StringRef RegName, unsigned &Reg); 211 212 void initNames2RegMasks(); 213 214 /// Check if the given identifier is a name of a register mask. 215 /// 216 /// Return null if the identifier isn't a register mask. 217 const uint32_t *getRegMask(StringRef Identifier); 218 219 void initNames2SubRegIndices(); 220 221 /// Check if the given identifier is a name of a subregister index. 222 /// 223 /// Return 0 if the name isn't a subregister index class. 224 unsigned getSubRegIndex(StringRef Name); 225 226 const BasicBlock *getIRBlock(unsigned Slot); 227 const BasicBlock *getIRBlock(unsigned Slot, const Function &F); 228 229 const Value *getIRValue(unsigned Slot); 230 231 void initNames2TargetIndices(); 232 233 /// Try to convert a name of target index to the corresponding target index. 234 /// 235 /// Return true if the name isn't a name of a target index. 236 bool getTargetIndex(StringRef Name, int &Index); 237 238 void initNames2DirectTargetFlags(); 239 240 /// Try to convert a name of a direct target flag to the corresponding 241 /// target flag. 242 /// 243 /// Return true if the name isn't a name of a direct flag. 244 bool getDirectTargetFlag(StringRef Name, unsigned &Flag); 245 246 void initNames2BitmaskTargetFlags(); 247 248 /// Try to convert a name of a bitmask target flag to the corresponding 249 /// target flag. 250 /// 251 /// Return true if the name isn't a name of a bitmask target flag. 252 bool getBitmaskTargetFlag(StringRef Name, unsigned &Flag); 253 }; 254 255 } // end anonymous namespace 256 257 MIParser::MIParser(const PerFunctionMIParsingState &PFS, SMDiagnostic &Error, 258 StringRef Source) 259 : MF(PFS.MF), Error(Error), Source(Source), CurrentSource(Source), PFS(PFS) 260 {} 261 262 void MIParser::lex(unsigned SkipChar) { 263 CurrentSource = lexMIToken( 264 CurrentSource.data() + SkipChar, Token, 265 [this](StringRef::iterator Loc, const Twine &Msg) { error(Loc, Msg); }); 266 } 267 268 bool MIParser::error(const Twine &Msg) { return error(Token.location(), Msg); } 269 270 bool MIParser::error(StringRef::iterator Loc, const Twine &Msg) { 271 const SourceMgr &SM = *PFS.SM; 272 assert(Loc >= Source.data() && Loc <= (Source.data() + Source.size())); 273 const MemoryBuffer &Buffer = *SM.getMemoryBuffer(SM.getMainFileID()); 274 if (Loc >= Buffer.getBufferStart() && Loc <= Buffer.getBufferEnd()) { 275 // Create an ordinary diagnostic when the source manager's buffer is the 276 // source string. 277 Error = SM.GetMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg); 278 return true; 279 } 280 // Create a diagnostic for a YAML string literal. 281 Error = SMDiagnostic(SM, SMLoc(), Buffer.getBufferIdentifier(), 1, 282 Loc - Source.data(), SourceMgr::DK_Error, Msg.str(), 283 Source, None, None); 284 return true; 285 } 286 287 static const char *toString(MIToken::TokenKind TokenKind) { 288 switch (TokenKind) { 289 case MIToken::comma: 290 return "','"; 291 case MIToken::equal: 292 return "'='"; 293 case MIToken::colon: 294 return "':'"; 295 case MIToken::lparen: 296 return "'('"; 297 case MIToken::rparen: 298 return "')'"; 299 default: 300 return "<unknown token>"; 301 } 302 } 303 304 bool MIParser::expectAndConsume(MIToken::TokenKind TokenKind) { 305 if (Token.isNot(TokenKind)) 306 return error(Twine("expected ") + toString(TokenKind)); 307 lex(); 308 return false; 309 } 310 311 bool MIParser::consumeIfPresent(MIToken::TokenKind TokenKind) { 312 if (Token.isNot(TokenKind)) 313 return false; 314 lex(); 315 return true; 316 } 317 318 bool MIParser::parseBasicBlockDefinition( 319 DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) { 320 assert(Token.is(MIToken::MachineBasicBlockLabel)); 321 unsigned ID = 0; 322 if (getUnsigned(ID)) 323 return true; 324 auto Loc = Token.location(); 325 auto Name = Token.stringValue(); 326 lex(); 327 bool HasAddressTaken = false; 328 bool IsLandingPad = false; 329 unsigned Alignment = 0; 330 BasicBlock *BB = nullptr; 331 if (consumeIfPresent(MIToken::lparen)) { 332 do { 333 // TODO: Report an error when multiple same attributes are specified. 334 switch (Token.kind()) { 335 case MIToken::kw_address_taken: 336 HasAddressTaken = true; 337 lex(); 338 break; 339 case MIToken::kw_landing_pad: 340 IsLandingPad = true; 341 lex(); 342 break; 343 case MIToken::kw_align: 344 if (parseAlignment(Alignment)) 345 return true; 346 break; 347 case MIToken::IRBlock: 348 // TODO: Report an error when both name and ir block are specified. 349 if (parseIRBlock(BB, *MF.getFunction())) 350 return true; 351 lex(); 352 break; 353 default: 354 break; 355 } 356 } while (consumeIfPresent(MIToken::comma)); 357 if (expectAndConsume(MIToken::rparen)) 358 return true; 359 } 360 if (expectAndConsume(MIToken::colon)) 361 return true; 362 363 if (!Name.empty()) { 364 BB = dyn_cast_or_null<BasicBlock>( 365 MF.getFunction()->getValueSymbolTable().lookup(Name)); 366 if (!BB) 367 return error(Loc, Twine("basic block '") + Name + 368 "' is not defined in the function '" + 369 MF.getName() + "'"); 370 } 371 auto *MBB = MF.CreateMachineBasicBlock(BB); 372 MF.insert(MF.end(), MBB); 373 bool WasInserted = MBBSlots.insert(std::make_pair(ID, MBB)).second; 374 if (!WasInserted) 375 return error(Loc, Twine("redefinition of machine basic block with id #") + 376 Twine(ID)); 377 if (Alignment) 378 MBB->setAlignment(Alignment); 379 if (HasAddressTaken) 380 MBB->setHasAddressTaken(); 381 MBB->setIsEHPad(IsLandingPad); 382 return false; 383 } 384 385 bool MIParser::parseBasicBlockDefinitions( 386 DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) { 387 lex(); 388 // Skip until the first machine basic block. 389 while (Token.is(MIToken::Newline)) 390 lex(); 391 if (Token.isErrorOrEOF()) 392 return Token.isError(); 393 if (Token.isNot(MIToken::MachineBasicBlockLabel)) 394 return error("expected a basic block definition before instructions"); 395 unsigned BraceDepth = 0; 396 do { 397 if (parseBasicBlockDefinition(MBBSlots)) 398 return true; 399 bool IsAfterNewline = false; 400 // Skip until the next machine basic block. 401 while (true) { 402 if ((Token.is(MIToken::MachineBasicBlockLabel) && IsAfterNewline) || 403 Token.isErrorOrEOF()) 404 break; 405 else if (Token.is(MIToken::MachineBasicBlockLabel)) 406 return error("basic block definition should be located at the start of " 407 "the line"); 408 else if (consumeIfPresent(MIToken::Newline)) { 409 IsAfterNewline = true; 410 continue; 411 } 412 IsAfterNewline = false; 413 if (Token.is(MIToken::lbrace)) 414 ++BraceDepth; 415 if (Token.is(MIToken::rbrace)) { 416 if (!BraceDepth) 417 return error("extraneous closing brace ('}')"); 418 --BraceDepth; 419 } 420 lex(); 421 } 422 // Verify that we closed all of the '{' at the end of a file or a block. 423 if (!Token.isError() && BraceDepth) 424 return error("expected '}'"); // FIXME: Report a note that shows '{'. 425 } while (!Token.isErrorOrEOF()); 426 return Token.isError(); 427 } 428 429 bool MIParser::parseBasicBlockLiveins(MachineBasicBlock &MBB) { 430 assert(Token.is(MIToken::kw_liveins)); 431 lex(); 432 if (expectAndConsume(MIToken::colon)) 433 return true; 434 if (Token.isNewlineOrEOF()) // Allow an empty list of liveins. 435 return false; 436 do { 437 if (Token.isNot(MIToken::NamedRegister)) 438 return error("expected a named register"); 439 unsigned Reg = 0; 440 if (parseRegister(Reg)) 441 return true; 442 MBB.addLiveIn(Reg); 443 lex(); 444 } while (consumeIfPresent(MIToken::comma)); 445 return false; 446 } 447 448 bool MIParser::parseBasicBlockSuccessors(MachineBasicBlock &MBB) { 449 assert(Token.is(MIToken::kw_successors)); 450 lex(); 451 if (expectAndConsume(MIToken::colon)) 452 return true; 453 if (Token.isNewlineOrEOF()) // Allow an empty list of successors. 454 return false; 455 do { 456 if (Token.isNot(MIToken::MachineBasicBlock)) 457 return error("expected a machine basic block reference"); 458 MachineBasicBlock *SuccMBB = nullptr; 459 if (parseMBBReference(SuccMBB)) 460 return true; 461 lex(); 462 unsigned Weight = 0; 463 if (consumeIfPresent(MIToken::lparen)) { 464 if (Token.isNot(MIToken::IntegerLiteral)) 465 return error("expected an integer literal after '('"); 466 if (getUnsigned(Weight)) 467 return true; 468 lex(); 469 if (expectAndConsume(MIToken::rparen)) 470 return true; 471 } 472 MBB.addSuccessor(SuccMBB, BranchProbability::getRaw(Weight)); 473 } while (consumeIfPresent(MIToken::comma)); 474 MBB.normalizeSuccProbs(); 475 return false; 476 } 477 478 bool MIParser::parseBasicBlock(MachineBasicBlock &MBB) { 479 // Skip the definition. 480 assert(Token.is(MIToken::MachineBasicBlockLabel)); 481 lex(); 482 if (consumeIfPresent(MIToken::lparen)) { 483 while (Token.isNot(MIToken::rparen) && !Token.isErrorOrEOF()) 484 lex(); 485 consumeIfPresent(MIToken::rparen); 486 } 487 consumeIfPresent(MIToken::colon); 488 489 // Parse the liveins and successors. 490 // N.B: Multiple lists of successors and liveins are allowed and they're 491 // merged into one. 492 // Example: 493 // liveins: %edi 494 // liveins: %esi 495 // 496 // is equivalent to 497 // liveins: %edi, %esi 498 while (true) { 499 if (Token.is(MIToken::kw_successors)) { 500 if (parseBasicBlockSuccessors(MBB)) 501 return true; 502 } else if (Token.is(MIToken::kw_liveins)) { 503 if (parseBasicBlockLiveins(MBB)) 504 return true; 505 } else if (consumeIfPresent(MIToken::Newline)) { 506 continue; 507 } else 508 break; 509 if (!Token.isNewlineOrEOF()) 510 return error("expected line break at the end of a list"); 511 lex(); 512 } 513 514 // Parse the instructions. 515 bool IsInBundle = false; 516 MachineInstr *PrevMI = nullptr; 517 while (true) { 518 if (Token.is(MIToken::MachineBasicBlockLabel) || Token.is(MIToken::Eof)) 519 return false; 520 else if (consumeIfPresent(MIToken::Newline)) 521 continue; 522 if (consumeIfPresent(MIToken::rbrace)) { 523 // The first parsing pass should verify that all closing '}' have an 524 // opening '{'. 525 assert(IsInBundle); 526 IsInBundle = false; 527 continue; 528 } 529 MachineInstr *MI = nullptr; 530 if (parse(MI)) 531 return true; 532 MBB.insert(MBB.end(), MI); 533 if (IsInBundle) { 534 PrevMI->setFlag(MachineInstr::BundledSucc); 535 MI->setFlag(MachineInstr::BundledPred); 536 } 537 PrevMI = MI; 538 if (Token.is(MIToken::lbrace)) { 539 if (IsInBundle) 540 return error("nested instruction bundles are not allowed"); 541 lex(); 542 // This instruction is the start of the bundle. 543 MI->setFlag(MachineInstr::BundledSucc); 544 IsInBundle = true; 545 if (!Token.is(MIToken::Newline)) 546 // The next instruction can be on the same line. 547 continue; 548 } 549 assert(Token.isNewlineOrEOF() && "MI is not fully parsed"); 550 lex(); 551 } 552 return false; 553 } 554 555 bool MIParser::parseBasicBlocks() { 556 lex(); 557 // Skip until the first machine basic block. 558 while (Token.is(MIToken::Newline)) 559 lex(); 560 if (Token.isErrorOrEOF()) 561 return Token.isError(); 562 // The first parsing pass should have verified that this token is a MBB label 563 // in the 'parseBasicBlockDefinitions' method. 564 assert(Token.is(MIToken::MachineBasicBlockLabel)); 565 do { 566 MachineBasicBlock *MBB = nullptr; 567 if (parseMBBReference(MBB)) 568 return true; 569 if (parseBasicBlock(*MBB)) 570 return true; 571 // The method 'parseBasicBlock' should parse the whole block until the next 572 // block or the end of file. 573 assert(Token.is(MIToken::MachineBasicBlockLabel) || Token.is(MIToken::Eof)); 574 } while (Token.isNot(MIToken::Eof)); 575 return false; 576 } 577 578 bool MIParser::parse(MachineInstr *&MI) { 579 // Parse any register operands before '=' 580 MachineOperand MO = MachineOperand::CreateImm(0); 581 SmallVector<ParsedMachineOperand, 8> Operands; 582 while (Token.isRegister() || Token.isRegisterFlag()) { 583 auto Loc = Token.location(); 584 Optional<unsigned> TiedDefIdx; 585 if (parseRegisterOperand(MO, TiedDefIdx, /*IsDef=*/true)) 586 return true; 587 Operands.push_back( 588 ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx)); 589 if (Token.isNot(MIToken::comma)) 590 break; 591 lex(); 592 } 593 if (!Operands.empty() && expectAndConsume(MIToken::equal)) 594 return true; 595 596 unsigned OpCode, Flags = 0; 597 if (Token.isError() || parseInstruction(OpCode, Flags)) 598 return true; 599 600 Type *Ty = nullptr; 601 if (isPreISelGenericOpcode(OpCode)) { 602 // For generic opcode, a type is mandatory. 603 auto Loc = Token.location(); 604 if (parseIRType(Loc, Ty)) 605 return true; 606 } 607 608 // Parse the remaining machine operands. 609 while (!Token.isNewlineOrEOF() && Token.isNot(MIToken::kw_debug_location) && 610 Token.isNot(MIToken::coloncolon) && Token.isNot(MIToken::lbrace)) { 611 auto Loc = Token.location(); 612 Optional<unsigned> TiedDefIdx; 613 if (parseMachineOperandAndTargetFlags(MO, TiedDefIdx)) 614 return true; 615 Operands.push_back( 616 ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx)); 617 if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) || 618 Token.is(MIToken::lbrace)) 619 break; 620 if (Token.isNot(MIToken::comma)) 621 return error("expected ',' before the next machine operand"); 622 lex(); 623 } 624 625 DebugLoc DebugLocation; 626 if (Token.is(MIToken::kw_debug_location)) { 627 lex(); 628 if (Token.isNot(MIToken::exclaim)) 629 return error("expected a metadata node after 'debug-location'"); 630 MDNode *Node = nullptr; 631 if (parseMDNode(Node)) 632 return true; 633 DebugLocation = DebugLoc(Node); 634 } 635 636 // Parse the machine memory operands. 637 SmallVector<MachineMemOperand *, 2> MemOperands; 638 if (Token.is(MIToken::coloncolon)) { 639 lex(); 640 while (!Token.isNewlineOrEOF()) { 641 MachineMemOperand *MemOp = nullptr; 642 if (parseMachineMemoryOperand(MemOp)) 643 return true; 644 MemOperands.push_back(MemOp); 645 if (Token.isNewlineOrEOF()) 646 break; 647 if (Token.isNot(MIToken::comma)) 648 return error("expected ',' before the next machine memory operand"); 649 lex(); 650 } 651 } 652 653 const auto &MCID = MF.getSubtarget().getInstrInfo()->get(OpCode); 654 if (!MCID.isVariadic()) { 655 // FIXME: Move the implicit operand verification to the machine verifier. 656 if (verifyImplicitOperands(Operands, MCID)) 657 return true; 658 } 659 660 // TODO: Check for extraneous machine operands. 661 MI = MF.CreateMachineInstr(MCID, DebugLocation, /*NoImplicit=*/true); 662 MI->setFlags(Flags); 663 if (Ty) 664 MI->setType(Ty); 665 for (const auto &Operand : Operands) 666 MI->addOperand(MF, Operand.Operand); 667 if (assignRegisterTies(*MI, Operands)) 668 return true; 669 if (MemOperands.empty()) 670 return false; 671 MachineInstr::mmo_iterator MemRefs = 672 MF.allocateMemRefsArray(MemOperands.size()); 673 std::copy(MemOperands.begin(), MemOperands.end(), MemRefs); 674 MI->setMemRefs(MemRefs, MemRefs + MemOperands.size()); 675 return false; 676 } 677 678 bool MIParser::parseStandaloneMBB(MachineBasicBlock *&MBB) { 679 lex(); 680 if (Token.isNot(MIToken::MachineBasicBlock)) 681 return error("expected a machine basic block reference"); 682 if (parseMBBReference(MBB)) 683 return true; 684 lex(); 685 if (Token.isNot(MIToken::Eof)) 686 return error( 687 "expected end of string after the machine basic block reference"); 688 return false; 689 } 690 691 bool MIParser::parseStandaloneNamedRegister(unsigned &Reg) { 692 lex(); 693 if (Token.isNot(MIToken::NamedRegister)) 694 return error("expected a named register"); 695 if (parseRegister(Reg)) 696 return true; 697 lex(); 698 if (Token.isNot(MIToken::Eof)) 699 return error("expected end of string after the register reference"); 700 return false; 701 } 702 703 bool MIParser::parseStandaloneVirtualRegister(unsigned &Reg) { 704 lex(); 705 if (Token.isNot(MIToken::VirtualRegister)) 706 return error("expected a virtual register"); 707 if (parseRegister(Reg)) 708 return true; 709 lex(); 710 if (Token.isNot(MIToken::Eof)) 711 return error("expected end of string after the register reference"); 712 return false; 713 } 714 715 bool MIParser::parseStandaloneStackObject(int &FI) { 716 lex(); 717 if (Token.isNot(MIToken::StackObject)) 718 return error("expected a stack object"); 719 if (parseStackFrameIndex(FI)) 720 return true; 721 if (Token.isNot(MIToken::Eof)) 722 return error("expected end of string after the stack object reference"); 723 return false; 724 } 725 726 bool MIParser::parseStandaloneMDNode(MDNode *&Node) { 727 lex(); 728 if (Token.isNot(MIToken::exclaim)) 729 return error("expected a metadata node"); 730 if (parseMDNode(Node)) 731 return true; 732 if (Token.isNot(MIToken::Eof)) 733 return error("expected end of string after the metadata node"); 734 return false; 735 } 736 737 static const char *printImplicitRegisterFlag(const MachineOperand &MO) { 738 assert(MO.isImplicit()); 739 return MO.isDef() ? "implicit-def" : "implicit"; 740 } 741 742 static std::string getRegisterName(const TargetRegisterInfo *TRI, 743 unsigned Reg) { 744 assert(TargetRegisterInfo::isPhysicalRegister(Reg) && "expected phys reg"); 745 return StringRef(TRI->getName(Reg)).lower(); 746 } 747 748 /// Return true if the parsed machine operands contain a given machine operand. 749 static bool isImplicitOperandIn(const MachineOperand &ImplicitOperand, 750 ArrayRef<ParsedMachineOperand> Operands) { 751 for (const auto &I : Operands) { 752 if (ImplicitOperand.isIdenticalTo(I.Operand)) 753 return true; 754 } 755 return false; 756 } 757 758 bool MIParser::verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands, 759 const MCInstrDesc &MCID) { 760 if (MCID.isCall()) 761 // We can't verify call instructions as they can contain arbitrary implicit 762 // register and register mask operands. 763 return false; 764 765 // Gather all the expected implicit operands. 766 SmallVector<MachineOperand, 4> ImplicitOperands; 767 if (MCID.ImplicitDefs) 768 for (const MCPhysReg *ImpDefs = MCID.getImplicitDefs(); *ImpDefs; ++ImpDefs) 769 ImplicitOperands.push_back( 770 MachineOperand::CreateReg(*ImpDefs, true, true)); 771 if (MCID.ImplicitUses) 772 for (const MCPhysReg *ImpUses = MCID.getImplicitUses(); *ImpUses; ++ImpUses) 773 ImplicitOperands.push_back( 774 MachineOperand::CreateReg(*ImpUses, false, true)); 775 776 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 777 assert(TRI && "Expected target register info"); 778 for (const auto &I : ImplicitOperands) { 779 if (isImplicitOperandIn(I, Operands)) 780 continue; 781 return error(Operands.empty() ? Token.location() : Operands.back().End, 782 Twine("missing implicit register operand '") + 783 printImplicitRegisterFlag(I) + " %" + 784 getRegisterName(TRI, I.getReg()) + "'"); 785 } 786 return false; 787 } 788 789 bool MIParser::parseInstruction(unsigned &OpCode, unsigned &Flags) { 790 if (Token.is(MIToken::kw_frame_setup)) { 791 Flags |= MachineInstr::FrameSetup; 792 lex(); 793 } 794 if (Token.isNot(MIToken::Identifier)) 795 return error("expected a machine instruction"); 796 StringRef InstrName = Token.stringValue(); 797 if (parseInstrName(InstrName, OpCode)) 798 return error(Twine("unknown machine instruction name '") + InstrName + "'"); 799 lex(); 800 return false; 801 } 802 803 bool MIParser::parseRegister(unsigned &Reg) { 804 switch (Token.kind()) { 805 case MIToken::underscore: 806 Reg = 0; 807 break; 808 case MIToken::NamedRegister: { 809 StringRef Name = Token.stringValue(); 810 if (getRegisterByName(Name, Reg)) 811 return error(Twine("unknown register name '") + Name + "'"); 812 break; 813 } 814 case MIToken::VirtualRegister: { 815 unsigned ID; 816 if (getUnsigned(ID)) 817 return true; 818 const auto RegInfo = PFS.VirtualRegisterSlots.find(ID); 819 if (RegInfo == PFS.VirtualRegisterSlots.end()) 820 return error(Twine("use of undefined virtual register '%") + Twine(ID) + 821 "'"); 822 Reg = RegInfo->second; 823 break; 824 } 825 // TODO: Parse other register kinds. 826 default: 827 llvm_unreachable("The current token should be a register"); 828 } 829 return false; 830 } 831 832 bool MIParser::parseRegisterFlag(unsigned &Flags) { 833 const unsigned OldFlags = Flags; 834 switch (Token.kind()) { 835 case MIToken::kw_implicit: 836 Flags |= RegState::Implicit; 837 break; 838 case MIToken::kw_implicit_define: 839 Flags |= RegState::ImplicitDefine; 840 break; 841 case MIToken::kw_def: 842 Flags |= RegState::Define; 843 break; 844 case MIToken::kw_dead: 845 Flags |= RegState::Dead; 846 break; 847 case MIToken::kw_killed: 848 Flags |= RegState::Kill; 849 break; 850 case MIToken::kw_undef: 851 Flags |= RegState::Undef; 852 break; 853 case MIToken::kw_internal: 854 Flags |= RegState::InternalRead; 855 break; 856 case MIToken::kw_early_clobber: 857 Flags |= RegState::EarlyClobber; 858 break; 859 case MIToken::kw_debug_use: 860 Flags |= RegState::Debug; 861 break; 862 default: 863 llvm_unreachable("The current token should be a register flag"); 864 } 865 if (OldFlags == Flags) 866 // We know that the same flag is specified more than once when the flags 867 // weren't modified. 868 return error("duplicate '" + Token.stringValue() + "' register flag"); 869 lex(); 870 return false; 871 } 872 873 bool MIParser::parseSubRegisterIndex(unsigned &SubReg) { 874 assert(Token.is(MIToken::colon)); 875 lex(); 876 if (Token.isNot(MIToken::Identifier)) 877 return error("expected a subregister index after ':'"); 878 auto Name = Token.stringValue(); 879 SubReg = getSubRegIndex(Name); 880 if (!SubReg) 881 return error(Twine("use of unknown subregister index '") + Name + "'"); 882 lex(); 883 return false; 884 } 885 886 bool MIParser::parseRegisterTiedDefIndex(unsigned &TiedDefIdx) { 887 if (!consumeIfPresent(MIToken::kw_tied_def)) 888 return error("expected 'tied-def' after '('"); 889 if (Token.isNot(MIToken::IntegerLiteral)) 890 return error("expected an integer literal after 'tied-def'"); 891 if (getUnsigned(TiedDefIdx)) 892 return true; 893 lex(); 894 if (expectAndConsume(MIToken::rparen)) 895 return true; 896 return false; 897 } 898 899 bool MIParser::parseSize(unsigned &Size) { 900 if (Token.isNot(MIToken::IntegerLiteral)) 901 return error("expected an integer literal for the size"); 902 if (getUnsigned(Size)) 903 return true; 904 lex(); 905 if (expectAndConsume(MIToken::rparen)) 906 return true; 907 return false; 908 } 909 910 bool MIParser::assignRegisterTies(MachineInstr &MI, 911 ArrayRef<ParsedMachineOperand> Operands) { 912 SmallVector<std::pair<unsigned, unsigned>, 4> TiedRegisterPairs; 913 for (unsigned I = 0, E = Operands.size(); I != E; ++I) { 914 if (!Operands[I].TiedDefIdx) 915 continue; 916 // The parser ensures that this operand is a register use, so we just have 917 // to check the tied-def operand. 918 unsigned DefIdx = Operands[I].TiedDefIdx.getValue(); 919 if (DefIdx >= E) 920 return error(Operands[I].Begin, 921 Twine("use of invalid tied-def operand index '" + 922 Twine(DefIdx) + "'; instruction has only ") + 923 Twine(E) + " operands"); 924 const auto &DefOperand = Operands[DefIdx].Operand; 925 if (!DefOperand.isReg() || !DefOperand.isDef()) 926 // FIXME: add note with the def operand. 927 return error(Operands[I].Begin, 928 Twine("use of invalid tied-def operand index '") + 929 Twine(DefIdx) + "'; the operand #" + Twine(DefIdx) + 930 " isn't a defined register"); 931 // Check that the tied-def operand wasn't tied elsewhere. 932 for (const auto &TiedPair : TiedRegisterPairs) { 933 if (TiedPair.first == DefIdx) 934 return error(Operands[I].Begin, 935 Twine("the tied-def operand #") + Twine(DefIdx) + 936 " is already tied with another register operand"); 937 } 938 TiedRegisterPairs.push_back(std::make_pair(DefIdx, I)); 939 } 940 // FIXME: Verify that for non INLINEASM instructions, the def and use tied 941 // indices must be less than tied max. 942 for (const auto &TiedPair : TiedRegisterPairs) 943 MI.tieOperands(TiedPair.first, TiedPair.second); 944 return false; 945 } 946 947 bool MIParser::parseRegisterOperand(MachineOperand &Dest, 948 Optional<unsigned> &TiedDefIdx, 949 bool IsDef) { 950 unsigned Reg; 951 unsigned Flags = IsDef ? RegState::Define : 0; 952 while (Token.isRegisterFlag()) { 953 if (parseRegisterFlag(Flags)) 954 return true; 955 } 956 if (!Token.isRegister()) 957 return error("expected a register after register flags"); 958 if (parseRegister(Reg)) 959 return true; 960 lex(); 961 unsigned SubReg = 0; 962 if (Token.is(MIToken::colon)) { 963 if (parseSubRegisterIndex(SubReg)) 964 return true; 965 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 966 return error("subregister index expects a virtual register"); 967 } 968 if ((Flags & RegState::Define) == 0) { 969 if (consumeIfPresent(MIToken::lparen)) { 970 unsigned Idx; 971 if (parseRegisterTiedDefIndex(Idx)) 972 return true; 973 TiedDefIdx = Idx; 974 } 975 } else if (consumeIfPresent(MIToken::lparen)) { 976 // Virtual registers may have a size with GlobalISel. 977 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 978 return error("unexpected size on physical register"); 979 unsigned Size; 980 if (parseSize(Size)) 981 return true; 982 983 MachineRegisterInfo &MRI = MF.getRegInfo(); 984 MRI.setSize(Reg, Size); 985 } else if (PFS.GenericVRegs.count(Reg)) { 986 // Generic virtual registers must have a size. 987 // If we end up here this means the size hasn't been specified and 988 // this is bad! 989 return error("generic virtual registers must have a size"); 990 } 991 Dest = MachineOperand::CreateReg( 992 Reg, Flags & RegState::Define, Flags & RegState::Implicit, 993 Flags & RegState::Kill, Flags & RegState::Dead, Flags & RegState::Undef, 994 Flags & RegState::EarlyClobber, SubReg, Flags & RegState::Debug, 995 Flags & RegState::InternalRead); 996 return false; 997 } 998 999 bool MIParser::parseImmediateOperand(MachineOperand &Dest) { 1000 assert(Token.is(MIToken::IntegerLiteral)); 1001 const APSInt &Int = Token.integerValue(); 1002 if (Int.getMinSignedBits() > 64) 1003 return error("integer literal is too large to be an immediate operand"); 1004 Dest = MachineOperand::CreateImm(Int.getExtValue()); 1005 lex(); 1006 return false; 1007 } 1008 1009 bool MIParser::parseIRConstant(StringRef::iterator Loc, StringRef StringValue, 1010 const Constant *&C) { 1011 auto Source = StringValue.str(); // The source has to be null terminated. 1012 SMDiagnostic Err; 1013 C = parseConstantValue(Source.c_str(), Err, *MF.getFunction()->getParent(), 1014 &PFS.IRSlots); 1015 if (!C) 1016 return error(Loc + Err.getColumnNo(), Err.getMessage()); 1017 return false; 1018 } 1019 1020 bool MIParser::parseIRConstant(StringRef::iterator Loc, const Constant *&C) { 1021 if (parseIRConstant(Loc, StringRef(Loc, Token.range().end() - Loc), C)) 1022 return true; 1023 lex(); 1024 return false; 1025 } 1026 1027 bool MIParser::parseIRType(StringRef::iterator Loc, StringRef StringValue, 1028 unsigned &Read, Type *&Ty) { 1029 auto Source = StringValue.str(); // The source has to be null terminated. 1030 SMDiagnostic Err; 1031 Ty = parseTypeAtBeginning(Source.c_str(), Read, Err, 1032 *MF.getFunction()->getParent(), &PFS.IRSlots); 1033 if (!Ty) 1034 return error(Loc + Err.getColumnNo(), Err.getMessage()); 1035 return false; 1036 } 1037 1038 bool MIParser::parseIRType(StringRef::iterator Loc, Type *&Ty, 1039 bool MustBeSized) { 1040 // At this point we enter in the IR world, i.e., to get the correct type, 1041 // we need to hand off the whole string, not just the current token. 1042 // E.g., <4 x i64> would give '<' as a token and there is not much 1043 // the IR parser can do with that. 1044 unsigned Read = 0; 1045 if (parseIRType(Loc, StringRef(Loc), Read, Ty)) 1046 return true; 1047 // The type must be sized, otherwise there is not much the backend 1048 // can do with it. 1049 if (MustBeSized && !Ty->isSized()) 1050 return error("expected a sized type"); 1051 // The next token is Read characters from the Loc. 1052 // However, the current location is not Loc, but Loc + the length of Token. 1053 // Therefore, subtract the length of Token (range().end() - Loc) to the 1054 // number of characters to skip before the next token. 1055 lex(Read - (Token.range().end() - Loc)); 1056 return false; 1057 } 1058 1059 bool MIParser::parseTypedImmediateOperand(MachineOperand &Dest) { 1060 assert(Token.is(MIToken::IntegerType)); 1061 auto Loc = Token.location(); 1062 lex(); 1063 if (Token.isNot(MIToken::IntegerLiteral)) 1064 return error("expected an integer literal"); 1065 const Constant *C = nullptr; 1066 if (parseIRConstant(Loc, C)) 1067 return true; 1068 Dest = MachineOperand::CreateCImm(cast<ConstantInt>(C)); 1069 return false; 1070 } 1071 1072 bool MIParser::parseFPImmediateOperand(MachineOperand &Dest) { 1073 auto Loc = Token.location(); 1074 lex(); 1075 if (Token.isNot(MIToken::FloatingPointLiteral)) 1076 return error("expected a floating point literal"); 1077 const Constant *C = nullptr; 1078 if (parseIRConstant(Loc, C)) 1079 return true; 1080 Dest = MachineOperand::CreateFPImm(cast<ConstantFP>(C)); 1081 return false; 1082 } 1083 1084 bool MIParser::getUnsigned(unsigned &Result) { 1085 assert(Token.hasIntegerValue() && "Expected a token with an integer value"); 1086 const uint64_t Limit = uint64_t(std::numeric_limits<unsigned>::max()) + 1; 1087 uint64_t Val64 = Token.integerValue().getLimitedValue(Limit); 1088 if (Val64 == Limit) 1089 return error("expected 32-bit integer (too large)"); 1090 Result = Val64; 1091 return false; 1092 } 1093 1094 bool MIParser::parseMBBReference(MachineBasicBlock *&MBB) { 1095 assert(Token.is(MIToken::MachineBasicBlock) || 1096 Token.is(MIToken::MachineBasicBlockLabel)); 1097 unsigned Number; 1098 if (getUnsigned(Number)) 1099 return true; 1100 auto MBBInfo = PFS.MBBSlots.find(Number); 1101 if (MBBInfo == PFS.MBBSlots.end()) 1102 return error(Twine("use of undefined machine basic block #") + 1103 Twine(Number)); 1104 MBB = MBBInfo->second; 1105 if (!Token.stringValue().empty() && Token.stringValue() != MBB->getName()) 1106 return error(Twine("the name of machine basic block #") + Twine(Number) + 1107 " isn't '" + Token.stringValue() + "'"); 1108 return false; 1109 } 1110 1111 bool MIParser::parseMBBOperand(MachineOperand &Dest) { 1112 MachineBasicBlock *MBB; 1113 if (parseMBBReference(MBB)) 1114 return true; 1115 Dest = MachineOperand::CreateMBB(MBB); 1116 lex(); 1117 return false; 1118 } 1119 1120 bool MIParser::parseStackFrameIndex(int &FI) { 1121 assert(Token.is(MIToken::StackObject)); 1122 unsigned ID; 1123 if (getUnsigned(ID)) 1124 return true; 1125 auto ObjectInfo = PFS.StackObjectSlots.find(ID); 1126 if (ObjectInfo == PFS.StackObjectSlots.end()) 1127 return error(Twine("use of undefined stack object '%stack.") + Twine(ID) + 1128 "'"); 1129 StringRef Name; 1130 if (const auto *Alloca = 1131 MF.getFrameInfo()->getObjectAllocation(ObjectInfo->second)) 1132 Name = Alloca->getName(); 1133 if (!Token.stringValue().empty() && Token.stringValue() != Name) 1134 return error(Twine("the name of the stack object '%stack.") + Twine(ID) + 1135 "' isn't '" + Token.stringValue() + "'"); 1136 lex(); 1137 FI = ObjectInfo->second; 1138 return false; 1139 } 1140 1141 bool MIParser::parseStackObjectOperand(MachineOperand &Dest) { 1142 int FI; 1143 if (parseStackFrameIndex(FI)) 1144 return true; 1145 Dest = MachineOperand::CreateFI(FI); 1146 return false; 1147 } 1148 1149 bool MIParser::parseFixedStackFrameIndex(int &FI) { 1150 assert(Token.is(MIToken::FixedStackObject)); 1151 unsigned ID; 1152 if (getUnsigned(ID)) 1153 return true; 1154 auto ObjectInfo = PFS.FixedStackObjectSlots.find(ID); 1155 if (ObjectInfo == PFS.FixedStackObjectSlots.end()) 1156 return error(Twine("use of undefined fixed stack object '%fixed-stack.") + 1157 Twine(ID) + "'"); 1158 lex(); 1159 FI = ObjectInfo->second; 1160 return false; 1161 } 1162 1163 bool MIParser::parseFixedStackObjectOperand(MachineOperand &Dest) { 1164 int FI; 1165 if (parseFixedStackFrameIndex(FI)) 1166 return true; 1167 Dest = MachineOperand::CreateFI(FI); 1168 return false; 1169 } 1170 1171 bool MIParser::parseGlobalValue(GlobalValue *&GV) { 1172 switch (Token.kind()) { 1173 case MIToken::NamedGlobalValue: { 1174 const Module *M = MF.getFunction()->getParent(); 1175 GV = M->getNamedValue(Token.stringValue()); 1176 if (!GV) 1177 return error(Twine("use of undefined global value '") + Token.range() + 1178 "'"); 1179 break; 1180 } 1181 case MIToken::GlobalValue: { 1182 unsigned GVIdx; 1183 if (getUnsigned(GVIdx)) 1184 return true; 1185 if (GVIdx >= PFS.IRSlots.GlobalValues.size()) 1186 return error(Twine("use of undefined global value '@") + Twine(GVIdx) + 1187 "'"); 1188 GV = PFS.IRSlots.GlobalValues[GVIdx]; 1189 break; 1190 } 1191 default: 1192 llvm_unreachable("The current token should be a global value"); 1193 } 1194 return false; 1195 } 1196 1197 bool MIParser::parseGlobalAddressOperand(MachineOperand &Dest) { 1198 GlobalValue *GV = nullptr; 1199 if (parseGlobalValue(GV)) 1200 return true; 1201 lex(); 1202 Dest = MachineOperand::CreateGA(GV, /*Offset=*/0); 1203 if (parseOperandsOffset(Dest)) 1204 return true; 1205 return false; 1206 } 1207 1208 bool MIParser::parseConstantPoolIndexOperand(MachineOperand &Dest) { 1209 assert(Token.is(MIToken::ConstantPoolItem)); 1210 unsigned ID; 1211 if (getUnsigned(ID)) 1212 return true; 1213 auto ConstantInfo = PFS.ConstantPoolSlots.find(ID); 1214 if (ConstantInfo == PFS.ConstantPoolSlots.end()) 1215 return error("use of undefined constant '%const." + Twine(ID) + "'"); 1216 lex(); 1217 Dest = MachineOperand::CreateCPI(ID, /*Offset=*/0); 1218 if (parseOperandsOffset(Dest)) 1219 return true; 1220 return false; 1221 } 1222 1223 bool MIParser::parseJumpTableIndexOperand(MachineOperand &Dest) { 1224 assert(Token.is(MIToken::JumpTableIndex)); 1225 unsigned ID; 1226 if (getUnsigned(ID)) 1227 return true; 1228 auto JumpTableEntryInfo = PFS.JumpTableSlots.find(ID); 1229 if (JumpTableEntryInfo == PFS.JumpTableSlots.end()) 1230 return error("use of undefined jump table '%jump-table." + Twine(ID) + "'"); 1231 lex(); 1232 Dest = MachineOperand::CreateJTI(JumpTableEntryInfo->second); 1233 return false; 1234 } 1235 1236 bool MIParser::parseExternalSymbolOperand(MachineOperand &Dest) { 1237 assert(Token.is(MIToken::ExternalSymbol)); 1238 const char *Symbol = MF.createExternalSymbolName(Token.stringValue()); 1239 lex(); 1240 Dest = MachineOperand::CreateES(Symbol); 1241 if (parseOperandsOffset(Dest)) 1242 return true; 1243 return false; 1244 } 1245 1246 bool MIParser::parseSubRegisterIndexOperand(MachineOperand &Dest) { 1247 assert(Token.is(MIToken::SubRegisterIndex)); 1248 StringRef Name = Token.stringValue(); 1249 unsigned SubRegIndex = getSubRegIndex(Token.stringValue()); 1250 if (SubRegIndex == 0) 1251 return error(Twine("unknown subregister index '") + Name + "'"); 1252 lex(); 1253 Dest = MachineOperand::CreateImm(SubRegIndex); 1254 return false; 1255 } 1256 1257 bool MIParser::parseMDNode(MDNode *&Node) { 1258 assert(Token.is(MIToken::exclaim)); 1259 auto Loc = Token.location(); 1260 lex(); 1261 if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned()) 1262 return error("expected metadata id after '!'"); 1263 unsigned ID; 1264 if (getUnsigned(ID)) 1265 return true; 1266 auto NodeInfo = PFS.IRSlots.MetadataNodes.find(ID); 1267 if (NodeInfo == PFS.IRSlots.MetadataNodes.end()) 1268 return error(Loc, "use of undefined metadata '!" + Twine(ID) + "'"); 1269 lex(); 1270 Node = NodeInfo->second.get(); 1271 return false; 1272 } 1273 1274 bool MIParser::parseMetadataOperand(MachineOperand &Dest) { 1275 MDNode *Node = nullptr; 1276 if (parseMDNode(Node)) 1277 return true; 1278 Dest = MachineOperand::CreateMetadata(Node); 1279 return false; 1280 } 1281 1282 bool MIParser::parseCFIOffset(int &Offset) { 1283 if (Token.isNot(MIToken::IntegerLiteral)) 1284 return error("expected a cfi offset"); 1285 if (Token.integerValue().getMinSignedBits() > 32) 1286 return error("expected a 32 bit integer (the cfi offset is too large)"); 1287 Offset = (int)Token.integerValue().getExtValue(); 1288 lex(); 1289 return false; 1290 } 1291 1292 bool MIParser::parseCFIRegister(unsigned &Reg) { 1293 if (Token.isNot(MIToken::NamedRegister)) 1294 return error("expected a cfi register"); 1295 unsigned LLVMReg; 1296 if (parseRegister(LLVMReg)) 1297 return true; 1298 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1299 assert(TRI && "Expected target register info"); 1300 int DwarfReg = TRI->getDwarfRegNum(LLVMReg, true); 1301 if (DwarfReg < 0) 1302 return error("invalid DWARF register"); 1303 Reg = (unsigned)DwarfReg; 1304 lex(); 1305 return false; 1306 } 1307 1308 bool MIParser::parseCFIOperand(MachineOperand &Dest) { 1309 auto Kind = Token.kind(); 1310 lex(); 1311 auto &MMI = MF.getMMI(); 1312 int Offset; 1313 unsigned Reg; 1314 unsigned CFIIndex; 1315 switch (Kind) { 1316 case MIToken::kw_cfi_same_value: 1317 if (parseCFIRegister(Reg)) 1318 return true; 1319 CFIIndex = 1320 MMI.addFrameInst(MCCFIInstruction::createSameValue(nullptr, Reg)); 1321 break; 1322 case MIToken::kw_cfi_offset: 1323 if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) || 1324 parseCFIOffset(Offset)) 1325 return true; 1326 CFIIndex = 1327 MMI.addFrameInst(MCCFIInstruction::createOffset(nullptr, Reg, Offset)); 1328 break; 1329 case MIToken::kw_cfi_def_cfa_register: 1330 if (parseCFIRegister(Reg)) 1331 return true; 1332 CFIIndex = 1333 MMI.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, Reg)); 1334 break; 1335 case MIToken::kw_cfi_def_cfa_offset: 1336 if (parseCFIOffset(Offset)) 1337 return true; 1338 // NB: MCCFIInstruction::createDefCfaOffset negates the offset. 1339 CFIIndex = MMI.addFrameInst( 1340 MCCFIInstruction::createDefCfaOffset(nullptr, -Offset)); 1341 break; 1342 case MIToken::kw_cfi_def_cfa: 1343 if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) || 1344 parseCFIOffset(Offset)) 1345 return true; 1346 // NB: MCCFIInstruction::createDefCfa negates the offset. 1347 CFIIndex = 1348 MMI.addFrameInst(MCCFIInstruction::createDefCfa(nullptr, Reg, -Offset)); 1349 break; 1350 default: 1351 // TODO: Parse the other CFI operands. 1352 llvm_unreachable("The current token should be a cfi operand"); 1353 } 1354 Dest = MachineOperand::CreateCFIIndex(CFIIndex); 1355 return false; 1356 } 1357 1358 bool MIParser::parseIRBlock(BasicBlock *&BB, const Function &F) { 1359 switch (Token.kind()) { 1360 case MIToken::NamedIRBlock: { 1361 BB = dyn_cast_or_null<BasicBlock>( 1362 F.getValueSymbolTable().lookup(Token.stringValue())); 1363 if (!BB) 1364 return error(Twine("use of undefined IR block '") + Token.range() + "'"); 1365 break; 1366 } 1367 case MIToken::IRBlock: { 1368 unsigned SlotNumber = 0; 1369 if (getUnsigned(SlotNumber)) 1370 return true; 1371 BB = const_cast<BasicBlock *>(getIRBlock(SlotNumber, F)); 1372 if (!BB) 1373 return error(Twine("use of undefined IR block '%ir-block.") + 1374 Twine(SlotNumber) + "'"); 1375 break; 1376 } 1377 default: 1378 llvm_unreachable("The current token should be an IR block reference"); 1379 } 1380 return false; 1381 } 1382 1383 bool MIParser::parseBlockAddressOperand(MachineOperand &Dest) { 1384 assert(Token.is(MIToken::kw_blockaddress)); 1385 lex(); 1386 if (expectAndConsume(MIToken::lparen)) 1387 return true; 1388 if (Token.isNot(MIToken::GlobalValue) && 1389 Token.isNot(MIToken::NamedGlobalValue)) 1390 return error("expected a global value"); 1391 GlobalValue *GV = nullptr; 1392 if (parseGlobalValue(GV)) 1393 return true; 1394 auto *F = dyn_cast<Function>(GV); 1395 if (!F) 1396 return error("expected an IR function reference"); 1397 lex(); 1398 if (expectAndConsume(MIToken::comma)) 1399 return true; 1400 BasicBlock *BB = nullptr; 1401 if (Token.isNot(MIToken::IRBlock) && Token.isNot(MIToken::NamedIRBlock)) 1402 return error("expected an IR block reference"); 1403 if (parseIRBlock(BB, *F)) 1404 return true; 1405 lex(); 1406 if (expectAndConsume(MIToken::rparen)) 1407 return true; 1408 Dest = MachineOperand::CreateBA(BlockAddress::get(F, BB), /*Offset=*/0); 1409 if (parseOperandsOffset(Dest)) 1410 return true; 1411 return false; 1412 } 1413 1414 bool MIParser::parseTargetIndexOperand(MachineOperand &Dest) { 1415 assert(Token.is(MIToken::kw_target_index)); 1416 lex(); 1417 if (expectAndConsume(MIToken::lparen)) 1418 return true; 1419 if (Token.isNot(MIToken::Identifier)) 1420 return error("expected the name of the target index"); 1421 int Index = 0; 1422 if (getTargetIndex(Token.stringValue(), Index)) 1423 return error("use of undefined target index '" + Token.stringValue() + "'"); 1424 lex(); 1425 if (expectAndConsume(MIToken::rparen)) 1426 return true; 1427 Dest = MachineOperand::CreateTargetIndex(unsigned(Index), /*Offset=*/0); 1428 if (parseOperandsOffset(Dest)) 1429 return true; 1430 return false; 1431 } 1432 1433 bool MIParser::parseLiveoutRegisterMaskOperand(MachineOperand &Dest) { 1434 assert(Token.is(MIToken::kw_liveout)); 1435 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1436 assert(TRI && "Expected target register info"); 1437 uint32_t *Mask = MF.allocateRegisterMask(TRI->getNumRegs()); 1438 lex(); 1439 if (expectAndConsume(MIToken::lparen)) 1440 return true; 1441 while (true) { 1442 if (Token.isNot(MIToken::NamedRegister)) 1443 return error("expected a named register"); 1444 unsigned Reg = 0; 1445 if (parseRegister(Reg)) 1446 return true; 1447 lex(); 1448 Mask[Reg / 32] |= 1U << (Reg % 32); 1449 // TODO: Report an error if the same register is used more than once. 1450 if (Token.isNot(MIToken::comma)) 1451 break; 1452 lex(); 1453 } 1454 if (expectAndConsume(MIToken::rparen)) 1455 return true; 1456 Dest = MachineOperand::CreateRegLiveOut(Mask); 1457 return false; 1458 } 1459 1460 bool MIParser::parseMachineOperand(MachineOperand &Dest, 1461 Optional<unsigned> &TiedDefIdx) { 1462 switch (Token.kind()) { 1463 case MIToken::kw_implicit: 1464 case MIToken::kw_implicit_define: 1465 case MIToken::kw_def: 1466 case MIToken::kw_dead: 1467 case MIToken::kw_killed: 1468 case MIToken::kw_undef: 1469 case MIToken::kw_internal: 1470 case MIToken::kw_early_clobber: 1471 case MIToken::kw_debug_use: 1472 case MIToken::underscore: 1473 case MIToken::NamedRegister: 1474 case MIToken::VirtualRegister: 1475 return parseRegisterOperand(Dest, TiedDefIdx); 1476 case MIToken::IntegerLiteral: 1477 return parseImmediateOperand(Dest); 1478 case MIToken::IntegerType: 1479 return parseTypedImmediateOperand(Dest); 1480 case MIToken::kw_half: 1481 case MIToken::kw_float: 1482 case MIToken::kw_double: 1483 case MIToken::kw_x86_fp80: 1484 case MIToken::kw_fp128: 1485 case MIToken::kw_ppc_fp128: 1486 return parseFPImmediateOperand(Dest); 1487 case MIToken::MachineBasicBlock: 1488 return parseMBBOperand(Dest); 1489 case MIToken::StackObject: 1490 return parseStackObjectOperand(Dest); 1491 case MIToken::FixedStackObject: 1492 return parseFixedStackObjectOperand(Dest); 1493 case MIToken::GlobalValue: 1494 case MIToken::NamedGlobalValue: 1495 return parseGlobalAddressOperand(Dest); 1496 case MIToken::ConstantPoolItem: 1497 return parseConstantPoolIndexOperand(Dest); 1498 case MIToken::JumpTableIndex: 1499 return parseJumpTableIndexOperand(Dest); 1500 case MIToken::ExternalSymbol: 1501 return parseExternalSymbolOperand(Dest); 1502 case MIToken::SubRegisterIndex: 1503 return parseSubRegisterIndexOperand(Dest); 1504 case MIToken::exclaim: 1505 return parseMetadataOperand(Dest); 1506 case MIToken::kw_cfi_same_value: 1507 case MIToken::kw_cfi_offset: 1508 case MIToken::kw_cfi_def_cfa_register: 1509 case MIToken::kw_cfi_def_cfa_offset: 1510 case MIToken::kw_cfi_def_cfa: 1511 return parseCFIOperand(Dest); 1512 case MIToken::kw_blockaddress: 1513 return parseBlockAddressOperand(Dest); 1514 case MIToken::kw_target_index: 1515 return parseTargetIndexOperand(Dest); 1516 case MIToken::kw_liveout: 1517 return parseLiveoutRegisterMaskOperand(Dest); 1518 case MIToken::Error: 1519 return true; 1520 case MIToken::Identifier: 1521 if (const auto *RegMask = getRegMask(Token.stringValue())) { 1522 Dest = MachineOperand::CreateRegMask(RegMask); 1523 lex(); 1524 break; 1525 } 1526 // fallthrough 1527 default: 1528 // FIXME: Parse the MCSymbol machine operand. 1529 return error("expected a machine operand"); 1530 } 1531 return false; 1532 } 1533 1534 bool MIParser::parseMachineOperandAndTargetFlags( 1535 MachineOperand &Dest, Optional<unsigned> &TiedDefIdx) { 1536 unsigned TF = 0; 1537 bool HasTargetFlags = false; 1538 if (Token.is(MIToken::kw_target_flags)) { 1539 HasTargetFlags = true; 1540 lex(); 1541 if (expectAndConsume(MIToken::lparen)) 1542 return true; 1543 if (Token.isNot(MIToken::Identifier)) 1544 return error("expected the name of the target flag"); 1545 if (getDirectTargetFlag(Token.stringValue(), TF)) { 1546 if (getBitmaskTargetFlag(Token.stringValue(), TF)) 1547 return error("use of undefined target flag '" + Token.stringValue() + 1548 "'"); 1549 } 1550 lex(); 1551 while (Token.is(MIToken::comma)) { 1552 lex(); 1553 if (Token.isNot(MIToken::Identifier)) 1554 return error("expected the name of the target flag"); 1555 unsigned BitFlag = 0; 1556 if (getBitmaskTargetFlag(Token.stringValue(), BitFlag)) 1557 return error("use of undefined target flag '" + Token.stringValue() + 1558 "'"); 1559 // TODO: Report an error when using a duplicate bit target flag. 1560 TF |= BitFlag; 1561 lex(); 1562 } 1563 if (expectAndConsume(MIToken::rparen)) 1564 return true; 1565 } 1566 auto Loc = Token.location(); 1567 if (parseMachineOperand(Dest, TiedDefIdx)) 1568 return true; 1569 if (!HasTargetFlags) 1570 return false; 1571 if (Dest.isReg()) 1572 return error(Loc, "register operands can't have target flags"); 1573 Dest.setTargetFlags(TF); 1574 return false; 1575 } 1576 1577 bool MIParser::parseOffset(int64_t &Offset) { 1578 if (Token.isNot(MIToken::plus) && Token.isNot(MIToken::minus)) 1579 return false; 1580 StringRef Sign = Token.range(); 1581 bool IsNegative = Token.is(MIToken::minus); 1582 lex(); 1583 if (Token.isNot(MIToken::IntegerLiteral)) 1584 return error("expected an integer literal after '" + Sign + "'"); 1585 if (Token.integerValue().getMinSignedBits() > 64) 1586 return error("expected 64-bit integer (too large)"); 1587 Offset = Token.integerValue().getExtValue(); 1588 if (IsNegative) 1589 Offset = -Offset; 1590 lex(); 1591 return false; 1592 } 1593 1594 bool MIParser::parseAlignment(unsigned &Alignment) { 1595 assert(Token.is(MIToken::kw_align)); 1596 lex(); 1597 if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned()) 1598 return error("expected an integer literal after 'align'"); 1599 if (getUnsigned(Alignment)) 1600 return true; 1601 lex(); 1602 return false; 1603 } 1604 1605 bool MIParser::parseOperandsOffset(MachineOperand &Op) { 1606 int64_t Offset = 0; 1607 if (parseOffset(Offset)) 1608 return true; 1609 Op.setOffset(Offset); 1610 return false; 1611 } 1612 1613 bool MIParser::parseIRValue(const Value *&V) { 1614 switch (Token.kind()) { 1615 case MIToken::NamedIRValue: { 1616 V = MF.getFunction()->getValueSymbolTable().lookup(Token.stringValue()); 1617 break; 1618 } 1619 case MIToken::IRValue: { 1620 unsigned SlotNumber = 0; 1621 if (getUnsigned(SlotNumber)) 1622 return true; 1623 V = getIRValue(SlotNumber); 1624 break; 1625 } 1626 case MIToken::NamedGlobalValue: 1627 case MIToken::GlobalValue: { 1628 GlobalValue *GV = nullptr; 1629 if (parseGlobalValue(GV)) 1630 return true; 1631 V = GV; 1632 break; 1633 } 1634 case MIToken::QuotedIRValue: { 1635 const Constant *C = nullptr; 1636 if (parseIRConstant(Token.location(), Token.stringValue(), C)) 1637 return true; 1638 V = C; 1639 break; 1640 } 1641 default: 1642 llvm_unreachable("The current token should be an IR block reference"); 1643 } 1644 if (!V) 1645 return error(Twine("use of undefined IR value '") + Token.range() + "'"); 1646 return false; 1647 } 1648 1649 bool MIParser::getUint64(uint64_t &Result) { 1650 assert(Token.hasIntegerValue()); 1651 if (Token.integerValue().getActiveBits() > 64) 1652 return error("expected 64-bit integer (too large)"); 1653 Result = Token.integerValue().getZExtValue(); 1654 return false; 1655 } 1656 1657 bool MIParser::parseMemoryOperandFlag(MachineMemOperand::Flags &Flags) { 1658 const auto OldFlags = Flags; 1659 switch (Token.kind()) { 1660 case MIToken::kw_volatile: 1661 Flags |= MachineMemOperand::MOVolatile; 1662 break; 1663 case MIToken::kw_non_temporal: 1664 Flags |= MachineMemOperand::MONonTemporal; 1665 break; 1666 case MIToken::kw_invariant: 1667 Flags |= MachineMemOperand::MOInvariant; 1668 break; 1669 // TODO: parse the target specific memory operand flags. 1670 default: 1671 llvm_unreachable("The current token should be a memory operand flag"); 1672 } 1673 if (OldFlags == Flags) 1674 // We know that the same flag is specified more than once when the flags 1675 // weren't modified. 1676 return error("duplicate '" + Token.stringValue() + "' memory operand flag"); 1677 lex(); 1678 return false; 1679 } 1680 1681 bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) { 1682 switch (Token.kind()) { 1683 case MIToken::kw_stack: 1684 PSV = MF.getPSVManager().getStack(); 1685 break; 1686 case MIToken::kw_got: 1687 PSV = MF.getPSVManager().getGOT(); 1688 break; 1689 case MIToken::kw_jump_table: 1690 PSV = MF.getPSVManager().getJumpTable(); 1691 break; 1692 case MIToken::kw_constant_pool: 1693 PSV = MF.getPSVManager().getConstantPool(); 1694 break; 1695 case MIToken::FixedStackObject: { 1696 int FI; 1697 if (parseFixedStackFrameIndex(FI)) 1698 return true; 1699 PSV = MF.getPSVManager().getFixedStack(FI); 1700 // The token was already consumed, so use return here instead of break. 1701 return false; 1702 } 1703 case MIToken::StackObject: { 1704 int FI; 1705 if (parseStackFrameIndex(FI)) 1706 return true; 1707 PSV = MF.getPSVManager().getFixedStack(FI); 1708 // The token was already consumed, so use return here instead of break. 1709 return false; 1710 } 1711 case MIToken::kw_call_entry: { 1712 lex(); 1713 switch (Token.kind()) { 1714 case MIToken::GlobalValue: 1715 case MIToken::NamedGlobalValue: { 1716 GlobalValue *GV = nullptr; 1717 if (parseGlobalValue(GV)) 1718 return true; 1719 PSV = MF.getPSVManager().getGlobalValueCallEntry(GV); 1720 break; 1721 } 1722 case MIToken::ExternalSymbol: 1723 PSV = MF.getPSVManager().getExternalSymbolCallEntry( 1724 MF.createExternalSymbolName(Token.stringValue())); 1725 break; 1726 default: 1727 return error( 1728 "expected a global value or an external symbol after 'call-entry'"); 1729 } 1730 break; 1731 } 1732 default: 1733 llvm_unreachable("The current token should be pseudo source value"); 1734 } 1735 lex(); 1736 return false; 1737 } 1738 1739 bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) { 1740 if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack) || 1741 Token.is(MIToken::kw_got) || Token.is(MIToken::kw_jump_table) || 1742 Token.is(MIToken::FixedStackObject) || Token.is(MIToken::StackObject) || 1743 Token.is(MIToken::kw_call_entry)) { 1744 const PseudoSourceValue *PSV = nullptr; 1745 if (parseMemoryPseudoSourceValue(PSV)) 1746 return true; 1747 int64_t Offset = 0; 1748 if (parseOffset(Offset)) 1749 return true; 1750 Dest = MachinePointerInfo(PSV, Offset); 1751 return false; 1752 } 1753 if (Token.isNot(MIToken::NamedIRValue) && Token.isNot(MIToken::IRValue) && 1754 Token.isNot(MIToken::GlobalValue) && 1755 Token.isNot(MIToken::NamedGlobalValue) && 1756 Token.isNot(MIToken::QuotedIRValue)) 1757 return error("expected an IR value reference"); 1758 const Value *V = nullptr; 1759 if (parseIRValue(V)) 1760 return true; 1761 if (!V->getType()->isPointerTy()) 1762 return error("expected a pointer IR value"); 1763 lex(); 1764 int64_t Offset = 0; 1765 if (parseOffset(Offset)) 1766 return true; 1767 Dest = MachinePointerInfo(V, Offset); 1768 return false; 1769 } 1770 1771 bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) { 1772 if (expectAndConsume(MIToken::lparen)) 1773 return true; 1774 MachineMemOperand::Flags Flags = MachineMemOperand::MONone; 1775 while (Token.isMemoryOperandFlag()) { 1776 if (parseMemoryOperandFlag(Flags)) 1777 return true; 1778 } 1779 if (Token.isNot(MIToken::Identifier) || 1780 (Token.stringValue() != "load" && Token.stringValue() != "store")) 1781 return error("expected 'load' or 'store' memory operation"); 1782 if (Token.stringValue() == "load") 1783 Flags |= MachineMemOperand::MOLoad; 1784 else 1785 Flags |= MachineMemOperand::MOStore; 1786 lex(); 1787 1788 if (Token.isNot(MIToken::IntegerLiteral)) 1789 return error("expected the size integer literal after memory operation"); 1790 uint64_t Size; 1791 if (getUint64(Size)) 1792 return true; 1793 lex(); 1794 1795 MachinePointerInfo Ptr = MachinePointerInfo(); 1796 if (Token.is(MIToken::Identifier)) { 1797 const char *Word = Flags & MachineMemOperand::MOLoad ? "from" : "into"; 1798 if (Token.stringValue() != Word) 1799 return error(Twine("expected '") + Word + "'"); 1800 lex(); 1801 1802 if (parseMachinePointerInfo(Ptr)) 1803 return true; 1804 } 1805 unsigned BaseAlignment = Size; 1806 AAMDNodes AAInfo; 1807 MDNode *Range = nullptr; 1808 while (consumeIfPresent(MIToken::comma)) { 1809 switch (Token.kind()) { 1810 case MIToken::kw_align: 1811 if (parseAlignment(BaseAlignment)) 1812 return true; 1813 break; 1814 case MIToken::md_tbaa: 1815 lex(); 1816 if (parseMDNode(AAInfo.TBAA)) 1817 return true; 1818 break; 1819 case MIToken::md_alias_scope: 1820 lex(); 1821 if (parseMDNode(AAInfo.Scope)) 1822 return true; 1823 break; 1824 case MIToken::md_noalias: 1825 lex(); 1826 if (parseMDNode(AAInfo.NoAlias)) 1827 return true; 1828 break; 1829 case MIToken::md_range: 1830 lex(); 1831 if (parseMDNode(Range)) 1832 return true; 1833 break; 1834 // TODO: Report an error on duplicate metadata nodes. 1835 default: 1836 return error("expected 'align' or '!tbaa' or '!alias.scope' or " 1837 "'!noalias' or '!range'"); 1838 } 1839 } 1840 if (expectAndConsume(MIToken::rparen)) 1841 return true; 1842 Dest = 1843 MF.getMachineMemOperand(Ptr, Flags, Size, BaseAlignment, AAInfo, Range); 1844 return false; 1845 } 1846 1847 void MIParser::initNames2InstrOpCodes() { 1848 if (!Names2InstrOpCodes.empty()) 1849 return; 1850 const auto *TII = MF.getSubtarget().getInstrInfo(); 1851 assert(TII && "Expected target instruction info"); 1852 for (unsigned I = 0, E = TII->getNumOpcodes(); I < E; ++I) 1853 Names2InstrOpCodes.insert(std::make_pair(StringRef(TII->getName(I)), I)); 1854 } 1855 1856 bool MIParser::parseInstrName(StringRef InstrName, unsigned &OpCode) { 1857 initNames2InstrOpCodes(); 1858 auto InstrInfo = Names2InstrOpCodes.find(InstrName); 1859 if (InstrInfo == Names2InstrOpCodes.end()) 1860 return true; 1861 OpCode = InstrInfo->getValue(); 1862 return false; 1863 } 1864 1865 void MIParser::initNames2Regs() { 1866 if (!Names2Regs.empty()) 1867 return; 1868 // The '%noreg' register is the register 0. 1869 Names2Regs.insert(std::make_pair("noreg", 0)); 1870 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1871 assert(TRI && "Expected target register info"); 1872 for (unsigned I = 0, E = TRI->getNumRegs(); I < E; ++I) { 1873 bool WasInserted = 1874 Names2Regs.insert(std::make_pair(StringRef(TRI->getName(I)).lower(), I)) 1875 .second; 1876 (void)WasInserted; 1877 assert(WasInserted && "Expected registers to be unique case-insensitively"); 1878 } 1879 } 1880 1881 bool MIParser::getRegisterByName(StringRef RegName, unsigned &Reg) { 1882 initNames2Regs(); 1883 auto RegInfo = Names2Regs.find(RegName); 1884 if (RegInfo == Names2Regs.end()) 1885 return true; 1886 Reg = RegInfo->getValue(); 1887 return false; 1888 } 1889 1890 void MIParser::initNames2RegMasks() { 1891 if (!Names2RegMasks.empty()) 1892 return; 1893 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1894 assert(TRI && "Expected target register info"); 1895 ArrayRef<const uint32_t *> RegMasks = TRI->getRegMasks(); 1896 ArrayRef<const char *> RegMaskNames = TRI->getRegMaskNames(); 1897 assert(RegMasks.size() == RegMaskNames.size()); 1898 for (size_t I = 0, E = RegMasks.size(); I < E; ++I) 1899 Names2RegMasks.insert( 1900 std::make_pair(StringRef(RegMaskNames[I]).lower(), RegMasks[I])); 1901 } 1902 1903 const uint32_t *MIParser::getRegMask(StringRef Identifier) { 1904 initNames2RegMasks(); 1905 auto RegMaskInfo = Names2RegMasks.find(Identifier); 1906 if (RegMaskInfo == Names2RegMasks.end()) 1907 return nullptr; 1908 return RegMaskInfo->getValue(); 1909 } 1910 1911 void MIParser::initNames2SubRegIndices() { 1912 if (!Names2SubRegIndices.empty()) 1913 return; 1914 const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); 1915 for (unsigned I = 1, E = TRI->getNumSubRegIndices(); I < E; ++I) 1916 Names2SubRegIndices.insert( 1917 std::make_pair(StringRef(TRI->getSubRegIndexName(I)).lower(), I)); 1918 } 1919 1920 unsigned MIParser::getSubRegIndex(StringRef Name) { 1921 initNames2SubRegIndices(); 1922 auto SubRegInfo = Names2SubRegIndices.find(Name); 1923 if (SubRegInfo == Names2SubRegIndices.end()) 1924 return 0; 1925 return SubRegInfo->getValue(); 1926 } 1927 1928 static void initSlots2BasicBlocks( 1929 const Function &F, 1930 DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) { 1931 ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false); 1932 MST.incorporateFunction(F); 1933 for (auto &BB : F) { 1934 if (BB.hasName()) 1935 continue; 1936 int Slot = MST.getLocalSlot(&BB); 1937 if (Slot == -1) 1938 continue; 1939 Slots2BasicBlocks.insert(std::make_pair(unsigned(Slot), &BB)); 1940 } 1941 } 1942 1943 static const BasicBlock *getIRBlockFromSlot( 1944 unsigned Slot, 1945 const DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) { 1946 auto BlockInfo = Slots2BasicBlocks.find(Slot); 1947 if (BlockInfo == Slots2BasicBlocks.end()) 1948 return nullptr; 1949 return BlockInfo->second; 1950 } 1951 1952 const BasicBlock *MIParser::getIRBlock(unsigned Slot) { 1953 if (Slots2BasicBlocks.empty()) 1954 initSlots2BasicBlocks(*MF.getFunction(), Slots2BasicBlocks); 1955 return getIRBlockFromSlot(Slot, Slots2BasicBlocks); 1956 } 1957 1958 const BasicBlock *MIParser::getIRBlock(unsigned Slot, const Function &F) { 1959 if (&F == MF.getFunction()) 1960 return getIRBlock(Slot); 1961 DenseMap<unsigned, const BasicBlock *> CustomSlots2BasicBlocks; 1962 initSlots2BasicBlocks(F, CustomSlots2BasicBlocks); 1963 return getIRBlockFromSlot(Slot, CustomSlots2BasicBlocks); 1964 } 1965 1966 static void mapValueToSlot(const Value *V, ModuleSlotTracker &MST, 1967 DenseMap<unsigned, const Value *> &Slots2Values) { 1968 int Slot = MST.getLocalSlot(V); 1969 if (Slot == -1) 1970 return; 1971 Slots2Values.insert(std::make_pair(unsigned(Slot), V)); 1972 } 1973 1974 /// Creates the mapping from slot numbers to function's unnamed IR values. 1975 static void initSlots2Values(const Function &F, 1976 DenseMap<unsigned, const Value *> &Slots2Values) { 1977 ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false); 1978 MST.incorporateFunction(F); 1979 for (const auto &Arg : F.args()) 1980 mapValueToSlot(&Arg, MST, Slots2Values); 1981 for (const auto &BB : F) { 1982 mapValueToSlot(&BB, MST, Slots2Values); 1983 for (const auto &I : BB) 1984 mapValueToSlot(&I, MST, Slots2Values); 1985 } 1986 } 1987 1988 const Value *MIParser::getIRValue(unsigned Slot) { 1989 if (Slots2Values.empty()) 1990 initSlots2Values(*MF.getFunction(), Slots2Values); 1991 auto ValueInfo = Slots2Values.find(Slot); 1992 if (ValueInfo == Slots2Values.end()) 1993 return nullptr; 1994 return ValueInfo->second; 1995 } 1996 1997 void MIParser::initNames2TargetIndices() { 1998 if (!Names2TargetIndices.empty()) 1999 return; 2000 const auto *TII = MF.getSubtarget().getInstrInfo(); 2001 assert(TII && "Expected target instruction info"); 2002 auto Indices = TII->getSerializableTargetIndices(); 2003 for (const auto &I : Indices) 2004 Names2TargetIndices.insert(std::make_pair(StringRef(I.second), I.first)); 2005 } 2006 2007 bool MIParser::getTargetIndex(StringRef Name, int &Index) { 2008 initNames2TargetIndices(); 2009 auto IndexInfo = Names2TargetIndices.find(Name); 2010 if (IndexInfo == Names2TargetIndices.end()) 2011 return true; 2012 Index = IndexInfo->second; 2013 return false; 2014 } 2015 2016 void MIParser::initNames2DirectTargetFlags() { 2017 if (!Names2DirectTargetFlags.empty()) 2018 return; 2019 const auto *TII = MF.getSubtarget().getInstrInfo(); 2020 assert(TII && "Expected target instruction info"); 2021 auto Flags = TII->getSerializableDirectMachineOperandTargetFlags(); 2022 for (const auto &I : Flags) 2023 Names2DirectTargetFlags.insert( 2024 std::make_pair(StringRef(I.second), I.first)); 2025 } 2026 2027 bool MIParser::getDirectTargetFlag(StringRef Name, unsigned &Flag) { 2028 initNames2DirectTargetFlags(); 2029 auto FlagInfo = Names2DirectTargetFlags.find(Name); 2030 if (FlagInfo == Names2DirectTargetFlags.end()) 2031 return true; 2032 Flag = FlagInfo->second; 2033 return false; 2034 } 2035 2036 void MIParser::initNames2BitmaskTargetFlags() { 2037 if (!Names2BitmaskTargetFlags.empty()) 2038 return; 2039 const auto *TII = MF.getSubtarget().getInstrInfo(); 2040 assert(TII && "Expected target instruction info"); 2041 auto Flags = TII->getSerializableBitmaskMachineOperandTargetFlags(); 2042 for (const auto &I : Flags) 2043 Names2BitmaskTargetFlags.insert( 2044 std::make_pair(StringRef(I.second), I.first)); 2045 } 2046 2047 bool MIParser::getBitmaskTargetFlag(StringRef Name, unsigned &Flag) { 2048 initNames2BitmaskTargetFlags(); 2049 auto FlagInfo = Names2BitmaskTargetFlags.find(Name); 2050 if (FlagInfo == Names2BitmaskTargetFlags.end()) 2051 return true; 2052 Flag = FlagInfo->second; 2053 return false; 2054 } 2055 2056 bool llvm::parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS, 2057 StringRef Src, 2058 SMDiagnostic &Error) { 2059 return MIParser(PFS, Error, Src).parseBasicBlockDefinitions(PFS.MBBSlots); 2060 } 2061 2062 bool llvm::parseMachineInstructions(const PerFunctionMIParsingState &PFS, 2063 StringRef Src, SMDiagnostic &Error) { 2064 return MIParser(PFS, Error, Src).parseBasicBlocks(); 2065 } 2066 2067 bool llvm::parseMBBReference(const PerFunctionMIParsingState &PFS, 2068 MachineBasicBlock *&MBB, StringRef Src, 2069 SMDiagnostic &Error) { 2070 return MIParser(PFS, Error, Src).parseStandaloneMBB(MBB); 2071 } 2072 2073 bool llvm::parseNamedRegisterReference(const PerFunctionMIParsingState &PFS, 2074 unsigned &Reg, StringRef Src, 2075 SMDiagnostic &Error) { 2076 return MIParser(PFS, Error, Src).parseStandaloneNamedRegister(Reg); 2077 } 2078 2079 bool llvm::parseVirtualRegisterReference(const PerFunctionMIParsingState &PFS, 2080 unsigned &Reg, StringRef Src, 2081 SMDiagnostic &Error) { 2082 return MIParser(PFS, Error, Src).parseStandaloneVirtualRegister(Reg); 2083 } 2084 2085 bool llvm::parseStackObjectReference(const PerFunctionMIParsingState &PFS, 2086 int &FI, StringRef Src, 2087 SMDiagnostic &Error) { 2088 return MIParser(PFS, Error, Src).parseStandaloneStackObject(FI); 2089 } 2090 2091 bool llvm::parseMDNode(const PerFunctionMIParsingState &PFS, 2092 MDNode *&Node, StringRef Src, SMDiagnostic &Error) { 2093 return MIParser(PFS, Error, Src).parseStandaloneMDNode(Node); 2094 } 2095