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 "MILexer.h" 15 #include "MIParser.h" 16 #include "llvm/ADT/APInt.h" 17 #include "llvm/ADT/APSInt.h" 18 #include "llvm/ADT/ArrayRef.h" 19 #include "llvm/ADT/DenseMap.h" 20 #include "llvm/ADT/None.h" 21 #include "llvm/ADT/Optional.h" 22 #include "llvm/ADT/SmallVector.h" 23 #include "llvm/ADT/StringMap.h" 24 #include "llvm/ADT/StringSwitch.h" 25 #include "llvm/ADT/StringRef.h" 26 #include "llvm/ADT/Twine.h" 27 #include "llvm/AsmParser/Parser.h" 28 #include "llvm/AsmParser/SlotMapping.h" 29 #include "llvm/CodeGen/MIRPrinter.h" 30 #include "llvm/CodeGen/MachineBasicBlock.h" 31 #include "llvm/CodeGen/MachineFrameInfo.h" 32 #include "llvm/CodeGen/MachineFunction.h" 33 #include "llvm/CodeGen/MachineInstr.h" 34 #include "llvm/CodeGen/MachineInstrBuilder.h" 35 #include "llvm/CodeGen/MachineMemOperand.h" 36 #include "llvm/CodeGen/MachineModuleInfo.h" 37 #include "llvm/CodeGen/MachineOperand.h" 38 #include "llvm/CodeGen/MachineRegisterInfo.h" 39 #include "llvm/IR/BasicBlock.h" 40 #include "llvm/IR/Constants.h" 41 #include "llvm/IR/DataLayout.h" 42 #include "llvm/IR/DebugLoc.h" 43 #include "llvm/IR/Function.h" 44 #include "llvm/IR/InstrTypes.h" 45 #include "llvm/IR/Instructions.h" 46 #include "llvm/IR/Intrinsics.h" 47 #include "llvm/IR/Metadata.h" 48 #include "llvm/IR/Module.h" 49 #include "llvm/IR/ModuleSlotTracker.h" 50 #include "llvm/IR/Type.h" 51 #include "llvm/IR/Value.h" 52 #include "llvm/IR/ValueSymbolTable.h" 53 #include "llvm/MC/LaneBitmask.h" 54 #include "llvm/MC/MCDwarf.h" 55 #include "llvm/MC/MCInstrDesc.h" 56 #include "llvm/MC/MCRegisterInfo.h" 57 #include "llvm/Support/AtomicOrdering.h" 58 #include "llvm/Support/BranchProbability.h" 59 #include "llvm/Support/Casting.h" 60 #include "llvm/Support/ErrorHandling.h" 61 #include "llvm/Support/LowLevelTypeImpl.h" 62 #include "llvm/Support/MemoryBuffer.h" 63 #include "llvm/Support/SMLoc.h" 64 #include "llvm/Support/SourceMgr.h" 65 #include "llvm/Support/raw_ostream.h" 66 #include "llvm/Target/TargetInstrInfo.h" 67 #include "llvm/Target/TargetIntrinsicInfo.h" 68 #include "llvm/Target/TargetMachine.h" 69 #include "llvm/Target/TargetRegisterInfo.h" 70 #include "llvm/Target/TargetSubtargetInfo.h" 71 #include <algorithm> 72 #include <cassert> 73 #include <cctype> 74 #include <cstddef> 75 #include <cstdint> 76 #include <limits> 77 #include <string> 78 #include <utility> 79 80 using namespace llvm; 81 82 PerFunctionMIParsingState::PerFunctionMIParsingState(MachineFunction &MF, 83 SourceMgr &SM, const SlotMapping &IRSlots, 84 const Name2RegClassMap &Names2RegClasses, 85 const Name2RegBankMap &Names2RegBanks) 86 : MF(MF), SM(&SM), IRSlots(IRSlots), Names2RegClasses(Names2RegClasses), 87 Names2RegBanks(Names2RegBanks) { 88 } 89 90 VRegInfo &PerFunctionMIParsingState::getVRegInfo(unsigned Num) { 91 auto I = VRegInfos.insert(std::make_pair(Num, nullptr)); 92 if (I.second) { 93 MachineRegisterInfo &MRI = MF.getRegInfo(); 94 VRegInfo *Info = new (Allocator) VRegInfo; 95 Info->VReg = MRI.createIncompleteVirtualRegister(); 96 I.first->second = Info; 97 } 98 return *I.first->second; 99 } 100 101 namespace { 102 103 /// A wrapper struct around the 'MachineOperand' struct that includes a source 104 /// range and other attributes. 105 struct ParsedMachineOperand { 106 MachineOperand Operand; 107 StringRef::iterator Begin; 108 StringRef::iterator End; 109 Optional<unsigned> TiedDefIdx; 110 111 ParsedMachineOperand(const MachineOperand &Operand, StringRef::iterator Begin, 112 StringRef::iterator End, Optional<unsigned> &TiedDefIdx) 113 : Operand(Operand), Begin(Begin), End(End), TiedDefIdx(TiedDefIdx) { 114 if (TiedDefIdx) 115 assert(Operand.isReg() && Operand.isUse() && 116 "Only used register operands can be tied"); 117 } 118 }; 119 120 class MIParser { 121 MachineFunction &MF; 122 SMDiagnostic &Error; 123 StringRef Source, CurrentSource; 124 MIToken Token; 125 PerFunctionMIParsingState &PFS; 126 /// Maps from instruction names to op codes. 127 StringMap<unsigned> Names2InstrOpCodes; 128 /// Maps from register names to registers. 129 StringMap<unsigned> Names2Regs; 130 /// Maps from register mask names to register masks. 131 StringMap<const uint32_t *> Names2RegMasks; 132 /// Maps from subregister names to subregister indices. 133 StringMap<unsigned> Names2SubRegIndices; 134 /// Maps from slot numbers to function's unnamed basic blocks. 135 DenseMap<unsigned, const BasicBlock *> Slots2BasicBlocks; 136 /// Maps from slot numbers to function's unnamed values. 137 DenseMap<unsigned, const Value *> Slots2Values; 138 /// Maps from target index names to target indices. 139 StringMap<int> Names2TargetIndices; 140 /// Maps from direct target flag names to the direct target flag values. 141 StringMap<unsigned> Names2DirectTargetFlags; 142 /// Maps from direct target flag names to the bitmask target flag values. 143 StringMap<unsigned> Names2BitmaskTargetFlags; 144 145 public: 146 MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error, 147 StringRef Source); 148 149 /// \p SkipChar gives the number of characters to skip before looking 150 /// for the next token. 151 void lex(unsigned SkipChar = 0); 152 153 /// Report an error at the current location with the given message. 154 /// 155 /// This function always return true. 156 bool error(const Twine &Msg); 157 158 /// Report an error at the given location with the given message. 159 /// 160 /// This function always return true. 161 bool error(StringRef::iterator Loc, const Twine &Msg); 162 163 bool 164 parseBasicBlockDefinitions(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots); 165 bool parseBasicBlocks(); 166 bool parse(MachineInstr *&MI); 167 bool parseStandaloneMBB(MachineBasicBlock *&MBB); 168 bool parseStandaloneNamedRegister(unsigned &Reg); 169 bool parseStandaloneVirtualRegister(VRegInfo *&Info); 170 bool parseStandaloneRegister(unsigned &Reg); 171 bool parseStandaloneStackObject(int &FI); 172 bool parseStandaloneMDNode(MDNode *&Node); 173 174 bool 175 parseBasicBlockDefinition(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots); 176 bool parseBasicBlock(MachineBasicBlock &MBB, 177 MachineBasicBlock *&AddFalthroughFrom); 178 bool parseBasicBlockLiveins(MachineBasicBlock &MBB); 179 bool parseBasicBlockSuccessors(MachineBasicBlock &MBB); 180 181 bool parseNamedRegister(unsigned &Reg); 182 bool parseVirtualRegister(VRegInfo *&Info); 183 bool parseRegister(unsigned &Reg, VRegInfo *&VRegInfo); 184 bool parseRegisterFlag(unsigned &Flags); 185 bool parseRegisterClassOrBank(VRegInfo &RegInfo); 186 bool parseSubRegisterIndex(unsigned &SubReg); 187 bool parseRegisterTiedDefIndex(unsigned &TiedDefIdx); 188 bool parseRegisterOperand(MachineOperand &Dest, 189 Optional<unsigned> &TiedDefIdx, bool IsDef = false); 190 bool parseImmediateOperand(MachineOperand &Dest); 191 bool parseIRConstant(StringRef::iterator Loc, StringRef Source, 192 const Constant *&C); 193 bool parseIRConstant(StringRef::iterator Loc, const Constant *&C); 194 bool parseLowLevelType(StringRef::iterator Loc, LLT &Ty); 195 bool parseTypedImmediateOperand(MachineOperand &Dest); 196 bool parseFPImmediateOperand(MachineOperand &Dest); 197 bool parseMBBReference(MachineBasicBlock *&MBB); 198 bool parseMBBOperand(MachineOperand &Dest); 199 bool parseStackFrameIndex(int &FI); 200 bool parseStackObjectOperand(MachineOperand &Dest); 201 bool parseFixedStackFrameIndex(int &FI); 202 bool parseFixedStackObjectOperand(MachineOperand &Dest); 203 bool parseGlobalValue(GlobalValue *&GV); 204 bool parseGlobalAddressOperand(MachineOperand &Dest); 205 bool parseConstantPoolIndexOperand(MachineOperand &Dest); 206 bool parseSubRegisterIndexOperand(MachineOperand &Dest); 207 bool parseJumpTableIndexOperand(MachineOperand &Dest); 208 bool parseExternalSymbolOperand(MachineOperand &Dest); 209 bool parseMDNode(MDNode *&Node); 210 bool parseMetadataOperand(MachineOperand &Dest); 211 bool parseCFIOffset(int &Offset); 212 bool parseCFIRegister(unsigned &Reg); 213 bool parseCFIOperand(MachineOperand &Dest); 214 bool parseIRBlock(BasicBlock *&BB, const Function &F); 215 bool parseBlockAddressOperand(MachineOperand &Dest); 216 bool parseIntrinsicOperand(MachineOperand &Dest); 217 bool parsePredicateOperand(MachineOperand &Dest); 218 bool parseTargetIndexOperand(MachineOperand &Dest); 219 bool parseCustomRegisterMaskOperand(MachineOperand &Dest); 220 bool parseLiveoutRegisterMaskOperand(MachineOperand &Dest); 221 bool parseMachineOperand(MachineOperand &Dest, 222 Optional<unsigned> &TiedDefIdx); 223 bool parseMachineOperandAndTargetFlags(MachineOperand &Dest, 224 Optional<unsigned> &TiedDefIdx); 225 bool parseOffset(int64_t &Offset); 226 bool parseAlignment(unsigned &Alignment); 227 bool parseOperandsOffset(MachineOperand &Op); 228 bool parseIRValue(const Value *&V); 229 bool parseMemoryOperandFlag(MachineMemOperand::Flags &Flags); 230 bool parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV); 231 bool parseMachinePointerInfo(MachinePointerInfo &Dest); 232 bool parseOptionalScope(LLVMContext &Context, SyncScope::ID &SSID); 233 bool parseOptionalAtomicOrdering(AtomicOrdering &Order); 234 bool parseMachineMemoryOperand(MachineMemOperand *&Dest); 235 236 private: 237 /// Convert the integer literal in the current token into an unsigned integer. 238 /// 239 /// Return true if an error occurred. 240 bool getUnsigned(unsigned &Result); 241 242 /// Convert the integer literal in the current token into an uint64. 243 /// 244 /// Return true if an error occurred. 245 bool getUint64(uint64_t &Result); 246 247 /// Convert the hexadecimal literal in the current token into an unsigned 248 /// APInt with a minimum bitwidth required to represent the value. 249 /// 250 /// Return true if the literal does not represent an integer value. 251 bool getHexUint(APInt &Result); 252 253 /// If the current token is of the given kind, consume it and return false. 254 /// Otherwise report an error and return true. 255 bool expectAndConsume(MIToken::TokenKind TokenKind); 256 257 /// If the current token is of the given kind, consume it and return true. 258 /// Otherwise return false. 259 bool consumeIfPresent(MIToken::TokenKind TokenKind); 260 261 void initNames2InstrOpCodes(); 262 263 /// Try to convert an instruction name to an opcode. Return true if the 264 /// instruction name is invalid. 265 bool parseInstrName(StringRef InstrName, unsigned &OpCode); 266 267 bool parseInstruction(unsigned &OpCode, unsigned &Flags); 268 269 bool assignRegisterTies(MachineInstr &MI, 270 ArrayRef<ParsedMachineOperand> Operands); 271 272 bool verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands, 273 const MCInstrDesc &MCID); 274 275 void initNames2Regs(); 276 277 /// Try to convert a register name to a register number. Return true if the 278 /// register name is invalid. 279 bool getRegisterByName(StringRef RegName, unsigned &Reg); 280 281 void initNames2RegMasks(); 282 283 /// Check if the given identifier is a name of a register mask. 284 /// 285 /// Return null if the identifier isn't a register mask. 286 const uint32_t *getRegMask(StringRef Identifier); 287 288 void initNames2SubRegIndices(); 289 290 /// Check if the given identifier is a name of a subregister index. 291 /// 292 /// Return 0 if the name isn't a subregister index class. 293 unsigned getSubRegIndex(StringRef Name); 294 295 const BasicBlock *getIRBlock(unsigned Slot); 296 const BasicBlock *getIRBlock(unsigned Slot, const Function &F); 297 298 const Value *getIRValue(unsigned Slot); 299 300 void initNames2TargetIndices(); 301 302 /// Try to convert a name of target index to the corresponding target index. 303 /// 304 /// Return true if the name isn't a name of a target index. 305 bool getTargetIndex(StringRef Name, int &Index); 306 307 void initNames2DirectTargetFlags(); 308 309 /// Try to convert a name of a direct target flag to the corresponding 310 /// target flag. 311 /// 312 /// Return true if the name isn't a name of a direct flag. 313 bool getDirectTargetFlag(StringRef Name, unsigned &Flag); 314 315 void initNames2BitmaskTargetFlags(); 316 317 /// Try to convert a name of a bitmask target flag to the corresponding 318 /// target flag. 319 /// 320 /// Return true if the name isn't a name of a bitmask target flag. 321 bool getBitmaskTargetFlag(StringRef Name, unsigned &Flag); 322 323 /// parseStringConstant 324 /// ::= StringConstant 325 bool parseStringConstant(std::string &Result); 326 }; 327 328 } // end anonymous namespace 329 330 MIParser::MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error, 331 StringRef Source) 332 : MF(PFS.MF), Error(Error), Source(Source), CurrentSource(Source), PFS(PFS) 333 {} 334 335 void MIParser::lex(unsigned SkipChar) { 336 CurrentSource = lexMIToken( 337 CurrentSource.data() + SkipChar, Token, 338 [this](StringRef::iterator Loc, const Twine &Msg) { error(Loc, Msg); }); 339 } 340 341 bool MIParser::error(const Twine &Msg) { return error(Token.location(), Msg); } 342 343 bool MIParser::error(StringRef::iterator Loc, const Twine &Msg) { 344 const SourceMgr &SM = *PFS.SM; 345 assert(Loc >= Source.data() && Loc <= (Source.data() + Source.size())); 346 const MemoryBuffer &Buffer = *SM.getMemoryBuffer(SM.getMainFileID()); 347 if (Loc >= Buffer.getBufferStart() && Loc <= Buffer.getBufferEnd()) { 348 // Create an ordinary diagnostic when the source manager's buffer is the 349 // source string. 350 Error = SM.GetMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg); 351 return true; 352 } 353 // Create a diagnostic for a YAML string literal. 354 Error = SMDiagnostic(SM, SMLoc(), Buffer.getBufferIdentifier(), 1, 355 Loc - Source.data(), SourceMgr::DK_Error, Msg.str(), 356 Source, None, None); 357 return true; 358 } 359 360 static const char *toString(MIToken::TokenKind TokenKind) { 361 switch (TokenKind) { 362 case MIToken::comma: 363 return "','"; 364 case MIToken::equal: 365 return "'='"; 366 case MIToken::colon: 367 return "':'"; 368 case MIToken::lparen: 369 return "'('"; 370 case MIToken::rparen: 371 return "')'"; 372 default: 373 return "<unknown token>"; 374 } 375 } 376 377 bool MIParser::expectAndConsume(MIToken::TokenKind TokenKind) { 378 if (Token.isNot(TokenKind)) 379 return error(Twine("expected ") + toString(TokenKind)); 380 lex(); 381 return false; 382 } 383 384 bool MIParser::consumeIfPresent(MIToken::TokenKind TokenKind) { 385 if (Token.isNot(TokenKind)) 386 return false; 387 lex(); 388 return true; 389 } 390 391 bool MIParser::parseBasicBlockDefinition( 392 DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) { 393 assert(Token.is(MIToken::MachineBasicBlockLabel)); 394 unsigned ID = 0; 395 if (getUnsigned(ID)) 396 return true; 397 auto Loc = Token.location(); 398 auto Name = Token.stringValue(); 399 lex(); 400 bool HasAddressTaken = false; 401 bool IsLandingPad = false; 402 unsigned Alignment = 0; 403 BasicBlock *BB = nullptr; 404 if (consumeIfPresent(MIToken::lparen)) { 405 do { 406 // TODO: Report an error when multiple same attributes are specified. 407 switch (Token.kind()) { 408 case MIToken::kw_address_taken: 409 HasAddressTaken = true; 410 lex(); 411 break; 412 case MIToken::kw_landing_pad: 413 IsLandingPad = true; 414 lex(); 415 break; 416 case MIToken::kw_align: 417 if (parseAlignment(Alignment)) 418 return true; 419 break; 420 case MIToken::IRBlock: 421 // TODO: Report an error when both name and ir block are specified. 422 if (parseIRBlock(BB, *MF.getFunction())) 423 return true; 424 lex(); 425 break; 426 default: 427 break; 428 } 429 } while (consumeIfPresent(MIToken::comma)); 430 if (expectAndConsume(MIToken::rparen)) 431 return true; 432 } 433 if (expectAndConsume(MIToken::colon)) 434 return true; 435 436 if (!Name.empty()) { 437 BB = dyn_cast_or_null<BasicBlock>( 438 MF.getFunction()->getValueSymbolTable()->lookup(Name)); 439 if (!BB) 440 return error(Loc, Twine("basic block '") + Name + 441 "' is not defined in the function '" + 442 MF.getName() + "'"); 443 } 444 auto *MBB = MF.CreateMachineBasicBlock(BB); 445 MF.insert(MF.end(), MBB); 446 bool WasInserted = MBBSlots.insert(std::make_pair(ID, MBB)).second; 447 if (!WasInserted) 448 return error(Loc, Twine("redefinition of machine basic block with id #") + 449 Twine(ID)); 450 if (Alignment) 451 MBB->setAlignment(Alignment); 452 if (HasAddressTaken) 453 MBB->setHasAddressTaken(); 454 MBB->setIsEHPad(IsLandingPad); 455 return false; 456 } 457 458 bool MIParser::parseBasicBlockDefinitions( 459 DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) { 460 lex(); 461 // Skip until the first machine basic block. 462 while (Token.is(MIToken::Newline)) 463 lex(); 464 if (Token.isErrorOrEOF()) 465 return Token.isError(); 466 if (Token.isNot(MIToken::MachineBasicBlockLabel)) 467 return error("expected a basic block definition before instructions"); 468 unsigned BraceDepth = 0; 469 do { 470 if (parseBasicBlockDefinition(MBBSlots)) 471 return true; 472 bool IsAfterNewline = false; 473 // Skip until the next machine basic block. 474 while (true) { 475 if ((Token.is(MIToken::MachineBasicBlockLabel) && IsAfterNewline) || 476 Token.isErrorOrEOF()) 477 break; 478 else if (Token.is(MIToken::MachineBasicBlockLabel)) 479 return error("basic block definition should be located at the start of " 480 "the line"); 481 else if (consumeIfPresent(MIToken::Newline)) { 482 IsAfterNewline = true; 483 continue; 484 } 485 IsAfterNewline = false; 486 if (Token.is(MIToken::lbrace)) 487 ++BraceDepth; 488 if (Token.is(MIToken::rbrace)) { 489 if (!BraceDepth) 490 return error("extraneous closing brace ('}')"); 491 --BraceDepth; 492 } 493 lex(); 494 } 495 // Verify that we closed all of the '{' at the end of a file or a block. 496 if (!Token.isError() && BraceDepth) 497 return error("expected '}'"); // FIXME: Report a note that shows '{'. 498 } while (!Token.isErrorOrEOF()); 499 return Token.isError(); 500 } 501 502 bool MIParser::parseBasicBlockLiveins(MachineBasicBlock &MBB) { 503 assert(Token.is(MIToken::kw_liveins)); 504 lex(); 505 if (expectAndConsume(MIToken::colon)) 506 return true; 507 if (Token.isNewlineOrEOF()) // Allow an empty list of liveins. 508 return false; 509 do { 510 if (Token.isNot(MIToken::NamedRegister)) 511 return error("expected a named register"); 512 unsigned Reg = 0; 513 if (parseNamedRegister(Reg)) 514 return true; 515 lex(); 516 LaneBitmask Mask = LaneBitmask::getAll(); 517 if (consumeIfPresent(MIToken::colon)) { 518 // Parse lane mask. 519 if (Token.isNot(MIToken::IntegerLiteral) && 520 Token.isNot(MIToken::HexLiteral)) 521 return error("expected a lane mask"); 522 static_assert(sizeof(LaneBitmask::Type) == sizeof(unsigned), 523 "Use correct get-function for lane mask"); 524 LaneBitmask::Type V; 525 if (getUnsigned(V)) 526 return error("invalid lane mask value"); 527 Mask = LaneBitmask(V); 528 lex(); 529 } 530 MBB.addLiveIn(Reg, Mask); 531 } while (consumeIfPresent(MIToken::comma)); 532 return false; 533 } 534 535 bool MIParser::parseBasicBlockSuccessors(MachineBasicBlock &MBB) { 536 assert(Token.is(MIToken::kw_successors)); 537 lex(); 538 if (expectAndConsume(MIToken::colon)) 539 return true; 540 if (Token.isNewlineOrEOF()) // Allow an empty list of successors. 541 return false; 542 do { 543 if (Token.isNot(MIToken::MachineBasicBlock)) 544 return error("expected a machine basic block reference"); 545 MachineBasicBlock *SuccMBB = nullptr; 546 if (parseMBBReference(SuccMBB)) 547 return true; 548 lex(); 549 unsigned Weight = 0; 550 if (consumeIfPresent(MIToken::lparen)) { 551 if (Token.isNot(MIToken::IntegerLiteral) && 552 Token.isNot(MIToken::HexLiteral)) 553 return error("expected an integer literal after '('"); 554 if (getUnsigned(Weight)) 555 return true; 556 lex(); 557 if (expectAndConsume(MIToken::rparen)) 558 return true; 559 } 560 MBB.addSuccessor(SuccMBB, BranchProbability::getRaw(Weight)); 561 } while (consumeIfPresent(MIToken::comma)); 562 MBB.normalizeSuccProbs(); 563 return false; 564 } 565 566 bool MIParser::parseBasicBlock(MachineBasicBlock &MBB, 567 MachineBasicBlock *&AddFalthroughFrom) { 568 // Skip the definition. 569 assert(Token.is(MIToken::MachineBasicBlockLabel)); 570 lex(); 571 if (consumeIfPresent(MIToken::lparen)) { 572 while (Token.isNot(MIToken::rparen) && !Token.isErrorOrEOF()) 573 lex(); 574 consumeIfPresent(MIToken::rparen); 575 } 576 consumeIfPresent(MIToken::colon); 577 578 // Parse the liveins and successors. 579 // N.B: Multiple lists of successors and liveins are allowed and they're 580 // merged into one. 581 // Example: 582 // liveins: %edi 583 // liveins: %esi 584 // 585 // is equivalent to 586 // liveins: %edi, %esi 587 bool ExplicitSuccessors = false; 588 while (true) { 589 if (Token.is(MIToken::kw_successors)) { 590 if (parseBasicBlockSuccessors(MBB)) 591 return true; 592 ExplicitSuccessors = true; 593 } else if (Token.is(MIToken::kw_liveins)) { 594 if (parseBasicBlockLiveins(MBB)) 595 return true; 596 } else if (consumeIfPresent(MIToken::Newline)) { 597 continue; 598 } else 599 break; 600 if (!Token.isNewlineOrEOF()) 601 return error("expected line break at the end of a list"); 602 lex(); 603 } 604 605 // Parse the instructions. 606 bool IsInBundle = false; 607 MachineInstr *PrevMI = nullptr; 608 while (!Token.is(MIToken::MachineBasicBlockLabel) && 609 !Token.is(MIToken::Eof)) { 610 if (consumeIfPresent(MIToken::Newline)) 611 continue; 612 if (consumeIfPresent(MIToken::rbrace)) { 613 // The first parsing pass should verify that all closing '}' have an 614 // opening '{'. 615 assert(IsInBundle); 616 IsInBundle = false; 617 continue; 618 } 619 MachineInstr *MI = nullptr; 620 if (parse(MI)) 621 return true; 622 MBB.insert(MBB.end(), MI); 623 if (IsInBundle) { 624 PrevMI->setFlag(MachineInstr::BundledSucc); 625 MI->setFlag(MachineInstr::BundledPred); 626 } 627 PrevMI = MI; 628 if (Token.is(MIToken::lbrace)) { 629 if (IsInBundle) 630 return error("nested instruction bundles are not allowed"); 631 lex(); 632 // This instruction is the start of the bundle. 633 MI->setFlag(MachineInstr::BundledSucc); 634 IsInBundle = true; 635 if (!Token.is(MIToken::Newline)) 636 // The next instruction can be on the same line. 637 continue; 638 } 639 assert(Token.isNewlineOrEOF() && "MI is not fully parsed"); 640 lex(); 641 } 642 643 // Construct successor list by searching for basic block machine operands. 644 if (!ExplicitSuccessors) { 645 SmallVector<MachineBasicBlock*,4> Successors; 646 bool IsFallthrough; 647 guessSuccessors(MBB, Successors, IsFallthrough); 648 for (MachineBasicBlock *Succ : Successors) 649 MBB.addSuccessor(Succ); 650 651 if (IsFallthrough) { 652 AddFalthroughFrom = &MBB; 653 } else { 654 MBB.normalizeSuccProbs(); 655 } 656 } 657 658 return false; 659 } 660 661 bool MIParser::parseBasicBlocks() { 662 lex(); 663 // Skip until the first machine basic block. 664 while (Token.is(MIToken::Newline)) 665 lex(); 666 if (Token.isErrorOrEOF()) 667 return Token.isError(); 668 // The first parsing pass should have verified that this token is a MBB label 669 // in the 'parseBasicBlockDefinitions' method. 670 assert(Token.is(MIToken::MachineBasicBlockLabel)); 671 MachineBasicBlock *AddFalthroughFrom = nullptr; 672 do { 673 MachineBasicBlock *MBB = nullptr; 674 if (parseMBBReference(MBB)) 675 return true; 676 if (AddFalthroughFrom) { 677 if (!AddFalthroughFrom->isSuccessor(MBB)) 678 AddFalthroughFrom->addSuccessor(MBB); 679 AddFalthroughFrom->normalizeSuccProbs(); 680 AddFalthroughFrom = nullptr; 681 } 682 if (parseBasicBlock(*MBB, AddFalthroughFrom)) 683 return true; 684 // The method 'parseBasicBlock' should parse the whole block until the next 685 // block or the end of file. 686 assert(Token.is(MIToken::MachineBasicBlockLabel) || Token.is(MIToken::Eof)); 687 } while (Token.isNot(MIToken::Eof)); 688 return false; 689 } 690 691 bool MIParser::parse(MachineInstr *&MI) { 692 // Parse any register operands before '=' 693 MachineOperand MO = MachineOperand::CreateImm(0); 694 SmallVector<ParsedMachineOperand, 8> Operands; 695 while (Token.isRegister() || Token.isRegisterFlag()) { 696 auto Loc = Token.location(); 697 Optional<unsigned> TiedDefIdx; 698 if (parseRegisterOperand(MO, TiedDefIdx, /*IsDef=*/true)) 699 return true; 700 Operands.push_back( 701 ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx)); 702 if (Token.isNot(MIToken::comma)) 703 break; 704 lex(); 705 } 706 if (!Operands.empty() && expectAndConsume(MIToken::equal)) 707 return true; 708 709 unsigned OpCode, Flags = 0; 710 if (Token.isError() || parseInstruction(OpCode, Flags)) 711 return true; 712 713 // Parse the remaining machine operands. 714 while (!Token.isNewlineOrEOF() && Token.isNot(MIToken::kw_debug_location) && 715 Token.isNot(MIToken::coloncolon) && Token.isNot(MIToken::lbrace)) { 716 auto Loc = Token.location(); 717 Optional<unsigned> TiedDefIdx; 718 if (parseMachineOperandAndTargetFlags(MO, TiedDefIdx)) 719 return true; 720 Operands.push_back( 721 ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx)); 722 if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) || 723 Token.is(MIToken::lbrace)) 724 break; 725 if (Token.isNot(MIToken::comma)) 726 return error("expected ',' before the next machine operand"); 727 lex(); 728 } 729 730 DebugLoc DebugLocation; 731 if (Token.is(MIToken::kw_debug_location)) { 732 lex(); 733 if (Token.isNot(MIToken::exclaim)) 734 return error("expected a metadata node after 'debug-location'"); 735 MDNode *Node = nullptr; 736 if (parseMDNode(Node)) 737 return true; 738 DebugLocation = DebugLoc(Node); 739 } 740 741 // Parse the machine memory operands. 742 SmallVector<MachineMemOperand *, 2> MemOperands; 743 if (Token.is(MIToken::coloncolon)) { 744 lex(); 745 while (!Token.isNewlineOrEOF()) { 746 MachineMemOperand *MemOp = nullptr; 747 if (parseMachineMemoryOperand(MemOp)) 748 return true; 749 MemOperands.push_back(MemOp); 750 if (Token.isNewlineOrEOF()) 751 break; 752 if (Token.isNot(MIToken::comma)) 753 return error("expected ',' before the next machine memory operand"); 754 lex(); 755 } 756 } 757 758 const auto &MCID = MF.getSubtarget().getInstrInfo()->get(OpCode); 759 if (!MCID.isVariadic()) { 760 // FIXME: Move the implicit operand verification to the machine verifier. 761 if (verifyImplicitOperands(Operands, MCID)) 762 return true; 763 } 764 765 // TODO: Check for extraneous machine operands. 766 MI = MF.CreateMachineInstr(MCID, DebugLocation, /*NoImplicit=*/true); 767 MI->setFlags(Flags); 768 for (const auto &Operand : Operands) 769 MI->addOperand(MF, Operand.Operand); 770 if (assignRegisterTies(*MI, Operands)) 771 return true; 772 if (MemOperands.empty()) 773 return false; 774 MachineInstr::mmo_iterator MemRefs = 775 MF.allocateMemRefsArray(MemOperands.size()); 776 std::copy(MemOperands.begin(), MemOperands.end(), MemRefs); 777 MI->setMemRefs(MemRefs, MemRefs + MemOperands.size()); 778 return false; 779 } 780 781 bool MIParser::parseStandaloneMBB(MachineBasicBlock *&MBB) { 782 lex(); 783 if (Token.isNot(MIToken::MachineBasicBlock)) 784 return error("expected a machine basic block reference"); 785 if (parseMBBReference(MBB)) 786 return true; 787 lex(); 788 if (Token.isNot(MIToken::Eof)) 789 return error( 790 "expected end of string after the machine basic block reference"); 791 return false; 792 } 793 794 bool MIParser::parseStandaloneNamedRegister(unsigned &Reg) { 795 lex(); 796 if (Token.isNot(MIToken::NamedRegister)) 797 return error("expected a named register"); 798 if (parseNamedRegister(Reg)) 799 return true; 800 lex(); 801 if (Token.isNot(MIToken::Eof)) 802 return error("expected end of string after the register reference"); 803 return false; 804 } 805 806 bool MIParser::parseStandaloneVirtualRegister(VRegInfo *&Info) { 807 lex(); 808 if (Token.isNot(MIToken::VirtualRegister)) 809 return error("expected a virtual register"); 810 if (parseVirtualRegister(Info)) 811 return true; 812 lex(); 813 if (Token.isNot(MIToken::Eof)) 814 return error("expected end of string after the register reference"); 815 return false; 816 } 817 818 bool MIParser::parseStandaloneRegister(unsigned &Reg) { 819 lex(); 820 if (Token.isNot(MIToken::NamedRegister) && 821 Token.isNot(MIToken::VirtualRegister)) 822 return error("expected either a named or virtual register"); 823 824 VRegInfo *Info; 825 if (parseRegister(Reg, Info)) 826 return true; 827 828 lex(); 829 if (Token.isNot(MIToken::Eof)) 830 return error("expected end of string after the register reference"); 831 return false; 832 } 833 834 bool MIParser::parseStandaloneStackObject(int &FI) { 835 lex(); 836 if (Token.isNot(MIToken::StackObject)) 837 return error("expected a stack object"); 838 if (parseStackFrameIndex(FI)) 839 return true; 840 if (Token.isNot(MIToken::Eof)) 841 return error("expected end of string after the stack object reference"); 842 return false; 843 } 844 845 bool MIParser::parseStandaloneMDNode(MDNode *&Node) { 846 lex(); 847 if (Token.isNot(MIToken::exclaim)) 848 return error("expected a metadata node"); 849 if (parseMDNode(Node)) 850 return true; 851 if (Token.isNot(MIToken::Eof)) 852 return error("expected end of string after the metadata node"); 853 return false; 854 } 855 856 static const char *printImplicitRegisterFlag(const MachineOperand &MO) { 857 assert(MO.isImplicit()); 858 return MO.isDef() ? "implicit-def" : "implicit"; 859 } 860 861 static std::string getRegisterName(const TargetRegisterInfo *TRI, 862 unsigned Reg) { 863 assert(TargetRegisterInfo::isPhysicalRegister(Reg) && "expected phys reg"); 864 return StringRef(TRI->getName(Reg)).lower(); 865 } 866 867 /// Return true if the parsed machine operands contain a given machine operand. 868 static bool isImplicitOperandIn(const MachineOperand &ImplicitOperand, 869 ArrayRef<ParsedMachineOperand> Operands) { 870 for (const auto &I : Operands) { 871 if (ImplicitOperand.isIdenticalTo(I.Operand)) 872 return true; 873 } 874 return false; 875 } 876 877 bool MIParser::verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands, 878 const MCInstrDesc &MCID) { 879 if (MCID.isCall()) 880 // We can't verify call instructions as they can contain arbitrary implicit 881 // register and register mask operands. 882 return false; 883 884 // Gather all the expected implicit operands. 885 SmallVector<MachineOperand, 4> ImplicitOperands; 886 if (MCID.ImplicitDefs) 887 for (const MCPhysReg *ImpDefs = MCID.getImplicitDefs(); *ImpDefs; ++ImpDefs) 888 ImplicitOperands.push_back( 889 MachineOperand::CreateReg(*ImpDefs, true, true)); 890 if (MCID.ImplicitUses) 891 for (const MCPhysReg *ImpUses = MCID.getImplicitUses(); *ImpUses; ++ImpUses) 892 ImplicitOperands.push_back( 893 MachineOperand::CreateReg(*ImpUses, false, true)); 894 895 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 896 assert(TRI && "Expected target register info"); 897 for (const auto &I : ImplicitOperands) { 898 if (isImplicitOperandIn(I, Operands)) 899 continue; 900 return error(Operands.empty() ? Token.location() : Operands.back().End, 901 Twine("missing implicit register operand '") + 902 printImplicitRegisterFlag(I) + " %" + 903 getRegisterName(TRI, I.getReg()) + "'"); 904 } 905 return false; 906 } 907 908 bool MIParser::parseInstruction(unsigned &OpCode, unsigned &Flags) { 909 if (Token.is(MIToken::kw_frame_setup)) { 910 Flags |= MachineInstr::FrameSetup; 911 lex(); 912 } 913 if (Token.isNot(MIToken::Identifier)) 914 return error("expected a machine instruction"); 915 StringRef InstrName = Token.stringValue(); 916 if (parseInstrName(InstrName, OpCode)) 917 return error(Twine("unknown machine instruction name '") + InstrName + "'"); 918 lex(); 919 return false; 920 } 921 922 bool MIParser::parseNamedRegister(unsigned &Reg) { 923 assert(Token.is(MIToken::NamedRegister) && "Needs NamedRegister token"); 924 StringRef Name = Token.stringValue(); 925 if (getRegisterByName(Name, Reg)) 926 return error(Twine("unknown register name '") + Name + "'"); 927 return false; 928 } 929 930 bool MIParser::parseVirtualRegister(VRegInfo *&Info) { 931 assert(Token.is(MIToken::VirtualRegister) && "Needs VirtualRegister token"); 932 unsigned ID; 933 if (getUnsigned(ID)) 934 return true; 935 Info = &PFS.getVRegInfo(ID); 936 return false; 937 } 938 939 bool MIParser::parseRegister(unsigned &Reg, VRegInfo *&Info) { 940 switch (Token.kind()) { 941 case MIToken::underscore: 942 Reg = 0; 943 return false; 944 case MIToken::NamedRegister: 945 return parseNamedRegister(Reg); 946 case MIToken::VirtualRegister: 947 if (parseVirtualRegister(Info)) 948 return true; 949 Reg = Info->VReg; 950 return false; 951 // TODO: Parse other register kinds. 952 default: 953 llvm_unreachable("The current token should be a register"); 954 } 955 } 956 957 bool MIParser::parseRegisterClassOrBank(VRegInfo &RegInfo) { 958 if (Token.isNot(MIToken::Identifier) && Token.isNot(MIToken::underscore)) 959 return error("expected '_', register class, or register bank name"); 960 StringRef::iterator Loc = Token.location(); 961 StringRef Name = Token.stringValue(); 962 963 // Was it a register class? 964 auto RCNameI = PFS.Names2RegClasses.find(Name); 965 if (RCNameI != PFS.Names2RegClasses.end()) { 966 lex(); 967 const TargetRegisterClass &RC = *RCNameI->getValue(); 968 969 switch (RegInfo.Kind) { 970 case VRegInfo::UNKNOWN: 971 case VRegInfo::NORMAL: 972 RegInfo.Kind = VRegInfo::NORMAL; 973 if (RegInfo.Explicit && RegInfo.D.RC != &RC) { 974 const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo(); 975 return error(Loc, Twine("conflicting register classes, previously: ") + 976 Twine(TRI.getRegClassName(RegInfo.D.RC))); 977 } 978 RegInfo.D.RC = &RC; 979 RegInfo.Explicit = true; 980 return false; 981 982 case VRegInfo::GENERIC: 983 case VRegInfo::REGBANK: 984 return error(Loc, "register class specification on generic register"); 985 } 986 llvm_unreachable("Unexpected register kind"); 987 } 988 989 // Should be a register bank or a generic register. 990 const RegisterBank *RegBank = nullptr; 991 if (Name != "_") { 992 auto RBNameI = PFS.Names2RegBanks.find(Name); 993 if (RBNameI == PFS.Names2RegBanks.end()) 994 return error(Loc, "expected '_', register class, or register bank name"); 995 RegBank = RBNameI->getValue(); 996 } 997 998 lex(); 999 1000 switch (RegInfo.Kind) { 1001 case VRegInfo::UNKNOWN: 1002 case VRegInfo::GENERIC: 1003 case VRegInfo::REGBANK: 1004 RegInfo.Kind = RegBank ? VRegInfo::REGBANK : VRegInfo::GENERIC; 1005 if (RegInfo.Explicit && RegInfo.D.RegBank != RegBank) 1006 return error(Loc, "conflicting generic register banks"); 1007 RegInfo.D.RegBank = RegBank; 1008 RegInfo.Explicit = true; 1009 return false; 1010 1011 case VRegInfo::NORMAL: 1012 return error(Loc, "register bank specification on normal register"); 1013 } 1014 llvm_unreachable("Unexpected register kind"); 1015 } 1016 1017 bool MIParser::parseRegisterFlag(unsigned &Flags) { 1018 const unsigned OldFlags = Flags; 1019 switch (Token.kind()) { 1020 case MIToken::kw_implicit: 1021 Flags |= RegState::Implicit; 1022 break; 1023 case MIToken::kw_implicit_define: 1024 Flags |= RegState::ImplicitDefine; 1025 break; 1026 case MIToken::kw_def: 1027 Flags |= RegState::Define; 1028 break; 1029 case MIToken::kw_dead: 1030 Flags |= RegState::Dead; 1031 break; 1032 case MIToken::kw_killed: 1033 Flags |= RegState::Kill; 1034 break; 1035 case MIToken::kw_undef: 1036 Flags |= RegState::Undef; 1037 break; 1038 case MIToken::kw_internal: 1039 Flags |= RegState::InternalRead; 1040 break; 1041 case MIToken::kw_early_clobber: 1042 Flags |= RegState::EarlyClobber; 1043 break; 1044 case MIToken::kw_debug_use: 1045 Flags |= RegState::Debug; 1046 break; 1047 default: 1048 llvm_unreachable("The current token should be a register flag"); 1049 } 1050 if (OldFlags == Flags) 1051 // We know that the same flag is specified more than once when the flags 1052 // weren't modified. 1053 return error("duplicate '" + Token.stringValue() + "' register flag"); 1054 lex(); 1055 return false; 1056 } 1057 1058 bool MIParser::parseSubRegisterIndex(unsigned &SubReg) { 1059 assert(Token.is(MIToken::dot)); 1060 lex(); 1061 if (Token.isNot(MIToken::Identifier)) 1062 return error("expected a subregister index after '.'"); 1063 auto Name = Token.stringValue(); 1064 SubReg = getSubRegIndex(Name); 1065 if (!SubReg) 1066 return error(Twine("use of unknown subregister index '") + Name + "'"); 1067 lex(); 1068 return false; 1069 } 1070 1071 bool MIParser::parseRegisterTiedDefIndex(unsigned &TiedDefIdx) { 1072 if (!consumeIfPresent(MIToken::kw_tied_def)) 1073 return true; 1074 if (Token.isNot(MIToken::IntegerLiteral)) 1075 return error("expected an integer literal after 'tied-def'"); 1076 if (getUnsigned(TiedDefIdx)) 1077 return true; 1078 lex(); 1079 if (expectAndConsume(MIToken::rparen)) 1080 return true; 1081 return false; 1082 } 1083 1084 bool MIParser::assignRegisterTies(MachineInstr &MI, 1085 ArrayRef<ParsedMachineOperand> Operands) { 1086 SmallVector<std::pair<unsigned, unsigned>, 4> TiedRegisterPairs; 1087 for (unsigned I = 0, E = Operands.size(); I != E; ++I) { 1088 if (!Operands[I].TiedDefIdx) 1089 continue; 1090 // The parser ensures that this operand is a register use, so we just have 1091 // to check the tied-def operand. 1092 unsigned DefIdx = Operands[I].TiedDefIdx.getValue(); 1093 if (DefIdx >= E) 1094 return error(Operands[I].Begin, 1095 Twine("use of invalid tied-def operand index '" + 1096 Twine(DefIdx) + "'; instruction has only ") + 1097 Twine(E) + " operands"); 1098 const auto &DefOperand = Operands[DefIdx].Operand; 1099 if (!DefOperand.isReg() || !DefOperand.isDef()) 1100 // FIXME: add note with the def operand. 1101 return error(Operands[I].Begin, 1102 Twine("use of invalid tied-def operand index '") + 1103 Twine(DefIdx) + "'; the operand #" + Twine(DefIdx) + 1104 " isn't a defined register"); 1105 // Check that the tied-def operand wasn't tied elsewhere. 1106 for (const auto &TiedPair : TiedRegisterPairs) { 1107 if (TiedPair.first == DefIdx) 1108 return error(Operands[I].Begin, 1109 Twine("the tied-def operand #") + Twine(DefIdx) + 1110 " is already tied with another register operand"); 1111 } 1112 TiedRegisterPairs.push_back(std::make_pair(DefIdx, I)); 1113 } 1114 // FIXME: Verify that for non INLINEASM instructions, the def and use tied 1115 // indices must be less than tied max. 1116 for (const auto &TiedPair : TiedRegisterPairs) 1117 MI.tieOperands(TiedPair.first, TiedPair.second); 1118 return false; 1119 } 1120 1121 bool MIParser::parseRegisterOperand(MachineOperand &Dest, 1122 Optional<unsigned> &TiedDefIdx, 1123 bool IsDef) { 1124 unsigned Flags = IsDef ? RegState::Define : 0; 1125 while (Token.isRegisterFlag()) { 1126 if (parseRegisterFlag(Flags)) 1127 return true; 1128 } 1129 if (!Token.isRegister()) 1130 return error("expected a register after register flags"); 1131 unsigned Reg; 1132 VRegInfo *RegInfo; 1133 if (parseRegister(Reg, RegInfo)) 1134 return true; 1135 lex(); 1136 unsigned SubReg = 0; 1137 if (Token.is(MIToken::dot)) { 1138 if (parseSubRegisterIndex(SubReg)) 1139 return true; 1140 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 1141 return error("subregister index expects a virtual register"); 1142 } 1143 if (Token.is(MIToken::colon)) { 1144 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 1145 return error("register class specification expects a virtual register"); 1146 lex(); 1147 if (parseRegisterClassOrBank(*RegInfo)) 1148 return true; 1149 } 1150 MachineRegisterInfo &MRI = MF.getRegInfo(); 1151 if ((Flags & RegState::Define) == 0) { 1152 if (consumeIfPresent(MIToken::lparen)) { 1153 unsigned Idx; 1154 if (!parseRegisterTiedDefIndex(Idx)) 1155 TiedDefIdx = Idx; 1156 else { 1157 // Try a redundant low-level type. 1158 LLT Ty; 1159 if (parseLowLevelType(Token.location(), Ty)) 1160 return error("expected tied-def or low-level type after '('"); 1161 1162 if (expectAndConsume(MIToken::rparen)) 1163 return true; 1164 1165 if (MRI.getType(Reg).isValid() && MRI.getType(Reg) != Ty) 1166 return error("inconsistent type for generic virtual register"); 1167 1168 MRI.setType(Reg, Ty); 1169 } 1170 } 1171 } else if (consumeIfPresent(MIToken::lparen)) { 1172 // Virtual registers may have a tpe with GlobalISel. 1173 if (!TargetRegisterInfo::isVirtualRegister(Reg)) 1174 return error("unexpected type on physical register"); 1175 1176 LLT Ty; 1177 if (parseLowLevelType(Token.location(), Ty)) 1178 return true; 1179 1180 if (expectAndConsume(MIToken::rparen)) 1181 return true; 1182 1183 if (MRI.getType(Reg).isValid() && MRI.getType(Reg) != Ty) 1184 return error("inconsistent type for generic virtual register"); 1185 1186 MRI.setType(Reg, Ty); 1187 } else if (TargetRegisterInfo::isVirtualRegister(Reg)) { 1188 // Generic virtual registers must have a type. 1189 // If we end up here this means the type hasn't been specified and 1190 // this is bad! 1191 if (RegInfo->Kind == VRegInfo::GENERIC || 1192 RegInfo->Kind == VRegInfo::REGBANK) 1193 return error("generic virtual registers must have a type"); 1194 } 1195 Dest = MachineOperand::CreateReg( 1196 Reg, Flags & RegState::Define, Flags & RegState::Implicit, 1197 Flags & RegState::Kill, Flags & RegState::Dead, Flags & RegState::Undef, 1198 Flags & RegState::EarlyClobber, SubReg, Flags & RegState::Debug, 1199 Flags & RegState::InternalRead); 1200 return false; 1201 } 1202 1203 bool MIParser::parseImmediateOperand(MachineOperand &Dest) { 1204 assert(Token.is(MIToken::IntegerLiteral)); 1205 const APSInt &Int = Token.integerValue(); 1206 if (Int.getMinSignedBits() > 64) 1207 return error("integer literal is too large to be an immediate operand"); 1208 Dest = MachineOperand::CreateImm(Int.getExtValue()); 1209 lex(); 1210 return false; 1211 } 1212 1213 bool MIParser::parseIRConstant(StringRef::iterator Loc, StringRef StringValue, 1214 const Constant *&C) { 1215 auto Source = StringValue.str(); // The source has to be null terminated. 1216 SMDiagnostic Err; 1217 C = parseConstantValue(Source, Err, *MF.getFunction()->getParent(), 1218 &PFS.IRSlots); 1219 if (!C) 1220 return error(Loc + Err.getColumnNo(), Err.getMessage()); 1221 return false; 1222 } 1223 1224 bool MIParser::parseIRConstant(StringRef::iterator Loc, const Constant *&C) { 1225 if (parseIRConstant(Loc, StringRef(Loc, Token.range().end() - Loc), C)) 1226 return true; 1227 lex(); 1228 return false; 1229 } 1230 1231 bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) { 1232 if (Token.is(MIToken::ScalarType)) { 1233 Ty = LLT::scalar(APSInt(Token.range().drop_front()).getZExtValue()); 1234 lex(); 1235 return false; 1236 } else if (Token.is(MIToken::PointerType)) { 1237 const DataLayout &DL = MF.getFunction()->getParent()->getDataLayout(); 1238 unsigned AS = APSInt(Token.range().drop_front()).getZExtValue(); 1239 Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS)); 1240 lex(); 1241 return false; 1242 } 1243 1244 // Now we're looking for a vector. 1245 if (Token.isNot(MIToken::less)) 1246 return error(Loc, 1247 "expected unsized, pN, sN or <N x sM> for GlobalISel type"); 1248 1249 lex(); 1250 1251 if (Token.isNot(MIToken::IntegerLiteral)) 1252 return error(Loc, "expected <N x sM> for vctor type"); 1253 uint64_t NumElements = Token.integerValue().getZExtValue(); 1254 lex(); 1255 1256 if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x") 1257 return error(Loc, "expected '<N x sM>' for vector type"); 1258 lex(); 1259 1260 if (Token.isNot(MIToken::ScalarType)) 1261 return error(Loc, "expected '<N x sM>' for vector type"); 1262 uint64_t ScalarSize = APSInt(Token.range().drop_front()).getZExtValue(); 1263 lex(); 1264 1265 if (Token.isNot(MIToken::greater)) 1266 return error(Loc, "expected '<N x sM>' for vector type"); 1267 lex(); 1268 1269 Ty = LLT::vector(NumElements, ScalarSize); 1270 return false; 1271 } 1272 1273 bool MIParser::parseTypedImmediateOperand(MachineOperand &Dest) { 1274 assert(Token.is(MIToken::IntegerType)); 1275 auto Loc = Token.location(); 1276 lex(); 1277 if (Token.isNot(MIToken::IntegerLiteral)) 1278 return error("expected an integer literal"); 1279 const Constant *C = nullptr; 1280 if (parseIRConstant(Loc, C)) 1281 return true; 1282 Dest = MachineOperand::CreateCImm(cast<ConstantInt>(C)); 1283 return false; 1284 } 1285 1286 bool MIParser::parseFPImmediateOperand(MachineOperand &Dest) { 1287 auto Loc = Token.location(); 1288 lex(); 1289 if (Token.isNot(MIToken::FloatingPointLiteral) && 1290 Token.isNot(MIToken::HexLiteral)) 1291 return error("expected a floating point literal"); 1292 const Constant *C = nullptr; 1293 if (parseIRConstant(Loc, C)) 1294 return true; 1295 Dest = MachineOperand::CreateFPImm(cast<ConstantFP>(C)); 1296 return false; 1297 } 1298 1299 bool MIParser::getUnsigned(unsigned &Result) { 1300 if (Token.hasIntegerValue()) { 1301 const uint64_t Limit = uint64_t(std::numeric_limits<unsigned>::max()) + 1; 1302 uint64_t Val64 = Token.integerValue().getLimitedValue(Limit); 1303 if (Val64 == Limit) 1304 return error("expected 32-bit integer (too large)"); 1305 Result = Val64; 1306 return false; 1307 } 1308 if (Token.is(MIToken::HexLiteral)) { 1309 APInt A; 1310 if (getHexUint(A)) 1311 return true; 1312 if (A.getBitWidth() > 32) 1313 return error("expected 32-bit integer (too large)"); 1314 Result = A.getZExtValue(); 1315 return false; 1316 } 1317 return true; 1318 } 1319 1320 bool MIParser::parseMBBReference(MachineBasicBlock *&MBB) { 1321 assert(Token.is(MIToken::MachineBasicBlock) || 1322 Token.is(MIToken::MachineBasicBlockLabel)); 1323 unsigned Number; 1324 if (getUnsigned(Number)) 1325 return true; 1326 auto MBBInfo = PFS.MBBSlots.find(Number); 1327 if (MBBInfo == PFS.MBBSlots.end()) 1328 return error(Twine("use of undefined machine basic block #") + 1329 Twine(Number)); 1330 MBB = MBBInfo->second; 1331 if (!Token.stringValue().empty() && Token.stringValue() != MBB->getName()) 1332 return error(Twine("the name of machine basic block #") + Twine(Number) + 1333 " isn't '" + Token.stringValue() + "'"); 1334 return false; 1335 } 1336 1337 bool MIParser::parseMBBOperand(MachineOperand &Dest) { 1338 MachineBasicBlock *MBB; 1339 if (parseMBBReference(MBB)) 1340 return true; 1341 Dest = MachineOperand::CreateMBB(MBB); 1342 lex(); 1343 return false; 1344 } 1345 1346 bool MIParser::parseStackFrameIndex(int &FI) { 1347 assert(Token.is(MIToken::StackObject)); 1348 unsigned ID; 1349 if (getUnsigned(ID)) 1350 return true; 1351 auto ObjectInfo = PFS.StackObjectSlots.find(ID); 1352 if (ObjectInfo == PFS.StackObjectSlots.end()) 1353 return error(Twine("use of undefined stack object '%stack.") + Twine(ID) + 1354 "'"); 1355 StringRef Name; 1356 if (const auto *Alloca = 1357 MF.getFrameInfo().getObjectAllocation(ObjectInfo->second)) 1358 Name = Alloca->getName(); 1359 if (!Token.stringValue().empty() && Token.stringValue() != Name) 1360 return error(Twine("the name of the stack object '%stack.") + Twine(ID) + 1361 "' isn't '" + Token.stringValue() + "'"); 1362 lex(); 1363 FI = ObjectInfo->second; 1364 return false; 1365 } 1366 1367 bool MIParser::parseStackObjectOperand(MachineOperand &Dest) { 1368 int FI; 1369 if (parseStackFrameIndex(FI)) 1370 return true; 1371 Dest = MachineOperand::CreateFI(FI); 1372 return false; 1373 } 1374 1375 bool MIParser::parseFixedStackFrameIndex(int &FI) { 1376 assert(Token.is(MIToken::FixedStackObject)); 1377 unsigned ID; 1378 if (getUnsigned(ID)) 1379 return true; 1380 auto ObjectInfo = PFS.FixedStackObjectSlots.find(ID); 1381 if (ObjectInfo == PFS.FixedStackObjectSlots.end()) 1382 return error(Twine("use of undefined fixed stack object '%fixed-stack.") + 1383 Twine(ID) + "'"); 1384 lex(); 1385 FI = ObjectInfo->second; 1386 return false; 1387 } 1388 1389 bool MIParser::parseFixedStackObjectOperand(MachineOperand &Dest) { 1390 int FI; 1391 if (parseFixedStackFrameIndex(FI)) 1392 return true; 1393 Dest = MachineOperand::CreateFI(FI); 1394 return false; 1395 } 1396 1397 bool MIParser::parseGlobalValue(GlobalValue *&GV) { 1398 switch (Token.kind()) { 1399 case MIToken::NamedGlobalValue: { 1400 const Module *M = MF.getFunction()->getParent(); 1401 GV = M->getNamedValue(Token.stringValue()); 1402 if (!GV) 1403 return error(Twine("use of undefined global value '") + Token.range() + 1404 "'"); 1405 break; 1406 } 1407 case MIToken::GlobalValue: { 1408 unsigned GVIdx; 1409 if (getUnsigned(GVIdx)) 1410 return true; 1411 if (GVIdx >= PFS.IRSlots.GlobalValues.size()) 1412 return error(Twine("use of undefined global value '@") + Twine(GVIdx) + 1413 "'"); 1414 GV = PFS.IRSlots.GlobalValues[GVIdx]; 1415 break; 1416 } 1417 default: 1418 llvm_unreachable("The current token should be a global value"); 1419 } 1420 return false; 1421 } 1422 1423 bool MIParser::parseGlobalAddressOperand(MachineOperand &Dest) { 1424 GlobalValue *GV = nullptr; 1425 if (parseGlobalValue(GV)) 1426 return true; 1427 lex(); 1428 Dest = MachineOperand::CreateGA(GV, /*Offset=*/0); 1429 if (parseOperandsOffset(Dest)) 1430 return true; 1431 return false; 1432 } 1433 1434 bool MIParser::parseConstantPoolIndexOperand(MachineOperand &Dest) { 1435 assert(Token.is(MIToken::ConstantPoolItem)); 1436 unsigned ID; 1437 if (getUnsigned(ID)) 1438 return true; 1439 auto ConstantInfo = PFS.ConstantPoolSlots.find(ID); 1440 if (ConstantInfo == PFS.ConstantPoolSlots.end()) 1441 return error("use of undefined constant '%const." + Twine(ID) + "'"); 1442 lex(); 1443 Dest = MachineOperand::CreateCPI(ID, /*Offset=*/0); 1444 if (parseOperandsOffset(Dest)) 1445 return true; 1446 return false; 1447 } 1448 1449 bool MIParser::parseJumpTableIndexOperand(MachineOperand &Dest) { 1450 assert(Token.is(MIToken::JumpTableIndex)); 1451 unsigned ID; 1452 if (getUnsigned(ID)) 1453 return true; 1454 auto JumpTableEntryInfo = PFS.JumpTableSlots.find(ID); 1455 if (JumpTableEntryInfo == PFS.JumpTableSlots.end()) 1456 return error("use of undefined jump table '%jump-table." + Twine(ID) + "'"); 1457 lex(); 1458 Dest = MachineOperand::CreateJTI(JumpTableEntryInfo->second); 1459 return false; 1460 } 1461 1462 bool MIParser::parseExternalSymbolOperand(MachineOperand &Dest) { 1463 assert(Token.is(MIToken::ExternalSymbol)); 1464 const char *Symbol = MF.createExternalSymbolName(Token.stringValue()); 1465 lex(); 1466 Dest = MachineOperand::CreateES(Symbol); 1467 if (parseOperandsOffset(Dest)) 1468 return true; 1469 return false; 1470 } 1471 1472 bool MIParser::parseSubRegisterIndexOperand(MachineOperand &Dest) { 1473 assert(Token.is(MIToken::SubRegisterIndex)); 1474 StringRef Name = Token.stringValue(); 1475 unsigned SubRegIndex = getSubRegIndex(Token.stringValue()); 1476 if (SubRegIndex == 0) 1477 return error(Twine("unknown subregister index '") + Name + "'"); 1478 lex(); 1479 Dest = MachineOperand::CreateImm(SubRegIndex); 1480 return false; 1481 } 1482 1483 bool MIParser::parseMDNode(MDNode *&Node) { 1484 assert(Token.is(MIToken::exclaim)); 1485 auto Loc = Token.location(); 1486 lex(); 1487 if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned()) 1488 return error("expected metadata id after '!'"); 1489 unsigned ID; 1490 if (getUnsigned(ID)) 1491 return true; 1492 auto NodeInfo = PFS.IRSlots.MetadataNodes.find(ID); 1493 if (NodeInfo == PFS.IRSlots.MetadataNodes.end()) 1494 return error(Loc, "use of undefined metadata '!" + Twine(ID) + "'"); 1495 lex(); 1496 Node = NodeInfo->second.get(); 1497 return false; 1498 } 1499 1500 bool MIParser::parseMetadataOperand(MachineOperand &Dest) { 1501 MDNode *Node = nullptr; 1502 if (parseMDNode(Node)) 1503 return true; 1504 Dest = MachineOperand::CreateMetadata(Node); 1505 return false; 1506 } 1507 1508 bool MIParser::parseCFIOffset(int &Offset) { 1509 if (Token.isNot(MIToken::IntegerLiteral)) 1510 return error("expected a cfi offset"); 1511 if (Token.integerValue().getMinSignedBits() > 32) 1512 return error("expected a 32 bit integer (the cfi offset is too large)"); 1513 Offset = (int)Token.integerValue().getExtValue(); 1514 lex(); 1515 return false; 1516 } 1517 1518 bool MIParser::parseCFIRegister(unsigned &Reg) { 1519 if (Token.isNot(MIToken::NamedRegister)) 1520 return error("expected a cfi register"); 1521 unsigned LLVMReg; 1522 if (parseNamedRegister(LLVMReg)) 1523 return true; 1524 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1525 assert(TRI && "Expected target register info"); 1526 int DwarfReg = TRI->getDwarfRegNum(LLVMReg, true); 1527 if (DwarfReg < 0) 1528 return error("invalid DWARF register"); 1529 Reg = (unsigned)DwarfReg; 1530 lex(); 1531 return false; 1532 } 1533 1534 bool MIParser::parseCFIOperand(MachineOperand &Dest) { 1535 auto Kind = Token.kind(); 1536 lex(); 1537 int Offset; 1538 unsigned Reg; 1539 unsigned CFIIndex; 1540 switch (Kind) { 1541 case MIToken::kw_cfi_same_value: 1542 if (parseCFIRegister(Reg)) 1543 return true; 1544 CFIIndex = MF.addFrameInst(MCCFIInstruction::createSameValue(nullptr, Reg)); 1545 break; 1546 case MIToken::kw_cfi_offset: 1547 if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) || 1548 parseCFIOffset(Offset)) 1549 return true; 1550 CFIIndex = 1551 MF.addFrameInst(MCCFIInstruction::createOffset(nullptr, Reg, Offset)); 1552 break; 1553 case MIToken::kw_cfi_def_cfa_register: 1554 if (parseCFIRegister(Reg)) 1555 return true; 1556 CFIIndex = 1557 MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, Reg)); 1558 break; 1559 case MIToken::kw_cfi_def_cfa_offset: 1560 if (parseCFIOffset(Offset)) 1561 return true; 1562 // NB: MCCFIInstruction::createDefCfaOffset negates the offset. 1563 CFIIndex = MF.addFrameInst( 1564 MCCFIInstruction::createDefCfaOffset(nullptr, -Offset)); 1565 break; 1566 case MIToken::kw_cfi_def_cfa: 1567 if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) || 1568 parseCFIOffset(Offset)) 1569 return true; 1570 // NB: MCCFIInstruction::createDefCfa negates the offset. 1571 CFIIndex = 1572 MF.addFrameInst(MCCFIInstruction::createDefCfa(nullptr, Reg, -Offset)); 1573 break; 1574 default: 1575 // TODO: Parse the other CFI operands. 1576 llvm_unreachable("The current token should be a cfi operand"); 1577 } 1578 Dest = MachineOperand::CreateCFIIndex(CFIIndex); 1579 return false; 1580 } 1581 1582 bool MIParser::parseIRBlock(BasicBlock *&BB, const Function &F) { 1583 switch (Token.kind()) { 1584 case MIToken::NamedIRBlock: { 1585 BB = dyn_cast_or_null<BasicBlock>( 1586 F.getValueSymbolTable()->lookup(Token.stringValue())); 1587 if (!BB) 1588 return error(Twine("use of undefined IR block '") + Token.range() + "'"); 1589 break; 1590 } 1591 case MIToken::IRBlock: { 1592 unsigned SlotNumber = 0; 1593 if (getUnsigned(SlotNumber)) 1594 return true; 1595 BB = const_cast<BasicBlock *>(getIRBlock(SlotNumber, F)); 1596 if (!BB) 1597 return error(Twine("use of undefined IR block '%ir-block.") + 1598 Twine(SlotNumber) + "'"); 1599 break; 1600 } 1601 default: 1602 llvm_unreachable("The current token should be an IR block reference"); 1603 } 1604 return false; 1605 } 1606 1607 bool MIParser::parseBlockAddressOperand(MachineOperand &Dest) { 1608 assert(Token.is(MIToken::kw_blockaddress)); 1609 lex(); 1610 if (expectAndConsume(MIToken::lparen)) 1611 return true; 1612 if (Token.isNot(MIToken::GlobalValue) && 1613 Token.isNot(MIToken::NamedGlobalValue)) 1614 return error("expected a global value"); 1615 GlobalValue *GV = nullptr; 1616 if (parseGlobalValue(GV)) 1617 return true; 1618 auto *F = dyn_cast<Function>(GV); 1619 if (!F) 1620 return error("expected an IR function reference"); 1621 lex(); 1622 if (expectAndConsume(MIToken::comma)) 1623 return true; 1624 BasicBlock *BB = nullptr; 1625 if (Token.isNot(MIToken::IRBlock) && Token.isNot(MIToken::NamedIRBlock)) 1626 return error("expected an IR block reference"); 1627 if (parseIRBlock(BB, *F)) 1628 return true; 1629 lex(); 1630 if (expectAndConsume(MIToken::rparen)) 1631 return true; 1632 Dest = MachineOperand::CreateBA(BlockAddress::get(F, BB), /*Offset=*/0); 1633 if (parseOperandsOffset(Dest)) 1634 return true; 1635 return false; 1636 } 1637 1638 bool MIParser::parseIntrinsicOperand(MachineOperand &Dest) { 1639 assert(Token.is(MIToken::kw_intrinsic)); 1640 lex(); 1641 if (expectAndConsume(MIToken::lparen)) 1642 return error("expected syntax intrinsic(@llvm.whatever)"); 1643 1644 if (Token.isNot(MIToken::NamedGlobalValue)) 1645 return error("expected syntax intrinsic(@llvm.whatever)"); 1646 1647 std::string Name = Token.stringValue(); 1648 lex(); 1649 1650 if (expectAndConsume(MIToken::rparen)) 1651 return error("expected ')' to terminate intrinsic name"); 1652 1653 // Find out what intrinsic we're dealing with, first try the global namespace 1654 // and then the target's private intrinsics if that fails. 1655 const TargetIntrinsicInfo *TII = MF.getTarget().getIntrinsicInfo(); 1656 Intrinsic::ID ID = Function::lookupIntrinsicID(Name); 1657 if (ID == Intrinsic::not_intrinsic && TII) 1658 ID = static_cast<Intrinsic::ID>(TII->lookupName(Name)); 1659 1660 if (ID == Intrinsic::not_intrinsic) 1661 return error("unknown intrinsic name"); 1662 Dest = MachineOperand::CreateIntrinsicID(ID); 1663 1664 return false; 1665 } 1666 1667 bool MIParser::parsePredicateOperand(MachineOperand &Dest) { 1668 assert(Token.is(MIToken::kw_intpred) || Token.is(MIToken::kw_floatpred)); 1669 bool IsFloat = Token.is(MIToken::kw_floatpred); 1670 lex(); 1671 1672 if (expectAndConsume(MIToken::lparen)) 1673 return error("expected syntax intpred(whatever) or floatpred(whatever"); 1674 1675 if (Token.isNot(MIToken::Identifier)) 1676 return error("whatever"); 1677 1678 CmpInst::Predicate Pred; 1679 if (IsFloat) { 1680 Pred = StringSwitch<CmpInst::Predicate>(Token.stringValue()) 1681 .Case("false", CmpInst::FCMP_FALSE) 1682 .Case("oeq", CmpInst::FCMP_OEQ) 1683 .Case("ogt", CmpInst::FCMP_OGT) 1684 .Case("oge", CmpInst::FCMP_OGE) 1685 .Case("olt", CmpInst::FCMP_OLT) 1686 .Case("ole", CmpInst::FCMP_OLE) 1687 .Case("one", CmpInst::FCMP_ONE) 1688 .Case("ord", CmpInst::FCMP_ORD) 1689 .Case("uno", CmpInst::FCMP_UNO) 1690 .Case("ueq", CmpInst::FCMP_UEQ) 1691 .Case("ugt", CmpInst::FCMP_UGT) 1692 .Case("uge", CmpInst::FCMP_UGE) 1693 .Case("ult", CmpInst::FCMP_ULT) 1694 .Case("ule", CmpInst::FCMP_ULE) 1695 .Case("une", CmpInst::FCMP_UNE) 1696 .Case("true", CmpInst::FCMP_TRUE) 1697 .Default(CmpInst::BAD_FCMP_PREDICATE); 1698 if (!CmpInst::isFPPredicate(Pred)) 1699 return error("invalid floating-point predicate"); 1700 } else { 1701 Pred = StringSwitch<CmpInst::Predicate>(Token.stringValue()) 1702 .Case("eq", CmpInst::ICMP_EQ) 1703 .Case("ne", CmpInst::ICMP_NE) 1704 .Case("sgt", CmpInst::ICMP_SGT) 1705 .Case("sge", CmpInst::ICMP_SGE) 1706 .Case("slt", CmpInst::ICMP_SLT) 1707 .Case("sle", CmpInst::ICMP_SLE) 1708 .Case("ugt", CmpInst::ICMP_UGT) 1709 .Case("uge", CmpInst::ICMP_UGE) 1710 .Case("ult", CmpInst::ICMP_ULT) 1711 .Case("ule", CmpInst::ICMP_ULE) 1712 .Default(CmpInst::BAD_ICMP_PREDICATE); 1713 if (!CmpInst::isIntPredicate(Pred)) 1714 return error("invalid integer predicate"); 1715 } 1716 1717 lex(); 1718 Dest = MachineOperand::CreatePredicate(Pred); 1719 if (expectAndConsume(MIToken::rparen)) 1720 return error("predicate should be terminated by ')'."); 1721 1722 return false; 1723 } 1724 1725 bool MIParser::parseTargetIndexOperand(MachineOperand &Dest) { 1726 assert(Token.is(MIToken::kw_target_index)); 1727 lex(); 1728 if (expectAndConsume(MIToken::lparen)) 1729 return true; 1730 if (Token.isNot(MIToken::Identifier)) 1731 return error("expected the name of the target index"); 1732 int Index = 0; 1733 if (getTargetIndex(Token.stringValue(), Index)) 1734 return error("use of undefined target index '" + Token.stringValue() + "'"); 1735 lex(); 1736 if (expectAndConsume(MIToken::rparen)) 1737 return true; 1738 Dest = MachineOperand::CreateTargetIndex(unsigned(Index), /*Offset=*/0); 1739 if (parseOperandsOffset(Dest)) 1740 return true; 1741 return false; 1742 } 1743 1744 bool MIParser::parseCustomRegisterMaskOperand(MachineOperand &Dest) { 1745 assert(Token.stringValue() == "CustomRegMask" && "Expected a custom RegMask"); 1746 const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); 1747 assert(TRI && "Expected target register info"); 1748 lex(); 1749 if (expectAndConsume(MIToken::lparen)) 1750 return true; 1751 1752 uint32_t *Mask = MF.allocateRegisterMask(TRI->getNumRegs()); 1753 while (true) { 1754 if (Token.isNot(MIToken::NamedRegister)) 1755 return error("expected a named register"); 1756 unsigned Reg; 1757 if (parseNamedRegister(Reg)) 1758 return true; 1759 lex(); 1760 Mask[Reg / 32] |= 1U << (Reg % 32); 1761 // TODO: Report an error if the same register is used more than once. 1762 if (Token.isNot(MIToken::comma)) 1763 break; 1764 lex(); 1765 } 1766 1767 if (expectAndConsume(MIToken::rparen)) 1768 return true; 1769 Dest = MachineOperand::CreateRegMask(Mask); 1770 return false; 1771 } 1772 1773 bool MIParser::parseLiveoutRegisterMaskOperand(MachineOperand &Dest) { 1774 assert(Token.is(MIToken::kw_liveout)); 1775 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 1776 assert(TRI && "Expected target register info"); 1777 uint32_t *Mask = MF.allocateRegisterMask(TRI->getNumRegs()); 1778 lex(); 1779 if (expectAndConsume(MIToken::lparen)) 1780 return true; 1781 while (true) { 1782 if (Token.isNot(MIToken::NamedRegister)) 1783 return error("expected a named register"); 1784 unsigned Reg; 1785 if (parseNamedRegister(Reg)) 1786 return true; 1787 lex(); 1788 Mask[Reg / 32] |= 1U << (Reg % 32); 1789 // TODO: Report an error if the same register is used more than once. 1790 if (Token.isNot(MIToken::comma)) 1791 break; 1792 lex(); 1793 } 1794 if (expectAndConsume(MIToken::rparen)) 1795 return true; 1796 Dest = MachineOperand::CreateRegLiveOut(Mask); 1797 return false; 1798 } 1799 1800 bool MIParser::parseMachineOperand(MachineOperand &Dest, 1801 Optional<unsigned> &TiedDefIdx) { 1802 switch (Token.kind()) { 1803 case MIToken::kw_implicit: 1804 case MIToken::kw_implicit_define: 1805 case MIToken::kw_def: 1806 case MIToken::kw_dead: 1807 case MIToken::kw_killed: 1808 case MIToken::kw_undef: 1809 case MIToken::kw_internal: 1810 case MIToken::kw_early_clobber: 1811 case MIToken::kw_debug_use: 1812 case MIToken::underscore: 1813 case MIToken::NamedRegister: 1814 case MIToken::VirtualRegister: 1815 return parseRegisterOperand(Dest, TiedDefIdx); 1816 case MIToken::IntegerLiteral: 1817 return parseImmediateOperand(Dest); 1818 case MIToken::IntegerType: 1819 return parseTypedImmediateOperand(Dest); 1820 case MIToken::kw_half: 1821 case MIToken::kw_float: 1822 case MIToken::kw_double: 1823 case MIToken::kw_x86_fp80: 1824 case MIToken::kw_fp128: 1825 case MIToken::kw_ppc_fp128: 1826 return parseFPImmediateOperand(Dest); 1827 case MIToken::MachineBasicBlock: 1828 return parseMBBOperand(Dest); 1829 case MIToken::StackObject: 1830 return parseStackObjectOperand(Dest); 1831 case MIToken::FixedStackObject: 1832 return parseFixedStackObjectOperand(Dest); 1833 case MIToken::GlobalValue: 1834 case MIToken::NamedGlobalValue: 1835 return parseGlobalAddressOperand(Dest); 1836 case MIToken::ConstantPoolItem: 1837 return parseConstantPoolIndexOperand(Dest); 1838 case MIToken::JumpTableIndex: 1839 return parseJumpTableIndexOperand(Dest); 1840 case MIToken::ExternalSymbol: 1841 return parseExternalSymbolOperand(Dest); 1842 case MIToken::SubRegisterIndex: 1843 return parseSubRegisterIndexOperand(Dest); 1844 case MIToken::exclaim: 1845 return parseMetadataOperand(Dest); 1846 case MIToken::kw_cfi_same_value: 1847 case MIToken::kw_cfi_offset: 1848 case MIToken::kw_cfi_def_cfa_register: 1849 case MIToken::kw_cfi_def_cfa_offset: 1850 case MIToken::kw_cfi_def_cfa: 1851 return parseCFIOperand(Dest); 1852 case MIToken::kw_blockaddress: 1853 return parseBlockAddressOperand(Dest); 1854 case MIToken::kw_intrinsic: 1855 return parseIntrinsicOperand(Dest); 1856 case MIToken::kw_target_index: 1857 return parseTargetIndexOperand(Dest); 1858 case MIToken::kw_liveout: 1859 return parseLiveoutRegisterMaskOperand(Dest); 1860 case MIToken::kw_floatpred: 1861 case MIToken::kw_intpred: 1862 return parsePredicateOperand(Dest); 1863 case MIToken::Error: 1864 return true; 1865 case MIToken::Identifier: 1866 if (const auto *RegMask = getRegMask(Token.stringValue())) { 1867 Dest = MachineOperand::CreateRegMask(RegMask); 1868 lex(); 1869 break; 1870 } else 1871 return parseCustomRegisterMaskOperand(Dest); 1872 default: 1873 // FIXME: Parse the MCSymbol machine operand. 1874 return error("expected a machine operand"); 1875 } 1876 return false; 1877 } 1878 1879 bool MIParser::parseMachineOperandAndTargetFlags( 1880 MachineOperand &Dest, Optional<unsigned> &TiedDefIdx) { 1881 unsigned TF = 0; 1882 bool HasTargetFlags = false; 1883 if (Token.is(MIToken::kw_target_flags)) { 1884 HasTargetFlags = true; 1885 lex(); 1886 if (expectAndConsume(MIToken::lparen)) 1887 return true; 1888 if (Token.isNot(MIToken::Identifier)) 1889 return error("expected the name of the target flag"); 1890 if (getDirectTargetFlag(Token.stringValue(), TF)) { 1891 if (getBitmaskTargetFlag(Token.stringValue(), TF)) 1892 return error("use of undefined target flag '" + Token.stringValue() + 1893 "'"); 1894 } 1895 lex(); 1896 while (Token.is(MIToken::comma)) { 1897 lex(); 1898 if (Token.isNot(MIToken::Identifier)) 1899 return error("expected the name of the target flag"); 1900 unsigned BitFlag = 0; 1901 if (getBitmaskTargetFlag(Token.stringValue(), BitFlag)) 1902 return error("use of undefined target flag '" + Token.stringValue() + 1903 "'"); 1904 // TODO: Report an error when using a duplicate bit target flag. 1905 TF |= BitFlag; 1906 lex(); 1907 } 1908 if (expectAndConsume(MIToken::rparen)) 1909 return true; 1910 } 1911 auto Loc = Token.location(); 1912 if (parseMachineOperand(Dest, TiedDefIdx)) 1913 return true; 1914 if (!HasTargetFlags) 1915 return false; 1916 if (Dest.isReg()) 1917 return error(Loc, "register operands can't have target flags"); 1918 Dest.setTargetFlags(TF); 1919 return false; 1920 } 1921 1922 bool MIParser::parseOffset(int64_t &Offset) { 1923 if (Token.isNot(MIToken::plus) && Token.isNot(MIToken::minus)) 1924 return false; 1925 StringRef Sign = Token.range(); 1926 bool IsNegative = Token.is(MIToken::minus); 1927 lex(); 1928 if (Token.isNot(MIToken::IntegerLiteral)) 1929 return error("expected an integer literal after '" + Sign + "'"); 1930 if (Token.integerValue().getMinSignedBits() > 64) 1931 return error("expected 64-bit integer (too large)"); 1932 Offset = Token.integerValue().getExtValue(); 1933 if (IsNegative) 1934 Offset = -Offset; 1935 lex(); 1936 return false; 1937 } 1938 1939 bool MIParser::parseAlignment(unsigned &Alignment) { 1940 assert(Token.is(MIToken::kw_align)); 1941 lex(); 1942 if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned()) 1943 return error("expected an integer literal after 'align'"); 1944 if (getUnsigned(Alignment)) 1945 return true; 1946 lex(); 1947 return false; 1948 } 1949 1950 bool MIParser::parseOperandsOffset(MachineOperand &Op) { 1951 int64_t Offset = 0; 1952 if (parseOffset(Offset)) 1953 return true; 1954 Op.setOffset(Offset); 1955 return false; 1956 } 1957 1958 bool MIParser::parseIRValue(const Value *&V) { 1959 switch (Token.kind()) { 1960 case MIToken::NamedIRValue: { 1961 V = MF.getFunction()->getValueSymbolTable()->lookup(Token.stringValue()); 1962 break; 1963 } 1964 case MIToken::IRValue: { 1965 unsigned SlotNumber = 0; 1966 if (getUnsigned(SlotNumber)) 1967 return true; 1968 V = getIRValue(SlotNumber); 1969 break; 1970 } 1971 case MIToken::NamedGlobalValue: 1972 case MIToken::GlobalValue: { 1973 GlobalValue *GV = nullptr; 1974 if (parseGlobalValue(GV)) 1975 return true; 1976 V = GV; 1977 break; 1978 } 1979 case MIToken::QuotedIRValue: { 1980 const Constant *C = nullptr; 1981 if (parseIRConstant(Token.location(), Token.stringValue(), C)) 1982 return true; 1983 V = C; 1984 break; 1985 } 1986 default: 1987 llvm_unreachable("The current token should be an IR block reference"); 1988 } 1989 if (!V) 1990 return error(Twine("use of undefined IR value '") + Token.range() + "'"); 1991 return false; 1992 } 1993 1994 bool MIParser::getUint64(uint64_t &Result) { 1995 if (Token.hasIntegerValue()) { 1996 if (Token.integerValue().getActiveBits() > 64) 1997 return error("expected 64-bit integer (too large)"); 1998 Result = Token.integerValue().getZExtValue(); 1999 return false; 2000 } 2001 if (Token.is(MIToken::HexLiteral)) { 2002 APInt A; 2003 if (getHexUint(A)) 2004 return true; 2005 if (A.getBitWidth() > 64) 2006 return error("expected 64-bit integer (too large)"); 2007 Result = A.getZExtValue(); 2008 return false; 2009 } 2010 return true; 2011 } 2012 2013 bool MIParser::getHexUint(APInt &Result) { 2014 assert(Token.is(MIToken::HexLiteral)); 2015 StringRef S = Token.range(); 2016 assert(S[0] == '0' && tolower(S[1]) == 'x'); 2017 // This could be a floating point literal with a special prefix. 2018 if (!isxdigit(S[2])) 2019 return true; 2020 StringRef V = S.substr(2); 2021 APInt A(V.size()*4, V, 16); 2022 Result = APInt(A.getActiveBits(), 2023 ArrayRef<uint64_t>(A.getRawData(), A.getNumWords())); 2024 return false; 2025 } 2026 2027 bool MIParser::parseMemoryOperandFlag(MachineMemOperand::Flags &Flags) { 2028 const auto OldFlags = Flags; 2029 switch (Token.kind()) { 2030 case MIToken::kw_volatile: 2031 Flags |= MachineMemOperand::MOVolatile; 2032 break; 2033 case MIToken::kw_non_temporal: 2034 Flags |= MachineMemOperand::MONonTemporal; 2035 break; 2036 case MIToken::kw_dereferenceable: 2037 Flags |= MachineMemOperand::MODereferenceable; 2038 break; 2039 case MIToken::kw_invariant: 2040 Flags |= MachineMemOperand::MOInvariant; 2041 break; 2042 // TODO: parse the target specific memory operand flags. 2043 default: 2044 llvm_unreachable("The current token should be a memory operand flag"); 2045 } 2046 if (OldFlags == Flags) 2047 // We know that the same flag is specified more than once when the flags 2048 // weren't modified. 2049 return error("duplicate '" + Token.stringValue() + "' memory operand flag"); 2050 lex(); 2051 return false; 2052 } 2053 2054 bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) { 2055 switch (Token.kind()) { 2056 case MIToken::kw_stack: 2057 PSV = MF.getPSVManager().getStack(); 2058 break; 2059 case MIToken::kw_got: 2060 PSV = MF.getPSVManager().getGOT(); 2061 break; 2062 case MIToken::kw_jump_table: 2063 PSV = MF.getPSVManager().getJumpTable(); 2064 break; 2065 case MIToken::kw_constant_pool: 2066 PSV = MF.getPSVManager().getConstantPool(); 2067 break; 2068 case MIToken::FixedStackObject: { 2069 int FI; 2070 if (parseFixedStackFrameIndex(FI)) 2071 return true; 2072 PSV = MF.getPSVManager().getFixedStack(FI); 2073 // The token was already consumed, so use return here instead of break. 2074 return false; 2075 } 2076 case MIToken::StackObject: { 2077 int FI; 2078 if (parseStackFrameIndex(FI)) 2079 return true; 2080 PSV = MF.getPSVManager().getFixedStack(FI); 2081 // The token was already consumed, so use return here instead of break. 2082 return false; 2083 } 2084 case MIToken::kw_call_entry: 2085 lex(); 2086 switch (Token.kind()) { 2087 case MIToken::GlobalValue: 2088 case MIToken::NamedGlobalValue: { 2089 GlobalValue *GV = nullptr; 2090 if (parseGlobalValue(GV)) 2091 return true; 2092 PSV = MF.getPSVManager().getGlobalValueCallEntry(GV); 2093 break; 2094 } 2095 case MIToken::ExternalSymbol: 2096 PSV = MF.getPSVManager().getExternalSymbolCallEntry( 2097 MF.createExternalSymbolName(Token.stringValue())); 2098 break; 2099 default: 2100 return error( 2101 "expected a global value or an external symbol after 'call-entry'"); 2102 } 2103 break; 2104 default: 2105 llvm_unreachable("The current token should be pseudo source value"); 2106 } 2107 lex(); 2108 return false; 2109 } 2110 2111 bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) { 2112 if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack) || 2113 Token.is(MIToken::kw_got) || Token.is(MIToken::kw_jump_table) || 2114 Token.is(MIToken::FixedStackObject) || Token.is(MIToken::StackObject) || 2115 Token.is(MIToken::kw_call_entry)) { 2116 const PseudoSourceValue *PSV = nullptr; 2117 if (parseMemoryPseudoSourceValue(PSV)) 2118 return true; 2119 int64_t Offset = 0; 2120 if (parseOffset(Offset)) 2121 return true; 2122 Dest = MachinePointerInfo(PSV, Offset); 2123 return false; 2124 } 2125 if (Token.isNot(MIToken::NamedIRValue) && Token.isNot(MIToken::IRValue) && 2126 Token.isNot(MIToken::GlobalValue) && 2127 Token.isNot(MIToken::NamedGlobalValue) && 2128 Token.isNot(MIToken::QuotedIRValue)) 2129 return error("expected an IR value reference"); 2130 const Value *V = nullptr; 2131 if (parseIRValue(V)) 2132 return true; 2133 if (!V->getType()->isPointerTy()) 2134 return error("expected a pointer IR value"); 2135 lex(); 2136 int64_t Offset = 0; 2137 if (parseOffset(Offset)) 2138 return true; 2139 Dest = MachinePointerInfo(V, Offset); 2140 return false; 2141 } 2142 2143 bool MIParser::parseOptionalScope(LLVMContext &Context, 2144 SyncScope::ID &SSID) { 2145 SSID = SyncScope::System; 2146 if (Token.is(MIToken::Identifier) && Token.stringValue() == "syncscope") { 2147 lex(); 2148 if (expectAndConsume(MIToken::lparen)) 2149 return error("expected '(' in syncscope"); 2150 2151 std::string SSN; 2152 if (parseStringConstant(SSN)) 2153 return true; 2154 2155 SSID = Context.getOrInsertSyncScopeID(SSN); 2156 if (expectAndConsume(MIToken::rparen)) 2157 return error("expected ')' in syncscope"); 2158 } 2159 2160 return false; 2161 } 2162 2163 bool MIParser::parseOptionalAtomicOrdering(AtomicOrdering &Order) { 2164 Order = AtomicOrdering::NotAtomic; 2165 if (Token.isNot(MIToken::Identifier)) 2166 return false; 2167 2168 Order = StringSwitch<AtomicOrdering>(Token.stringValue()) 2169 .Case("unordered", AtomicOrdering::Unordered) 2170 .Case("monotonic", AtomicOrdering::Monotonic) 2171 .Case("acquire", AtomicOrdering::Acquire) 2172 .Case("release", AtomicOrdering::Release) 2173 .Case("acq_rel", AtomicOrdering::AcquireRelease) 2174 .Case("seq_cst", AtomicOrdering::SequentiallyConsistent) 2175 .Default(AtomicOrdering::NotAtomic); 2176 2177 if (Order != AtomicOrdering::NotAtomic) { 2178 lex(); 2179 return false; 2180 } 2181 2182 return error("expected an atomic scope, ordering or a size integer literal"); 2183 } 2184 2185 bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) { 2186 if (expectAndConsume(MIToken::lparen)) 2187 return true; 2188 MachineMemOperand::Flags Flags = MachineMemOperand::MONone; 2189 while (Token.isMemoryOperandFlag()) { 2190 if (parseMemoryOperandFlag(Flags)) 2191 return true; 2192 } 2193 if (Token.isNot(MIToken::Identifier) || 2194 (Token.stringValue() != "load" && Token.stringValue() != "store")) 2195 return error("expected 'load' or 'store' memory operation"); 2196 if (Token.stringValue() == "load") 2197 Flags |= MachineMemOperand::MOLoad; 2198 else 2199 Flags |= MachineMemOperand::MOStore; 2200 lex(); 2201 2202 // Optional synchronization scope. 2203 SyncScope::ID SSID; 2204 if (parseOptionalScope(MF.getFunction()->getContext(), SSID)) 2205 return true; 2206 2207 // Up to two atomic orderings (cmpxchg provides guarantees on failure). 2208 AtomicOrdering Order, FailureOrder; 2209 if (parseOptionalAtomicOrdering(Order)) 2210 return true; 2211 2212 if (parseOptionalAtomicOrdering(FailureOrder)) 2213 return true; 2214 2215 if (Token.isNot(MIToken::IntegerLiteral)) 2216 return error("expected the size integer literal after memory operation"); 2217 uint64_t Size; 2218 if (getUint64(Size)) 2219 return true; 2220 lex(); 2221 2222 MachinePointerInfo Ptr = MachinePointerInfo(); 2223 if (Token.is(MIToken::Identifier)) { 2224 const char *Word = Flags & MachineMemOperand::MOLoad ? "from" : "into"; 2225 if (Token.stringValue() != Word) 2226 return error(Twine("expected '") + Word + "'"); 2227 lex(); 2228 2229 if (parseMachinePointerInfo(Ptr)) 2230 return true; 2231 } 2232 unsigned BaseAlignment = Size; 2233 AAMDNodes AAInfo; 2234 MDNode *Range = nullptr; 2235 while (consumeIfPresent(MIToken::comma)) { 2236 switch (Token.kind()) { 2237 case MIToken::kw_align: 2238 if (parseAlignment(BaseAlignment)) 2239 return true; 2240 break; 2241 case MIToken::md_tbaa: 2242 lex(); 2243 if (parseMDNode(AAInfo.TBAA)) 2244 return true; 2245 break; 2246 case MIToken::md_alias_scope: 2247 lex(); 2248 if (parseMDNode(AAInfo.Scope)) 2249 return true; 2250 break; 2251 case MIToken::md_noalias: 2252 lex(); 2253 if (parseMDNode(AAInfo.NoAlias)) 2254 return true; 2255 break; 2256 case MIToken::md_range: 2257 lex(); 2258 if (parseMDNode(Range)) 2259 return true; 2260 break; 2261 // TODO: Report an error on duplicate metadata nodes. 2262 default: 2263 return error("expected 'align' or '!tbaa' or '!alias.scope' or " 2264 "'!noalias' or '!range'"); 2265 } 2266 } 2267 if (expectAndConsume(MIToken::rparen)) 2268 return true; 2269 Dest = MF.getMachineMemOperand(Ptr, Flags, Size, BaseAlignment, AAInfo, Range, 2270 SSID, Order, FailureOrder); 2271 return false; 2272 } 2273 2274 void MIParser::initNames2InstrOpCodes() { 2275 if (!Names2InstrOpCodes.empty()) 2276 return; 2277 const auto *TII = MF.getSubtarget().getInstrInfo(); 2278 assert(TII && "Expected target instruction info"); 2279 for (unsigned I = 0, E = TII->getNumOpcodes(); I < E; ++I) 2280 Names2InstrOpCodes.insert(std::make_pair(StringRef(TII->getName(I)), I)); 2281 } 2282 2283 bool MIParser::parseInstrName(StringRef InstrName, unsigned &OpCode) { 2284 initNames2InstrOpCodes(); 2285 auto InstrInfo = Names2InstrOpCodes.find(InstrName); 2286 if (InstrInfo == Names2InstrOpCodes.end()) 2287 return true; 2288 OpCode = InstrInfo->getValue(); 2289 return false; 2290 } 2291 2292 void MIParser::initNames2Regs() { 2293 if (!Names2Regs.empty()) 2294 return; 2295 // The '%noreg' register is the register 0. 2296 Names2Regs.insert(std::make_pair("noreg", 0)); 2297 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 2298 assert(TRI && "Expected target register info"); 2299 for (unsigned I = 0, E = TRI->getNumRegs(); I < E; ++I) { 2300 bool WasInserted = 2301 Names2Regs.insert(std::make_pair(StringRef(TRI->getName(I)).lower(), I)) 2302 .second; 2303 (void)WasInserted; 2304 assert(WasInserted && "Expected registers to be unique case-insensitively"); 2305 } 2306 } 2307 2308 bool MIParser::getRegisterByName(StringRef RegName, unsigned &Reg) { 2309 initNames2Regs(); 2310 auto RegInfo = Names2Regs.find(RegName); 2311 if (RegInfo == Names2Regs.end()) 2312 return true; 2313 Reg = RegInfo->getValue(); 2314 return false; 2315 } 2316 2317 void MIParser::initNames2RegMasks() { 2318 if (!Names2RegMasks.empty()) 2319 return; 2320 const auto *TRI = MF.getSubtarget().getRegisterInfo(); 2321 assert(TRI && "Expected target register info"); 2322 ArrayRef<const uint32_t *> RegMasks = TRI->getRegMasks(); 2323 ArrayRef<const char *> RegMaskNames = TRI->getRegMaskNames(); 2324 assert(RegMasks.size() == RegMaskNames.size()); 2325 for (size_t I = 0, E = RegMasks.size(); I < E; ++I) 2326 Names2RegMasks.insert( 2327 std::make_pair(StringRef(RegMaskNames[I]).lower(), RegMasks[I])); 2328 } 2329 2330 const uint32_t *MIParser::getRegMask(StringRef Identifier) { 2331 initNames2RegMasks(); 2332 auto RegMaskInfo = Names2RegMasks.find(Identifier); 2333 if (RegMaskInfo == Names2RegMasks.end()) 2334 return nullptr; 2335 return RegMaskInfo->getValue(); 2336 } 2337 2338 void MIParser::initNames2SubRegIndices() { 2339 if (!Names2SubRegIndices.empty()) 2340 return; 2341 const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo(); 2342 for (unsigned I = 1, E = TRI->getNumSubRegIndices(); I < E; ++I) 2343 Names2SubRegIndices.insert( 2344 std::make_pair(StringRef(TRI->getSubRegIndexName(I)).lower(), I)); 2345 } 2346 2347 unsigned MIParser::getSubRegIndex(StringRef Name) { 2348 initNames2SubRegIndices(); 2349 auto SubRegInfo = Names2SubRegIndices.find(Name); 2350 if (SubRegInfo == Names2SubRegIndices.end()) 2351 return 0; 2352 return SubRegInfo->getValue(); 2353 } 2354 2355 static void initSlots2BasicBlocks( 2356 const Function &F, 2357 DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) { 2358 ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false); 2359 MST.incorporateFunction(F); 2360 for (auto &BB : F) { 2361 if (BB.hasName()) 2362 continue; 2363 int Slot = MST.getLocalSlot(&BB); 2364 if (Slot == -1) 2365 continue; 2366 Slots2BasicBlocks.insert(std::make_pair(unsigned(Slot), &BB)); 2367 } 2368 } 2369 2370 static const BasicBlock *getIRBlockFromSlot( 2371 unsigned Slot, 2372 const DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) { 2373 auto BlockInfo = Slots2BasicBlocks.find(Slot); 2374 if (BlockInfo == Slots2BasicBlocks.end()) 2375 return nullptr; 2376 return BlockInfo->second; 2377 } 2378 2379 const BasicBlock *MIParser::getIRBlock(unsigned Slot) { 2380 if (Slots2BasicBlocks.empty()) 2381 initSlots2BasicBlocks(*MF.getFunction(), Slots2BasicBlocks); 2382 return getIRBlockFromSlot(Slot, Slots2BasicBlocks); 2383 } 2384 2385 const BasicBlock *MIParser::getIRBlock(unsigned Slot, const Function &F) { 2386 if (&F == MF.getFunction()) 2387 return getIRBlock(Slot); 2388 DenseMap<unsigned, const BasicBlock *> CustomSlots2BasicBlocks; 2389 initSlots2BasicBlocks(F, CustomSlots2BasicBlocks); 2390 return getIRBlockFromSlot(Slot, CustomSlots2BasicBlocks); 2391 } 2392 2393 static void mapValueToSlot(const Value *V, ModuleSlotTracker &MST, 2394 DenseMap<unsigned, const Value *> &Slots2Values) { 2395 int Slot = MST.getLocalSlot(V); 2396 if (Slot == -1) 2397 return; 2398 Slots2Values.insert(std::make_pair(unsigned(Slot), V)); 2399 } 2400 2401 /// Creates the mapping from slot numbers to function's unnamed IR values. 2402 static void initSlots2Values(const Function &F, 2403 DenseMap<unsigned, const Value *> &Slots2Values) { 2404 ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false); 2405 MST.incorporateFunction(F); 2406 for (const auto &Arg : F.args()) 2407 mapValueToSlot(&Arg, MST, Slots2Values); 2408 for (const auto &BB : F) { 2409 mapValueToSlot(&BB, MST, Slots2Values); 2410 for (const auto &I : BB) 2411 mapValueToSlot(&I, MST, Slots2Values); 2412 } 2413 } 2414 2415 const Value *MIParser::getIRValue(unsigned Slot) { 2416 if (Slots2Values.empty()) 2417 initSlots2Values(*MF.getFunction(), Slots2Values); 2418 auto ValueInfo = Slots2Values.find(Slot); 2419 if (ValueInfo == Slots2Values.end()) 2420 return nullptr; 2421 return ValueInfo->second; 2422 } 2423 2424 void MIParser::initNames2TargetIndices() { 2425 if (!Names2TargetIndices.empty()) 2426 return; 2427 const auto *TII = MF.getSubtarget().getInstrInfo(); 2428 assert(TII && "Expected target instruction info"); 2429 auto Indices = TII->getSerializableTargetIndices(); 2430 for (const auto &I : Indices) 2431 Names2TargetIndices.insert(std::make_pair(StringRef(I.second), I.first)); 2432 } 2433 2434 bool MIParser::getTargetIndex(StringRef Name, int &Index) { 2435 initNames2TargetIndices(); 2436 auto IndexInfo = Names2TargetIndices.find(Name); 2437 if (IndexInfo == Names2TargetIndices.end()) 2438 return true; 2439 Index = IndexInfo->second; 2440 return false; 2441 } 2442 2443 void MIParser::initNames2DirectTargetFlags() { 2444 if (!Names2DirectTargetFlags.empty()) 2445 return; 2446 const auto *TII = MF.getSubtarget().getInstrInfo(); 2447 assert(TII && "Expected target instruction info"); 2448 auto Flags = TII->getSerializableDirectMachineOperandTargetFlags(); 2449 for (const auto &I : Flags) 2450 Names2DirectTargetFlags.insert( 2451 std::make_pair(StringRef(I.second), I.first)); 2452 } 2453 2454 bool MIParser::getDirectTargetFlag(StringRef Name, unsigned &Flag) { 2455 initNames2DirectTargetFlags(); 2456 auto FlagInfo = Names2DirectTargetFlags.find(Name); 2457 if (FlagInfo == Names2DirectTargetFlags.end()) 2458 return true; 2459 Flag = FlagInfo->second; 2460 return false; 2461 } 2462 2463 void MIParser::initNames2BitmaskTargetFlags() { 2464 if (!Names2BitmaskTargetFlags.empty()) 2465 return; 2466 const auto *TII = MF.getSubtarget().getInstrInfo(); 2467 assert(TII && "Expected target instruction info"); 2468 auto Flags = TII->getSerializableBitmaskMachineOperandTargetFlags(); 2469 for (const auto &I : Flags) 2470 Names2BitmaskTargetFlags.insert( 2471 std::make_pair(StringRef(I.second), I.first)); 2472 } 2473 2474 bool MIParser::getBitmaskTargetFlag(StringRef Name, unsigned &Flag) { 2475 initNames2BitmaskTargetFlags(); 2476 auto FlagInfo = Names2BitmaskTargetFlags.find(Name); 2477 if (FlagInfo == Names2BitmaskTargetFlags.end()) 2478 return true; 2479 Flag = FlagInfo->second; 2480 return false; 2481 } 2482 2483 bool MIParser::parseStringConstant(std::string &Result) { 2484 if (Token.isNot(MIToken::StringConstant)) 2485 return error("expected string constant"); 2486 Result = Token.stringValue(); 2487 lex(); 2488 return false; 2489 } 2490 2491 bool llvm::parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS, 2492 StringRef Src, 2493 SMDiagnostic &Error) { 2494 return MIParser(PFS, Error, Src).parseBasicBlockDefinitions(PFS.MBBSlots); 2495 } 2496 2497 bool llvm::parseMachineInstructions(PerFunctionMIParsingState &PFS, 2498 StringRef Src, SMDiagnostic &Error) { 2499 return MIParser(PFS, Error, Src).parseBasicBlocks(); 2500 } 2501 2502 bool llvm::parseMBBReference(PerFunctionMIParsingState &PFS, 2503 MachineBasicBlock *&MBB, StringRef Src, 2504 SMDiagnostic &Error) { 2505 return MIParser(PFS, Error, Src).parseStandaloneMBB(MBB); 2506 } 2507 2508 bool llvm::parseRegisterReference(PerFunctionMIParsingState &PFS, 2509 unsigned &Reg, StringRef Src, 2510 SMDiagnostic &Error) { 2511 return MIParser(PFS, Error, Src).parseStandaloneRegister(Reg); 2512 } 2513 2514 bool llvm::parseNamedRegisterReference(PerFunctionMIParsingState &PFS, 2515 unsigned &Reg, StringRef Src, 2516 SMDiagnostic &Error) { 2517 return MIParser(PFS, Error, Src).parseStandaloneNamedRegister(Reg); 2518 } 2519 2520 bool llvm::parseVirtualRegisterReference(PerFunctionMIParsingState &PFS, 2521 VRegInfo *&Info, StringRef Src, 2522 SMDiagnostic &Error) { 2523 return MIParser(PFS, Error, Src).parseStandaloneVirtualRegister(Info); 2524 } 2525 2526 bool llvm::parseStackObjectReference(PerFunctionMIParsingState &PFS, 2527 int &FI, StringRef Src, 2528 SMDiagnostic &Error) { 2529 return MIParser(PFS, Error, Src).parseStandaloneStackObject(FI); 2530 } 2531 2532 bool llvm::parseMDNode(PerFunctionMIParsingState &PFS, 2533 MDNode *&Node, StringRef Src, SMDiagnostic &Error) { 2534 return MIParser(PFS, Error, Src).parseStandaloneMDNode(Node); 2535 } 2536