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