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