MIR Serialization: Serialize the fixed stack pseudo source values.
[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
76 public:
77   MIParser(SourceMgr &SM, MachineFunction &MF, SMDiagnostic &Error,
78            StringRef Source, const PerFunctionMIParsingState &PFS,
79            const SlotMapping &IRSlots);
80
81   void lex();
82
83   /// Report an error at the current location with the given message.
84   ///
85   /// This function always return true.
86   bool error(const Twine &Msg);
87
88   /// Report an error at the given location with the given message.
89   ///
90   /// This function always return true.
91   bool error(StringRef::iterator Loc, const Twine &Msg);
92
93   bool parse(MachineInstr *&MI);
94   bool parseStandaloneMBB(MachineBasicBlock *&MBB);
95   bool parseStandaloneNamedRegister(unsigned &Reg);
96   bool parseStandaloneVirtualRegister(unsigned &Reg);
97   bool parseStandaloneIRBlockReference(const BasicBlock *&BB);
98
99   bool parseRegister(unsigned &Reg);
100   bool parseRegisterFlag(unsigned &Flags);
101   bool parseSubRegisterIndex(unsigned &SubReg);
102   bool parseRegisterOperand(MachineOperand &Dest, bool IsDef = false);
103   bool parseImmediateOperand(MachineOperand &Dest);
104   bool parseIRConstant(StringRef::iterator Loc, const Constant *&C);
105   bool parseTypedImmediateOperand(MachineOperand &Dest);
106   bool parseFPImmediateOperand(MachineOperand &Dest);
107   bool parseMBBReference(MachineBasicBlock *&MBB);
108   bool parseMBBOperand(MachineOperand &Dest);
109   bool parseStackObjectOperand(MachineOperand &Dest);
110   bool parseFixedStackFrameIndex(int &FI);
111   bool parseFixedStackObjectOperand(MachineOperand &Dest);
112   bool parseGlobalValue(GlobalValue *&GV);
113   bool parseGlobalAddressOperand(MachineOperand &Dest);
114   bool parseConstantPoolIndexOperand(MachineOperand &Dest);
115   bool parseJumpTableIndexOperand(MachineOperand &Dest);
116   bool parseExternalSymbolOperand(MachineOperand &Dest);
117   bool parseMDNode(MDNode *&Node);
118   bool parseMetadataOperand(MachineOperand &Dest);
119   bool parseCFIOffset(int &Offset);
120   bool parseCFIRegister(unsigned &Reg);
121   bool parseCFIOperand(MachineOperand &Dest);
122   bool parseIRBlock(BasicBlock *&BB, const Function &F);
123   bool parseBlockAddressOperand(MachineOperand &Dest);
124   bool parseTargetIndexOperand(MachineOperand &Dest);
125   bool parseLiveoutRegisterMaskOperand(MachineOperand &Dest);
126   bool parseMachineOperand(MachineOperand &Dest);
127   bool parseMachineOperandAndTargetFlags(MachineOperand &Dest);
128   bool parseOffset(int64_t &Offset);
129   bool parseOperandsOffset(MachineOperand &Op);
130   bool parseIRValue(Value *&V);
131   bool parseMemoryOperandFlag(unsigned &Flags);
132   bool parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV);
133   bool parseMachinePointerInfo(MachinePointerInfo &Dest);
134   bool parseMachineMemoryOperand(MachineMemOperand *&Dest);
135
136 private:
137   /// Convert the integer literal in the current token into an unsigned integer.
138   ///
139   /// Return true if an error occurred.
140   bool getUnsigned(unsigned &Result);
141
142   /// Convert the integer literal in the current token into an uint64.
143   ///
144   /// Return true if an error occurred.
145   bool getUint64(uint64_t &Result);
146
147   /// If the current token is of the given kind, consume it and return false.
148   /// Otherwise report an error and return true.
149   bool expectAndConsume(MIToken::TokenKind TokenKind);
150
151   void initNames2InstrOpCodes();
152
153   /// Try to convert an instruction name to an opcode. Return true if the
154   /// instruction name is invalid.
155   bool parseInstrName(StringRef InstrName, unsigned &OpCode);
156
157   bool parseInstruction(unsigned &OpCode, unsigned &Flags);
158
159   bool verifyImplicitOperands(ArrayRef<MachineOperandWithLocation> Operands,
160                               const MCInstrDesc &MCID);
161
162   void initNames2Regs();
163
164   /// Try to convert a register name to a register number. Return true if the
165   /// register name is invalid.
166   bool getRegisterByName(StringRef RegName, unsigned &Reg);
167
168   void initNames2RegMasks();
169
170   /// Check if the given identifier is a name of a register mask.
171   ///
172   /// Return null if the identifier isn't a register mask.
173   const uint32_t *getRegMask(StringRef Identifier);
174
175   void initNames2SubRegIndices();
176
177   /// Check if the given identifier is a name of a subregister index.
178   ///
179   /// Return 0 if the name isn't a subregister index class.
180   unsigned getSubRegIndex(StringRef Name);
181
182   const BasicBlock *getIRBlock(unsigned Slot);
183   const BasicBlock *getIRBlock(unsigned Slot, const Function &F);
184
185   void initNames2TargetIndices();
186
187   /// Try to convert a name of target index to the corresponding target index.
188   ///
189   /// Return true if the name isn't a name of a target index.
190   bool getTargetIndex(StringRef Name, int &Index);
191
192   void initNames2DirectTargetFlags();
193
194   /// Try to convert a name of a direct target flag to the corresponding
195   /// target flag.
196   ///
197   /// Return true if the name isn't a name of a direct flag.
198   bool getDirectTargetFlag(StringRef Name, unsigned &Flag);
199 };
200
201 } // end anonymous namespace
202
203 MIParser::MIParser(SourceMgr &SM, MachineFunction &MF, SMDiagnostic &Error,
204                    StringRef Source, const PerFunctionMIParsingState &PFS,
205                    const SlotMapping &IRSlots)
206     : SM(SM), MF(MF), Error(Error), Source(Source), CurrentSource(Source),
207       PFS(PFS), IRSlots(IRSlots) {}
208
209 void MIParser::lex() {
210   CurrentSource = lexMIToken(
211       CurrentSource, Token,
212       [this](StringRef::iterator Loc, const Twine &Msg) { error(Loc, Msg); });
213 }
214
215 bool MIParser::error(const Twine &Msg) { return error(Token.location(), Msg); }
216
217 bool MIParser::error(StringRef::iterator Loc, const Twine &Msg) {
218   assert(Loc >= Source.data() && Loc <= (Source.data() + Source.size()));
219   Error = SMDiagnostic(
220       SM, SMLoc(),
221       SM.getMemoryBuffer(SM.getMainFileID())->getBufferIdentifier(), 1,
222       Loc - Source.data(), SourceMgr::DK_Error, Msg.str(), Source, None, None);
223   return true;
224 }
225
226 static const char *toString(MIToken::TokenKind TokenKind) {
227   switch (TokenKind) {
228   case MIToken::comma:
229     return "','";
230   case MIToken::equal:
231     return "'='";
232   case MIToken::lparen:
233     return "'('";
234   case MIToken::rparen:
235     return "')'";
236   default:
237     return "<unknown token>";
238   }
239 }
240
241 bool MIParser::expectAndConsume(MIToken::TokenKind TokenKind) {
242   if (Token.isNot(TokenKind))
243     return error(Twine("expected ") + toString(TokenKind));
244   lex();
245   return false;
246 }
247
248 bool MIParser::parse(MachineInstr *&MI) {
249   lex();
250
251   // Parse any register operands before '='
252   MachineOperand MO = MachineOperand::CreateImm(0);
253   SmallVector<MachineOperandWithLocation, 8> Operands;
254   while (Token.isRegister() || Token.isRegisterFlag()) {
255     auto Loc = Token.location();
256     if (parseRegisterOperand(MO, /*IsDef=*/true))
257       return true;
258     Operands.push_back(MachineOperandWithLocation(MO, Loc, Token.location()));
259     if (Token.isNot(MIToken::comma))
260       break;
261     lex();
262   }
263   if (!Operands.empty() && expectAndConsume(MIToken::equal))
264     return true;
265
266   unsigned OpCode, Flags = 0;
267   if (Token.isError() || parseInstruction(OpCode, Flags))
268     return true;
269
270   // TODO: Parse the bundle instruction flags.
271
272   // Parse the remaining machine operands.
273   while (Token.isNot(MIToken::Eof) && Token.isNot(MIToken::kw_debug_location) &&
274          Token.isNot(MIToken::coloncolon)) {
275     auto Loc = Token.location();
276     if (parseMachineOperandAndTargetFlags(MO))
277       return true;
278     Operands.push_back(MachineOperandWithLocation(MO, Loc, Token.location()));
279     if (Token.is(MIToken::Eof) || Token.is(MIToken::coloncolon))
280       break;
281     if (Token.isNot(MIToken::comma))
282       return error("expected ',' before the next machine operand");
283     lex();
284   }
285
286   DebugLoc DebugLocation;
287   if (Token.is(MIToken::kw_debug_location)) {
288     lex();
289     if (Token.isNot(MIToken::exclaim))
290       return error("expected a metadata node after 'debug-location'");
291     MDNode *Node = nullptr;
292     if (parseMDNode(Node))
293       return true;
294     DebugLocation = DebugLoc(Node);
295   }
296
297   // Parse the machine memory operands.
298   SmallVector<MachineMemOperand *, 2> MemOperands;
299   if (Token.is(MIToken::coloncolon)) {
300     lex();
301     while (Token.isNot(MIToken::Eof)) {
302       MachineMemOperand *MemOp = nullptr;
303       if (parseMachineMemoryOperand(MemOp))
304         return true;
305       MemOperands.push_back(MemOp);
306       if (Token.is(MIToken::Eof))
307         break;
308       if (Token.isNot(MIToken::comma))
309         return error("expected ',' before the next machine memory operand");
310       lex();
311     }
312   }
313
314   const auto &MCID = MF.getSubtarget().getInstrInfo()->get(OpCode);
315   if (!MCID.isVariadic()) {
316     // FIXME: Move the implicit operand verification to the machine verifier.
317     if (verifyImplicitOperands(Operands, MCID))
318       return true;
319   }
320
321   // TODO: Check for extraneous machine operands.
322   MI = MF.CreateMachineInstr(MCID, DebugLocation, /*NoImplicit=*/true);
323   MI->setFlags(Flags);
324   for (const auto &Operand : Operands)
325     MI->addOperand(MF, Operand.Operand);
326   if (MemOperands.empty())
327     return false;
328   MachineInstr::mmo_iterator MemRefs =
329       MF.allocateMemRefsArray(MemOperands.size());
330   std::copy(MemOperands.begin(), MemOperands.end(), MemRefs);
331   MI->setMemRefs(MemRefs, MemRefs + MemOperands.size());
332   return false;
333 }
334
335 bool MIParser::parseStandaloneMBB(MachineBasicBlock *&MBB) {
336   lex();
337   if (Token.isNot(MIToken::MachineBasicBlock))
338     return error("expected a machine basic block reference");
339   if (parseMBBReference(MBB))
340     return true;
341   lex();
342   if (Token.isNot(MIToken::Eof))
343     return error(
344         "expected end of string after the machine basic block reference");
345   return false;
346 }
347
348 bool MIParser::parseStandaloneNamedRegister(unsigned &Reg) {
349   lex();
350   if (Token.isNot(MIToken::NamedRegister))
351     return error("expected a named register");
352   if (parseRegister(Reg))
353     return 0;
354   lex();
355   if (Token.isNot(MIToken::Eof))
356     return error("expected end of string after the register reference");
357   return false;
358 }
359
360 bool MIParser::parseStandaloneVirtualRegister(unsigned &Reg) {
361   lex();
362   if (Token.isNot(MIToken::VirtualRegister))
363     return error("expected a virtual register");
364   if (parseRegister(Reg))
365     return 0;
366   lex();
367   if (Token.isNot(MIToken::Eof))
368     return error("expected end of string after the register reference");
369   return false;
370 }
371
372 bool MIParser::parseStandaloneIRBlockReference(const BasicBlock *&BB) {
373   lex();
374   if (Token.isNot(MIToken::IRBlock))
375     return error("expected an IR block reference");
376   unsigned SlotNumber = 0;
377   if (getUnsigned(SlotNumber))
378     return true;
379   BB = getIRBlock(SlotNumber);
380   if (!BB)
381     return error(Twine("use of undefined IR block '%ir-block.") +
382                  Twine(SlotNumber) + "'");
383   lex();
384   if (Token.isNot(MIToken::Eof))
385     return error("expected end of string after the IR block reference");
386   return false;
387 }
388
389 static const char *printImplicitRegisterFlag(const MachineOperand &MO) {
390   assert(MO.isImplicit());
391   return MO.isDef() ? "implicit-def" : "implicit";
392 }
393
394 static std::string getRegisterName(const TargetRegisterInfo *TRI,
395                                    unsigned Reg) {
396   assert(TargetRegisterInfo::isPhysicalRegister(Reg) && "expected phys reg");
397   return StringRef(TRI->getName(Reg)).lower();
398 }
399
400 bool MIParser::verifyImplicitOperands(
401     ArrayRef<MachineOperandWithLocation> Operands, const MCInstrDesc &MCID) {
402   if (MCID.isCall())
403     // We can't verify call instructions as they can contain arbitrary implicit
404     // register and register mask operands.
405     return false;
406
407   // Gather all the expected implicit operands.
408   SmallVector<MachineOperand, 4> ImplicitOperands;
409   if (MCID.ImplicitDefs)
410     for (const uint16_t *ImpDefs = MCID.getImplicitDefs(); *ImpDefs; ++ImpDefs)
411       ImplicitOperands.push_back(
412           MachineOperand::CreateReg(*ImpDefs, true, true));
413   if (MCID.ImplicitUses)
414     for (const uint16_t *ImpUses = MCID.getImplicitUses(); *ImpUses; ++ImpUses)
415       ImplicitOperands.push_back(
416           MachineOperand::CreateReg(*ImpUses, false, true));
417
418   const auto *TRI = MF.getSubtarget().getRegisterInfo();
419   assert(TRI && "Expected target register info");
420   size_t I = ImplicitOperands.size(), J = Operands.size();
421   while (I) {
422     --I;
423     if (J) {
424       --J;
425       const auto &ImplicitOperand = ImplicitOperands[I];
426       const auto &Operand = Operands[J].Operand;
427       if (ImplicitOperand.isIdenticalTo(Operand))
428         continue;
429       if (Operand.isReg() && Operand.isImplicit()) {
430         return error(Operands[J].Begin,
431                      Twine("expected an implicit register operand '") +
432                          printImplicitRegisterFlag(ImplicitOperand) + " %" +
433                          getRegisterName(TRI, ImplicitOperand.getReg()) + "'");
434       }
435     }
436     // TODO: Fix source location when Operands[J].end is right before '=', i.e:
437     // insead of reporting an error at this location:
438     //            %eax = MOV32r0
439     //                 ^
440     // report the error at the following location:
441     //            %eax = MOV32r0
442     //                          ^
443     return error(J < Operands.size() ? Operands[J].End : Token.location(),
444                  Twine("missing implicit register operand '") +
445                      printImplicitRegisterFlag(ImplicitOperands[I]) + " %" +
446                      getRegisterName(TRI, ImplicitOperands[I].getReg()) + "'");
447   }
448   return false;
449 }
450
451 bool MIParser::parseInstruction(unsigned &OpCode, unsigned &Flags) {
452   if (Token.is(MIToken::kw_frame_setup)) {
453     Flags |= MachineInstr::FrameSetup;
454     lex();
455   }
456   if (Token.isNot(MIToken::Identifier))
457     return error("expected a machine instruction");
458   StringRef InstrName = Token.stringValue();
459   if (parseInstrName(InstrName, OpCode))
460     return error(Twine("unknown machine instruction name '") + InstrName + "'");
461   lex();
462   return false;
463 }
464
465 bool MIParser::parseRegister(unsigned &Reg) {
466   switch (Token.kind()) {
467   case MIToken::underscore:
468     Reg = 0;
469     break;
470   case MIToken::NamedRegister: {
471     StringRef Name = Token.stringValue();
472     if (getRegisterByName(Name, Reg))
473       return error(Twine("unknown register name '") + Name + "'");
474     break;
475   }
476   case MIToken::VirtualRegister: {
477     unsigned ID;
478     if (getUnsigned(ID))
479       return true;
480     const auto RegInfo = PFS.VirtualRegisterSlots.find(ID);
481     if (RegInfo == PFS.VirtualRegisterSlots.end())
482       return error(Twine("use of undefined virtual register '%") + Twine(ID) +
483                    "'");
484     Reg = RegInfo->second;
485     break;
486   }
487   // TODO: Parse other register kinds.
488   default:
489     llvm_unreachable("The current token should be a register");
490   }
491   return false;
492 }
493
494 bool MIParser::parseRegisterFlag(unsigned &Flags) {
495   const unsigned OldFlags = Flags;
496   switch (Token.kind()) {
497   case MIToken::kw_implicit:
498     Flags |= RegState::Implicit;
499     break;
500   case MIToken::kw_implicit_define:
501     Flags |= RegState::ImplicitDefine;
502     break;
503   case MIToken::kw_dead:
504     Flags |= RegState::Dead;
505     break;
506   case MIToken::kw_killed:
507     Flags |= RegState::Kill;
508     break;
509   case MIToken::kw_undef:
510     Flags |= RegState::Undef;
511     break;
512   case MIToken::kw_early_clobber:
513     Flags |= RegState::EarlyClobber;
514     break;
515   case MIToken::kw_debug_use:
516     Flags |= RegState::Debug;
517     break;
518   // TODO: parse the other register flags.
519   default:
520     llvm_unreachable("The current token should be a register flag");
521   }
522   if (OldFlags == Flags)
523     // We know that the same flag is specified more than once when the flags
524     // weren't modified.
525     return error("duplicate '" + Token.stringValue() + "' register flag");
526   lex();
527   return false;
528 }
529
530 bool MIParser::parseSubRegisterIndex(unsigned &SubReg) {
531   assert(Token.is(MIToken::colon));
532   lex();
533   if (Token.isNot(MIToken::Identifier))
534     return error("expected a subregister index after ':'");
535   auto Name = Token.stringValue();
536   SubReg = getSubRegIndex(Name);
537   if (!SubReg)
538     return error(Twine("use of unknown subregister index '") + Name + "'");
539   lex();
540   return false;
541 }
542
543 bool MIParser::parseRegisterOperand(MachineOperand &Dest, bool IsDef) {
544   unsigned Reg;
545   unsigned Flags = IsDef ? RegState::Define : 0;
546   while (Token.isRegisterFlag()) {
547     if (parseRegisterFlag(Flags))
548       return true;
549   }
550   if (!Token.isRegister())
551     return error("expected a register after register flags");
552   if (parseRegister(Reg))
553     return true;
554   lex();
555   unsigned SubReg = 0;
556   if (Token.is(MIToken::colon)) {
557     if (parseSubRegisterIndex(SubReg))
558       return true;
559   }
560   Dest = MachineOperand::CreateReg(
561       Reg, Flags & RegState::Define, Flags & RegState::Implicit,
562       Flags & RegState::Kill, Flags & RegState::Dead, Flags & RegState::Undef,
563       Flags & RegState::EarlyClobber, SubReg, Flags & RegState::Debug);
564   return false;
565 }
566
567 bool MIParser::parseImmediateOperand(MachineOperand &Dest) {
568   assert(Token.is(MIToken::IntegerLiteral));
569   const APSInt &Int = Token.integerValue();
570   if (Int.getMinSignedBits() > 64)
571     return error("integer literal is too large to be an immediate operand");
572   Dest = MachineOperand::CreateImm(Int.getExtValue());
573   lex();
574   return false;
575 }
576
577 bool MIParser::parseIRConstant(StringRef::iterator Loc, const Constant *&C) {
578   auto Source = StringRef(Loc, Token.range().end() - Loc).str();
579   lex();
580   SMDiagnostic Err;
581   C = parseConstantValue(Source.c_str(), Err, *MF.getFunction()->getParent());
582   if (!C)
583     return error(Loc + Err.getColumnNo(), Err.getMessage());
584   return false;
585 }
586
587 bool MIParser::parseTypedImmediateOperand(MachineOperand &Dest) {
588   assert(Token.is(MIToken::IntegerType));
589   auto Loc = Token.location();
590   lex();
591   if (Token.isNot(MIToken::IntegerLiteral))
592     return error("expected an integer literal");
593   const Constant *C = nullptr;
594   if (parseIRConstant(Loc, C))
595     return true;
596   Dest = MachineOperand::CreateCImm(cast<ConstantInt>(C));
597   return false;
598 }
599
600 bool MIParser::parseFPImmediateOperand(MachineOperand &Dest) {
601   auto Loc = Token.location();
602   lex();
603   if (Token.isNot(MIToken::FloatingPointLiteral))
604     return error("expected a floating point literal");
605   const Constant *C = nullptr;
606   if (parseIRConstant(Loc, C))
607     return true;
608   Dest = MachineOperand::CreateFPImm(cast<ConstantFP>(C));
609   return false;
610 }
611
612 bool MIParser::getUnsigned(unsigned &Result) {
613   assert(Token.hasIntegerValue() && "Expected a token with an integer value");
614   const uint64_t Limit = uint64_t(std::numeric_limits<unsigned>::max()) + 1;
615   uint64_t Val64 = Token.integerValue().getLimitedValue(Limit);
616   if (Val64 == Limit)
617     return error("expected 32-bit integer (too large)");
618   Result = Val64;
619   return false;
620 }
621
622 bool MIParser::parseMBBReference(MachineBasicBlock *&MBB) {
623   assert(Token.is(MIToken::MachineBasicBlock));
624   unsigned Number;
625   if (getUnsigned(Number))
626     return true;
627   auto MBBInfo = PFS.MBBSlots.find(Number);
628   if (MBBInfo == PFS.MBBSlots.end())
629     return error(Twine("use of undefined machine basic block #") +
630                  Twine(Number));
631   MBB = MBBInfo->second;
632   if (!Token.stringValue().empty() && Token.stringValue() != MBB->getName())
633     return error(Twine("the name of machine basic block #") + Twine(Number) +
634                  " isn't '" + Token.stringValue() + "'");
635   return false;
636 }
637
638 bool MIParser::parseMBBOperand(MachineOperand &Dest) {
639   MachineBasicBlock *MBB;
640   if (parseMBBReference(MBB))
641     return true;
642   Dest = MachineOperand::CreateMBB(MBB);
643   lex();
644   return false;
645 }
646
647 bool MIParser::parseStackObjectOperand(MachineOperand &Dest) {
648   assert(Token.is(MIToken::StackObject));
649   unsigned ID;
650   if (getUnsigned(ID))
651     return true;
652   auto ObjectInfo = PFS.StackObjectSlots.find(ID);
653   if (ObjectInfo == PFS.StackObjectSlots.end())
654     return error(Twine("use of undefined stack object '%stack.") + Twine(ID) +
655                  "'");
656   StringRef Name;
657   if (const auto *Alloca =
658           MF.getFrameInfo()->getObjectAllocation(ObjectInfo->second))
659     Name = Alloca->getName();
660   if (!Token.stringValue().empty() && Token.stringValue() != Name)
661     return error(Twine("the name of the stack object '%stack.") + Twine(ID) +
662                  "' isn't '" + Token.stringValue() + "'");
663   lex();
664   Dest = MachineOperand::CreateFI(ObjectInfo->second);
665   return false;
666 }
667
668 bool MIParser::parseFixedStackFrameIndex(int &FI) {
669   assert(Token.is(MIToken::FixedStackObject));
670   unsigned ID;
671   if (getUnsigned(ID))
672     return true;
673   auto ObjectInfo = PFS.FixedStackObjectSlots.find(ID);
674   if (ObjectInfo == PFS.FixedStackObjectSlots.end())
675     return error(Twine("use of undefined fixed stack object '%fixed-stack.") +
676                  Twine(ID) + "'");
677   lex();
678   FI = ObjectInfo->second;
679   return false;
680 }
681
682 bool MIParser::parseFixedStackObjectOperand(MachineOperand &Dest) {
683   int FI;
684   if (parseFixedStackFrameIndex(FI))
685     return true;
686   Dest = MachineOperand::CreateFI(FI);
687   return false;
688 }
689
690 bool MIParser::parseGlobalValue(GlobalValue *&GV) {
691   switch (Token.kind()) {
692   case MIToken::NamedGlobalValue: {
693     const Module *M = MF.getFunction()->getParent();
694     GV = M->getNamedValue(Token.stringValue());
695     if (!GV)
696       return error(Twine("use of undefined global value '") + Token.range() +
697                    "'");
698     break;
699   }
700   case MIToken::GlobalValue: {
701     unsigned GVIdx;
702     if (getUnsigned(GVIdx))
703       return true;
704     if (GVIdx >= IRSlots.GlobalValues.size())
705       return error(Twine("use of undefined global value '@") + Twine(GVIdx) +
706                    "'");
707     GV = IRSlots.GlobalValues[GVIdx];
708     break;
709   }
710   default:
711     llvm_unreachable("The current token should be a global value");
712   }
713   return false;
714 }
715
716 bool MIParser::parseGlobalAddressOperand(MachineOperand &Dest) {
717   GlobalValue *GV = nullptr;
718   if (parseGlobalValue(GV))
719     return true;
720   lex();
721   Dest = MachineOperand::CreateGA(GV, /*Offset=*/0);
722   if (parseOperandsOffset(Dest))
723     return true;
724   return false;
725 }
726
727 bool MIParser::parseConstantPoolIndexOperand(MachineOperand &Dest) {
728   assert(Token.is(MIToken::ConstantPoolItem));
729   unsigned ID;
730   if (getUnsigned(ID))
731     return true;
732   auto ConstantInfo = PFS.ConstantPoolSlots.find(ID);
733   if (ConstantInfo == PFS.ConstantPoolSlots.end())
734     return error("use of undefined constant '%const." + Twine(ID) + "'");
735   lex();
736   Dest = MachineOperand::CreateCPI(ID, /*Offset=*/0);
737   if (parseOperandsOffset(Dest))
738     return true;
739   return false;
740 }
741
742 bool MIParser::parseJumpTableIndexOperand(MachineOperand &Dest) {
743   assert(Token.is(MIToken::JumpTableIndex));
744   unsigned ID;
745   if (getUnsigned(ID))
746     return true;
747   auto JumpTableEntryInfo = PFS.JumpTableSlots.find(ID);
748   if (JumpTableEntryInfo == PFS.JumpTableSlots.end())
749     return error("use of undefined jump table '%jump-table." + Twine(ID) + "'");
750   lex();
751   Dest = MachineOperand::CreateJTI(JumpTableEntryInfo->second);
752   return false;
753 }
754
755 bool MIParser::parseExternalSymbolOperand(MachineOperand &Dest) {
756   assert(Token.is(MIToken::ExternalSymbol));
757   const char *Symbol = MF.createExternalSymbolName(Token.stringValue());
758   lex();
759   Dest = MachineOperand::CreateES(Symbol);
760   if (parseOperandsOffset(Dest))
761     return true;
762   return false;
763 }
764
765 bool MIParser::parseMDNode(MDNode *&Node) {
766   assert(Token.is(MIToken::exclaim));
767   auto Loc = Token.location();
768   lex();
769   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
770     return error("expected metadata id after '!'");
771   unsigned ID;
772   if (getUnsigned(ID))
773     return true;
774   auto NodeInfo = IRSlots.MetadataNodes.find(ID);
775   if (NodeInfo == IRSlots.MetadataNodes.end())
776     return error(Loc, "use of undefined metadata '!" + Twine(ID) + "'");
777   lex();
778   Node = NodeInfo->second.get();
779   return false;
780 }
781
782 bool MIParser::parseMetadataOperand(MachineOperand &Dest) {
783   MDNode *Node = nullptr;
784   if (parseMDNode(Node))
785     return true;
786   Dest = MachineOperand::CreateMetadata(Node);
787   return false;
788 }
789
790 bool MIParser::parseCFIOffset(int &Offset) {
791   if (Token.isNot(MIToken::IntegerLiteral))
792     return error("expected a cfi offset");
793   if (Token.integerValue().getMinSignedBits() > 32)
794     return error("expected a 32 bit integer (the cfi offset is too large)");
795   Offset = (int)Token.integerValue().getExtValue();
796   lex();
797   return false;
798 }
799
800 bool MIParser::parseCFIRegister(unsigned &Reg) {
801   if (Token.isNot(MIToken::NamedRegister))
802     return error("expected a cfi register");
803   unsigned LLVMReg;
804   if (parseRegister(LLVMReg))
805     return true;
806   const auto *TRI = MF.getSubtarget().getRegisterInfo();
807   assert(TRI && "Expected target register info");
808   int DwarfReg = TRI->getDwarfRegNum(LLVMReg, true);
809   if (DwarfReg < 0)
810     return error("invalid DWARF register");
811   Reg = (unsigned)DwarfReg;
812   lex();
813   return false;
814 }
815
816 bool MIParser::parseCFIOperand(MachineOperand &Dest) {
817   auto Kind = Token.kind();
818   lex();
819   auto &MMI = MF.getMMI();
820   int Offset;
821   unsigned Reg;
822   unsigned CFIIndex;
823   switch (Kind) {
824   case MIToken::kw_cfi_offset:
825     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
826         parseCFIOffset(Offset))
827       return true;
828     CFIIndex =
829         MMI.addFrameInst(MCCFIInstruction::createOffset(nullptr, Reg, Offset));
830     break;
831   case MIToken::kw_cfi_def_cfa_register:
832     if (parseCFIRegister(Reg))
833       return true;
834     CFIIndex =
835         MMI.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
836     break;
837   case MIToken::kw_cfi_def_cfa_offset:
838     if (parseCFIOffset(Offset))
839       return true;
840     // NB: MCCFIInstruction::createDefCfaOffset negates the offset.
841     CFIIndex = MMI.addFrameInst(
842         MCCFIInstruction::createDefCfaOffset(nullptr, -Offset));
843     break;
844   case MIToken::kw_cfi_def_cfa:
845     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
846         parseCFIOffset(Offset))
847       return true;
848     // NB: MCCFIInstruction::createDefCfa negates the offset.
849     CFIIndex =
850         MMI.addFrameInst(MCCFIInstruction::createDefCfa(nullptr, Reg, -Offset));
851     break;
852   default:
853     // TODO: Parse the other CFI operands.
854     llvm_unreachable("The current token should be a cfi operand");
855   }
856   Dest = MachineOperand::CreateCFIIndex(CFIIndex);
857   return false;
858 }
859
860 bool MIParser::parseIRBlock(BasicBlock *&BB, const Function &F) {
861   switch (Token.kind()) {
862   case MIToken::NamedIRBlock: {
863     BB = dyn_cast_or_null<BasicBlock>(
864         F.getValueSymbolTable().lookup(Token.stringValue()));
865     if (!BB)
866       return error(Twine("use of undefined IR block '") + Token.range() + "'");
867     break;
868   }
869   case MIToken::IRBlock: {
870     unsigned SlotNumber = 0;
871     if (getUnsigned(SlotNumber))
872       return true;
873     BB = const_cast<BasicBlock *>(getIRBlock(SlotNumber, F));
874     if (!BB)
875       return error(Twine("use of undefined IR block '%ir-block.") +
876                    Twine(SlotNumber) + "'");
877     break;
878   }
879   default:
880     llvm_unreachable("The current token should be an IR block reference");
881   }
882   return false;
883 }
884
885 bool MIParser::parseBlockAddressOperand(MachineOperand &Dest) {
886   assert(Token.is(MIToken::kw_blockaddress));
887   lex();
888   if (expectAndConsume(MIToken::lparen))
889     return true;
890   if (Token.isNot(MIToken::GlobalValue) &&
891       Token.isNot(MIToken::NamedGlobalValue))
892     return error("expected a global value");
893   GlobalValue *GV = nullptr;
894   if (parseGlobalValue(GV))
895     return true;
896   auto *F = dyn_cast<Function>(GV);
897   if (!F)
898     return error("expected an IR function reference");
899   lex();
900   if (expectAndConsume(MIToken::comma))
901     return true;
902   BasicBlock *BB = nullptr;
903   if (Token.isNot(MIToken::IRBlock) && Token.isNot(MIToken::NamedIRBlock))
904     return error("expected an IR block reference");
905   if (parseIRBlock(BB, *F))
906     return true;
907   lex();
908   if (expectAndConsume(MIToken::rparen))
909     return true;
910   Dest = MachineOperand::CreateBA(BlockAddress::get(F, BB), /*Offset=*/0);
911   if (parseOperandsOffset(Dest))
912     return true;
913   return false;
914 }
915
916 bool MIParser::parseTargetIndexOperand(MachineOperand &Dest) {
917   assert(Token.is(MIToken::kw_target_index));
918   lex();
919   if (expectAndConsume(MIToken::lparen))
920     return true;
921   if (Token.isNot(MIToken::Identifier))
922     return error("expected the name of the target index");
923   int Index = 0;
924   if (getTargetIndex(Token.stringValue(), Index))
925     return error("use of undefined target index '" + Token.stringValue() + "'");
926   lex();
927   if (expectAndConsume(MIToken::rparen))
928     return true;
929   Dest = MachineOperand::CreateTargetIndex(unsigned(Index), /*Offset=*/0);
930   if (parseOperandsOffset(Dest))
931     return true;
932   return false;
933 }
934
935 bool MIParser::parseLiveoutRegisterMaskOperand(MachineOperand &Dest) {
936   assert(Token.is(MIToken::kw_liveout));
937   const auto *TRI = MF.getSubtarget().getRegisterInfo();
938   assert(TRI && "Expected target register info");
939   uint32_t *Mask = MF.allocateRegisterMask(TRI->getNumRegs());
940   lex();
941   if (expectAndConsume(MIToken::lparen))
942     return true;
943   while (true) {
944     if (Token.isNot(MIToken::NamedRegister))
945       return error("expected a named register");
946     unsigned Reg = 0;
947     if (parseRegister(Reg))
948       return true;
949     lex();
950     Mask[Reg / 32] |= 1U << (Reg % 32);
951     // TODO: Report an error if the same register is used more than once.
952     if (Token.isNot(MIToken::comma))
953       break;
954     lex();
955   }
956   if (expectAndConsume(MIToken::rparen))
957     return true;
958   Dest = MachineOperand::CreateRegLiveOut(Mask);
959   return false;
960 }
961
962 bool MIParser::parseMachineOperand(MachineOperand &Dest) {
963   switch (Token.kind()) {
964   case MIToken::kw_implicit:
965   case MIToken::kw_implicit_define:
966   case MIToken::kw_dead:
967   case MIToken::kw_killed:
968   case MIToken::kw_undef:
969   case MIToken::kw_early_clobber:
970   case MIToken::kw_debug_use:
971   case MIToken::underscore:
972   case MIToken::NamedRegister:
973   case MIToken::VirtualRegister:
974     return parseRegisterOperand(Dest);
975   case MIToken::IntegerLiteral:
976     return parseImmediateOperand(Dest);
977   case MIToken::IntegerType:
978     return parseTypedImmediateOperand(Dest);
979   case MIToken::kw_half:
980   case MIToken::kw_float:
981   case MIToken::kw_double:
982   case MIToken::kw_x86_fp80:
983   case MIToken::kw_fp128:
984   case MIToken::kw_ppc_fp128:
985     return parseFPImmediateOperand(Dest);
986   case MIToken::MachineBasicBlock:
987     return parseMBBOperand(Dest);
988   case MIToken::StackObject:
989     return parseStackObjectOperand(Dest);
990   case MIToken::FixedStackObject:
991     return parseFixedStackObjectOperand(Dest);
992   case MIToken::GlobalValue:
993   case MIToken::NamedGlobalValue:
994     return parseGlobalAddressOperand(Dest);
995   case MIToken::ConstantPoolItem:
996     return parseConstantPoolIndexOperand(Dest);
997   case MIToken::JumpTableIndex:
998     return parseJumpTableIndexOperand(Dest);
999   case MIToken::ExternalSymbol:
1000     return parseExternalSymbolOperand(Dest);
1001   case MIToken::exclaim:
1002     return parseMetadataOperand(Dest);
1003   case MIToken::kw_cfi_offset:
1004   case MIToken::kw_cfi_def_cfa_register:
1005   case MIToken::kw_cfi_def_cfa_offset:
1006   case MIToken::kw_cfi_def_cfa:
1007     return parseCFIOperand(Dest);
1008   case MIToken::kw_blockaddress:
1009     return parseBlockAddressOperand(Dest);
1010   case MIToken::kw_target_index:
1011     return parseTargetIndexOperand(Dest);
1012   case MIToken::kw_liveout:
1013     return parseLiveoutRegisterMaskOperand(Dest);
1014   case MIToken::Error:
1015     return true;
1016   case MIToken::Identifier:
1017     if (const auto *RegMask = getRegMask(Token.stringValue())) {
1018       Dest = MachineOperand::CreateRegMask(RegMask);
1019       lex();
1020       break;
1021     }
1022   // fallthrough
1023   default:
1024     // TODO: parse the other machine operands.
1025     return error("expected a machine operand");
1026   }
1027   return false;
1028 }
1029
1030 bool MIParser::parseMachineOperandAndTargetFlags(MachineOperand &Dest) {
1031   unsigned TF = 0;
1032   bool HasTargetFlags = false;
1033   if (Token.is(MIToken::kw_target_flags)) {
1034     HasTargetFlags = true;
1035     lex();
1036     if (expectAndConsume(MIToken::lparen))
1037       return true;
1038     if (Token.isNot(MIToken::Identifier))
1039       return error("expected the name of the target flag");
1040     if (getDirectTargetFlag(Token.stringValue(), TF))
1041       return error("use of undefined target flag '" + Token.stringValue() +
1042                    "'");
1043     lex();
1044     // TODO: Parse target's bit target flags.
1045     if (expectAndConsume(MIToken::rparen))
1046       return true;
1047   }
1048   auto Loc = Token.location();
1049   if (parseMachineOperand(Dest))
1050     return true;
1051   if (!HasTargetFlags)
1052     return false;
1053   if (Dest.isReg())
1054     return error(Loc, "register operands can't have target flags");
1055   Dest.setTargetFlags(TF);
1056   return false;
1057 }
1058
1059 bool MIParser::parseOffset(int64_t &Offset) {
1060   if (Token.isNot(MIToken::plus) && Token.isNot(MIToken::minus))
1061     return false;
1062   StringRef Sign = Token.range();
1063   bool IsNegative = Token.is(MIToken::minus);
1064   lex();
1065   if (Token.isNot(MIToken::IntegerLiteral))
1066     return error("expected an integer literal after '" + Sign + "'");
1067   if (Token.integerValue().getMinSignedBits() > 64)
1068     return error("expected 64-bit integer (too large)");
1069   Offset = Token.integerValue().getExtValue();
1070   if (IsNegative)
1071     Offset = -Offset;
1072   lex();
1073   return false;
1074 }
1075
1076 bool MIParser::parseOperandsOffset(MachineOperand &Op) {
1077   int64_t Offset = 0;
1078   if (parseOffset(Offset))
1079     return true;
1080   Op.setOffset(Offset);
1081   return false;
1082 }
1083
1084 bool MIParser::parseIRValue(Value *&V) {
1085   switch (Token.kind()) {
1086   case MIToken::NamedIRValue: {
1087     V = MF.getFunction()->getValueSymbolTable().lookup(Token.stringValue());
1088     if (!V)
1089       return error(Twine("use of undefined IR value '") + Token.range() + "'");
1090     break;
1091   }
1092   // TODO: Parse unnamed IR value references.
1093   default:
1094     llvm_unreachable("The current token should be an IR block reference");
1095   }
1096   return false;
1097 }
1098
1099 bool MIParser::getUint64(uint64_t &Result) {
1100   assert(Token.hasIntegerValue());
1101   if (Token.integerValue().getActiveBits() > 64)
1102     return error("expected 64-bit integer (too large)");
1103   Result = Token.integerValue().getZExtValue();
1104   return false;
1105 }
1106
1107 bool MIParser::parseMemoryOperandFlag(unsigned &Flags) {
1108   const unsigned OldFlags = Flags;
1109   switch (Token.kind()) {
1110   case MIToken::kw_volatile:
1111     Flags |= MachineMemOperand::MOVolatile;
1112     break;
1113   case MIToken::kw_non_temporal:
1114     Flags |= MachineMemOperand::MONonTemporal;
1115     break;
1116   case MIToken::kw_invariant:
1117     Flags |= MachineMemOperand::MOInvariant;
1118     break;
1119   // TODO: parse the target specific memory operand flags.
1120   default:
1121     llvm_unreachable("The current token should be a memory operand flag");
1122   }
1123   if (OldFlags == Flags)
1124     // We know that the same flag is specified more than once when the flags
1125     // weren't modified.
1126     return error("duplicate '" + Token.stringValue() + "' memory operand flag");
1127   lex();
1128   return false;
1129 }
1130
1131 bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) {
1132   switch (Token.kind()) {
1133   case MIToken::kw_stack:
1134     PSV = MF.getPSVManager().getStack();
1135     break;
1136   case MIToken::kw_got:
1137     PSV = MF.getPSVManager().getGOT();
1138     break;
1139   case MIToken::kw_jump_table:
1140     PSV = MF.getPSVManager().getJumpTable();
1141     break;
1142   case MIToken::kw_constant_pool:
1143     PSV = MF.getPSVManager().getConstantPool();
1144     break;
1145   case MIToken::FixedStackObject: {
1146     int FI;
1147     if (parseFixedStackFrameIndex(FI))
1148       return true;
1149     PSV = MF.getPSVManager().getFixedStack(FI);
1150     // The token was already consumed, so use return here instead of break.
1151     return false;
1152   }
1153   // TODO: Parse the other pseudo source values.
1154   default:
1155     llvm_unreachable("The current token should be pseudo source value");
1156   }
1157   lex();
1158   return false;
1159 }
1160
1161 bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) {
1162   if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack) ||
1163       Token.is(MIToken::kw_got) || Token.is(MIToken::kw_jump_table) ||
1164       Token.is(MIToken::FixedStackObject)) {
1165     const PseudoSourceValue *PSV = nullptr;
1166     if (parseMemoryPseudoSourceValue(PSV))
1167       return true;
1168     int64_t Offset = 0;
1169     if (parseOffset(Offset))
1170       return true;
1171     Dest = MachinePointerInfo(PSV, Offset);
1172     return false;
1173   }
1174   if (Token.isNot(MIToken::NamedIRValue))
1175     return error("expected an IR value reference");
1176   Value *V = nullptr;
1177   if (parseIRValue(V))
1178     return true;
1179   if (!V->getType()->isPointerTy())
1180     return error("expected a pointer IR value");
1181   lex();
1182   int64_t Offset = 0;
1183   if (parseOffset(Offset))
1184     return true;
1185   Dest = MachinePointerInfo(V, Offset);
1186   return false;
1187 }
1188
1189 bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) {
1190   if (expectAndConsume(MIToken::lparen))
1191     return true;
1192   unsigned Flags = 0;
1193   while (Token.isMemoryOperandFlag()) {
1194     if (parseMemoryOperandFlag(Flags))
1195       return true;
1196   }
1197   if (Token.isNot(MIToken::Identifier) ||
1198       (Token.stringValue() != "load" && Token.stringValue() != "store"))
1199     return error("expected 'load' or 'store' memory operation");
1200   if (Token.stringValue() == "load")
1201     Flags |= MachineMemOperand::MOLoad;
1202   else
1203     Flags |= MachineMemOperand::MOStore;
1204   lex();
1205
1206   if (Token.isNot(MIToken::IntegerLiteral))
1207     return error("expected the size integer literal after memory operation");
1208   uint64_t Size;
1209   if (getUint64(Size))
1210     return true;
1211   lex();
1212
1213   const char *Word = Flags & MachineMemOperand::MOLoad ? "from" : "into";
1214   if (Token.isNot(MIToken::Identifier) || Token.stringValue() != Word)
1215     return error(Twine("expected '") + Word + "'");
1216   lex();
1217
1218   MachinePointerInfo Ptr = MachinePointerInfo();
1219   if (parseMachinePointerInfo(Ptr))
1220     return true;
1221   unsigned BaseAlignment = Size;
1222   if (Token.is(MIToken::comma)) {
1223     lex();
1224     if (Token.isNot(MIToken::kw_align))
1225       return error("expected 'align'");
1226     lex();
1227     if (Token.isNot(MIToken::IntegerLiteral))
1228       return error("expected an integer literal after 'align'");
1229     if (getUnsigned(BaseAlignment))
1230       return true;
1231     lex();
1232   }
1233   // TODO: Parse the attached metadata nodes.
1234   if (expectAndConsume(MIToken::rparen))
1235     return true;
1236   Dest = MF.getMachineMemOperand(Ptr, Flags, Size, BaseAlignment);
1237   return false;
1238 }
1239
1240 void MIParser::initNames2InstrOpCodes() {
1241   if (!Names2InstrOpCodes.empty())
1242     return;
1243   const auto *TII = MF.getSubtarget().getInstrInfo();
1244   assert(TII && "Expected target instruction info");
1245   for (unsigned I = 0, E = TII->getNumOpcodes(); I < E; ++I)
1246     Names2InstrOpCodes.insert(std::make_pair(StringRef(TII->getName(I)), I));
1247 }
1248
1249 bool MIParser::parseInstrName(StringRef InstrName, unsigned &OpCode) {
1250   initNames2InstrOpCodes();
1251   auto InstrInfo = Names2InstrOpCodes.find(InstrName);
1252   if (InstrInfo == Names2InstrOpCodes.end())
1253     return true;
1254   OpCode = InstrInfo->getValue();
1255   return false;
1256 }
1257
1258 void MIParser::initNames2Regs() {
1259   if (!Names2Regs.empty())
1260     return;
1261   // The '%noreg' register is the register 0.
1262   Names2Regs.insert(std::make_pair("noreg", 0));
1263   const auto *TRI = MF.getSubtarget().getRegisterInfo();
1264   assert(TRI && "Expected target register info");
1265   for (unsigned I = 0, E = TRI->getNumRegs(); I < E; ++I) {
1266     bool WasInserted =
1267         Names2Regs.insert(std::make_pair(StringRef(TRI->getName(I)).lower(), I))
1268             .second;
1269     (void)WasInserted;
1270     assert(WasInserted && "Expected registers to be unique case-insensitively");
1271   }
1272 }
1273
1274 bool MIParser::getRegisterByName(StringRef RegName, unsigned &Reg) {
1275   initNames2Regs();
1276   auto RegInfo = Names2Regs.find(RegName);
1277   if (RegInfo == Names2Regs.end())
1278     return true;
1279   Reg = RegInfo->getValue();
1280   return false;
1281 }
1282
1283 void MIParser::initNames2RegMasks() {
1284   if (!Names2RegMasks.empty())
1285     return;
1286   const auto *TRI = MF.getSubtarget().getRegisterInfo();
1287   assert(TRI && "Expected target register info");
1288   ArrayRef<const uint32_t *> RegMasks = TRI->getRegMasks();
1289   ArrayRef<const char *> RegMaskNames = TRI->getRegMaskNames();
1290   assert(RegMasks.size() == RegMaskNames.size());
1291   for (size_t I = 0, E = RegMasks.size(); I < E; ++I)
1292     Names2RegMasks.insert(
1293         std::make_pair(StringRef(RegMaskNames[I]).lower(), RegMasks[I]));
1294 }
1295
1296 const uint32_t *MIParser::getRegMask(StringRef Identifier) {
1297   initNames2RegMasks();
1298   auto RegMaskInfo = Names2RegMasks.find(Identifier);
1299   if (RegMaskInfo == Names2RegMasks.end())
1300     return nullptr;
1301   return RegMaskInfo->getValue();
1302 }
1303
1304 void MIParser::initNames2SubRegIndices() {
1305   if (!Names2SubRegIndices.empty())
1306     return;
1307   const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
1308   for (unsigned I = 1, E = TRI->getNumSubRegIndices(); I < E; ++I)
1309     Names2SubRegIndices.insert(
1310         std::make_pair(StringRef(TRI->getSubRegIndexName(I)).lower(), I));
1311 }
1312
1313 unsigned MIParser::getSubRegIndex(StringRef Name) {
1314   initNames2SubRegIndices();
1315   auto SubRegInfo = Names2SubRegIndices.find(Name);
1316   if (SubRegInfo == Names2SubRegIndices.end())
1317     return 0;
1318   return SubRegInfo->getValue();
1319 }
1320
1321 static void initSlots2BasicBlocks(
1322     const Function &F,
1323     DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) {
1324   ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false);
1325   MST.incorporateFunction(F);
1326   for (auto &BB : F) {
1327     if (BB.hasName())
1328       continue;
1329     int Slot = MST.getLocalSlot(&BB);
1330     if (Slot == -1)
1331       continue;
1332     Slots2BasicBlocks.insert(std::make_pair(unsigned(Slot), &BB));
1333   }
1334 }
1335
1336 static const BasicBlock *getIRBlockFromSlot(
1337     unsigned Slot,
1338     const DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) {
1339   auto BlockInfo = Slots2BasicBlocks.find(Slot);
1340   if (BlockInfo == Slots2BasicBlocks.end())
1341     return nullptr;
1342   return BlockInfo->second;
1343 }
1344
1345 const BasicBlock *MIParser::getIRBlock(unsigned Slot) {
1346   if (Slots2BasicBlocks.empty())
1347     initSlots2BasicBlocks(*MF.getFunction(), Slots2BasicBlocks);
1348   return getIRBlockFromSlot(Slot, Slots2BasicBlocks);
1349 }
1350
1351 const BasicBlock *MIParser::getIRBlock(unsigned Slot, const Function &F) {
1352   if (&F == MF.getFunction())
1353     return getIRBlock(Slot);
1354   DenseMap<unsigned, const BasicBlock *> CustomSlots2BasicBlocks;
1355   initSlots2BasicBlocks(F, CustomSlots2BasicBlocks);
1356   return getIRBlockFromSlot(Slot, CustomSlots2BasicBlocks);
1357 }
1358
1359 void MIParser::initNames2TargetIndices() {
1360   if (!Names2TargetIndices.empty())
1361     return;
1362   const auto *TII = MF.getSubtarget().getInstrInfo();
1363   assert(TII && "Expected target instruction info");
1364   auto Indices = TII->getSerializableTargetIndices();
1365   for (const auto &I : Indices)
1366     Names2TargetIndices.insert(std::make_pair(StringRef(I.second), I.first));
1367 }
1368
1369 bool MIParser::getTargetIndex(StringRef Name, int &Index) {
1370   initNames2TargetIndices();
1371   auto IndexInfo = Names2TargetIndices.find(Name);
1372   if (IndexInfo == Names2TargetIndices.end())
1373     return true;
1374   Index = IndexInfo->second;
1375   return false;
1376 }
1377
1378 void MIParser::initNames2DirectTargetFlags() {
1379   if (!Names2DirectTargetFlags.empty())
1380     return;
1381   const auto *TII = MF.getSubtarget().getInstrInfo();
1382   assert(TII && "Expected target instruction info");
1383   auto Flags = TII->getSerializableDirectMachineOperandTargetFlags();
1384   for (const auto &I : Flags)
1385     Names2DirectTargetFlags.insert(
1386         std::make_pair(StringRef(I.second), I.first));
1387 }
1388
1389 bool MIParser::getDirectTargetFlag(StringRef Name, unsigned &Flag) {
1390   initNames2DirectTargetFlags();
1391   auto FlagInfo = Names2DirectTargetFlags.find(Name);
1392   if (FlagInfo == Names2DirectTargetFlags.end())
1393     return true;
1394   Flag = FlagInfo->second;
1395   return false;
1396 }
1397
1398 bool llvm::parseMachineInstr(MachineInstr *&MI, SourceMgr &SM,
1399                              MachineFunction &MF, StringRef Src,
1400                              const PerFunctionMIParsingState &PFS,
1401                              const SlotMapping &IRSlots, SMDiagnostic &Error) {
1402   return MIParser(SM, MF, Error, Src, PFS, IRSlots).parse(MI);
1403 }
1404
1405 bool llvm::parseMBBReference(MachineBasicBlock *&MBB, SourceMgr &SM,
1406                              MachineFunction &MF, StringRef Src,
1407                              const PerFunctionMIParsingState &PFS,
1408                              const SlotMapping &IRSlots, SMDiagnostic &Error) {
1409   return MIParser(SM, MF, Error, Src, PFS, IRSlots).parseStandaloneMBB(MBB);
1410 }
1411
1412 bool llvm::parseNamedRegisterReference(unsigned &Reg, SourceMgr &SM,
1413                                        MachineFunction &MF, StringRef Src,
1414                                        const PerFunctionMIParsingState &PFS,
1415                                        const SlotMapping &IRSlots,
1416                                        SMDiagnostic &Error) {
1417   return MIParser(SM, MF, Error, Src, PFS, IRSlots)
1418       .parseStandaloneNamedRegister(Reg);
1419 }
1420
1421 bool llvm::parseVirtualRegisterReference(unsigned &Reg, SourceMgr &SM,
1422                                          MachineFunction &MF, StringRef Src,
1423                                          const PerFunctionMIParsingState &PFS,
1424                                          const SlotMapping &IRSlots,
1425                                          SMDiagnostic &Error) {
1426   return MIParser(SM, MF, Error, Src, PFS, IRSlots)
1427       .parseStandaloneVirtualRegister(Reg);
1428 }
1429
1430 bool llvm::parseIRBlockReference(const BasicBlock *&BB, SourceMgr &SM,
1431                                  MachineFunction &MF, StringRef Src,
1432                                  const PerFunctionMIParsingState &PFS,
1433                                  const SlotMapping &IRSlots,
1434                                  SMDiagnostic &Error) {
1435   return MIParser(SM, MF, Error, Src, PFS, IRSlots)
1436       .parseStandaloneIRBlockReference(BB);
1437 }