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