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