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