1 //===- MIParser.cpp - Machine instructions parser implementation ----------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file implements the parsing of machine instructions.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #include "llvm/CodeGen/MIRParser/MIParser.h"
14 #include "MILexer.h"
15 #include "llvm/ADT/APInt.h"
16 #include "llvm/ADT/APSInt.h"
17 #include "llvm/ADT/ArrayRef.h"
18 #include "llvm/ADT/DenseMap.h"
19 #include "llvm/ADT/None.h"
20 #include "llvm/ADT/Optional.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/StringMap.h"
23 #include "llvm/ADT/StringRef.h"
24 #include "llvm/ADT/StringSwitch.h"
25 #include "llvm/ADT/Twine.h"
26 #include "llvm/Analysis/MemoryLocation.h"
27 #include "llvm/AsmParser/Parser.h"
28 #include "llvm/AsmParser/SlotMapping.h"
29 #include "llvm/CodeGen/MIRFormatter.h"
30 #include "llvm/CodeGen/MIRPrinter.h"
31 #include "llvm/CodeGen/MachineBasicBlock.h"
32 #include "llvm/CodeGen/MachineFrameInfo.h"
33 #include "llvm/CodeGen/MachineFunction.h"
34 #include "llvm/CodeGen/MachineInstr.h"
35 #include "llvm/CodeGen/MachineInstrBuilder.h"
36 #include "llvm/CodeGen/MachineMemOperand.h"
37 #include "llvm/CodeGen/MachineOperand.h"
38 #include "llvm/CodeGen/MachineRegisterInfo.h"
39 #include "llvm/CodeGen/RegisterBank.h"
40 #include "llvm/CodeGen/RegisterBankInfo.h"
41 #include "llvm/CodeGen/TargetInstrInfo.h"
42 #include "llvm/CodeGen/TargetRegisterInfo.h"
43 #include "llvm/CodeGen/TargetSubtargetInfo.h"
44 #include "llvm/IR/BasicBlock.h"
45 #include "llvm/IR/Constants.h"
46 #include "llvm/IR/DataLayout.h"
47 #include "llvm/IR/DebugInfoMetadata.h"
48 #include "llvm/IR/DebugLoc.h"
49 #include "llvm/IR/Function.h"
50 #include "llvm/IR/InstrTypes.h"
51 #include "llvm/IR/Instructions.h"
52 #include "llvm/IR/Intrinsics.h"
53 #include "llvm/IR/Metadata.h"
54 #include "llvm/IR/Module.h"
55 #include "llvm/IR/ModuleSlotTracker.h"
56 #include "llvm/IR/Type.h"
57 #include "llvm/IR/Value.h"
58 #include "llvm/IR/ValueSymbolTable.h"
59 #include "llvm/MC/LaneBitmask.h"
60 #include "llvm/MC/MCContext.h"
61 #include "llvm/MC/MCDwarf.h"
62 #include "llvm/MC/MCInstrDesc.h"
63 #include "llvm/Support/AtomicOrdering.h"
64 #include "llvm/Support/BranchProbability.h"
65 #include "llvm/Support/Casting.h"
66 #include "llvm/Support/ErrorHandling.h"
67 #include "llvm/Support/LowLevelTypeImpl.h"
68 #include "llvm/Support/MemoryBuffer.h"
69 #include "llvm/Support/SMLoc.h"
70 #include "llvm/Support/SourceMgr.h"
71 #include "llvm/Target/TargetIntrinsicInfo.h"
72 #include "llvm/Target/TargetMachine.h"
73 #include <cassert>
74 #include <cctype>
75 #include <cstddef>
76 #include <cstdint>
77 #include <limits>
78 #include <string>
79 #include <utility>
80 
81 using namespace llvm;
82 
83 void PerTargetMIParsingState::setTarget(
84   const TargetSubtargetInfo &NewSubtarget) {
85 
86   // If the subtarget changed, over conservatively assume everything is invalid.
87   if (&Subtarget == &NewSubtarget)
88     return;
89 
90   Names2InstrOpCodes.clear();
91   Names2Regs.clear();
92   Names2RegMasks.clear();
93   Names2SubRegIndices.clear();
94   Names2TargetIndices.clear();
95   Names2DirectTargetFlags.clear();
96   Names2BitmaskTargetFlags.clear();
97   Names2MMOTargetFlags.clear();
98 
99   initNames2RegClasses();
100   initNames2RegBanks();
101 }
102 
103 void PerTargetMIParsingState::initNames2Regs() {
104   if (!Names2Regs.empty())
105     return;
106 
107   // The '%noreg' register is the register 0.
108   Names2Regs.insert(std::make_pair("noreg", 0));
109   const auto *TRI = Subtarget.getRegisterInfo();
110   assert(TRI && "Expected target register info");
111 
112   for (unsigned I = 0, E = TRI->getNumRegs(); I < E; ++I) {
113     bool WasInserted =
114         Names2Regs.insert(std::make_pair(StringRef(TRI->getName(I)).lower(), I))
115             .second;
116     (void)WasInserted;
117     assert(WasInserted && "Expected registers to be unique case-insensitively");
118   }
119 }
120 
121 bool PerTargetMIParsingState::getRegisterByName(StringRef RegName,
122                                                 Register &Reg) {
123   initNames2Regs();
124   auto RegInfo = Names2Regs.find(RegName);
125   if (RegInfo == Names2Regs.end())
126     return true;
127   Reg = RegInfo->getValue();
128   return false;
129 }
130 
131 void PerTargetMIParsingState::initNames2InstrOpCodes() {
132   if (!Names2InstrOpCodes.empty())
133     return;
134   const auto *TII = Subtarget.getInstrInfo();
135   assert(TII && "Expected target instruction info");
136   for (unsigned I = 0, E = TII->getNumOpcodes(); I < E; ++I)
137     Names2InstrOpCodes.insert(std::make_pair(StringRef(TII->getName(I)), I));
138 }
139 
140 bool PerTargetMIParsingState::parseInstrName(StringRef InstrName,
141                                              unsigned &OpCode) {
142   initNames2InstrOpCodes();
143   auto InstrInfo = Names2InstrOpCodes.find(InstrName);
144   if (InstrInfo == Names2InstrOpCodes.end())
145     return true;
146   OpCode = InstrInfo->getValue();
147   return false;
148 }
149 
150 void PerTargetMIParsingState::initNames2RegMasks() {
151   if (!Names2RegMasks.empty())
152     return;
153   const auto *TRI = Subtarget.getRegisterInfo();
154   assert(TRI && "Expected target register info");
155   ArrayRef<const uint32_t *> RegMasks = TRI->getRegMasks();
156   ArrayRef<const char *> RegMaskNames = TRI->getRegMaskNames();
157   assert(RegMasks.size() == RegMaskNames.size());
158   for (size_t I = 0, E = RegMasks.size(); I < E; ++I)
159     Names2RegMasks.insert(
160         std::make_pair(StringRef(RegMaskNames[I]).lower(), RegMasks[I]));
161 }
162 
163 const uint32_t *PerTargetMIParsingState::getRegMask(StringRef Identifier) {
164   initNames2RegMasks();
165   auto RegMaskInfo = Names2RegMasks.find(Identifier);
166   if (RegMaskInfo == Names2RegMasks.end())
167     return nullptr;
168   return RegMaskInfo->getValue();
169 }
170 
171 void PerTargetMIParsingState::initNames2SubRegIndices() {
172   if (!Names2SubRegIndices.empty())
173     return;
174   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
175   for (unsigned I = 1, E = TRI->getNumSubRegIndices(); I < E; ++I)
176     Names2SubRegIndices.insert(
177         std::make_pair(TRI->getSubRegIndexName(I), I));
178 }
179 
180 unsigned PerTargetMIParsingState::getSubRegIndex(StringRef Name) {
181   initNames2SubRegIndices();
182   auto SubRegInfo = Names2SubRegIndices.find(Name);
183   if (SubRegInfo == Names2SubRegIndices.end())
184     return 0;
185   return SubRegInfo->getValue();
186 }
187 
188 void PerTargetMIParsingState::initNames2TargetIndices() {
189   if (!Names2TargetIndices.empty())
190     return;
191   const auto *TII = Subtarget.getInstrInfo();
192   assert(TII && "Expected target instruction info");
193   auto Indices = TII->getSerializableTargetIndices();
194   for (const auto &I : Indices)
195     Names2TargetIndices.insert(std::make_pair(StringRef(I.second), I.first));
196 }
197 
198 bool PerTargetMIParsingState::getTargetIndex(StringRef Name, int &Index) {
199   initNames2TargetIndices();
200   auto IndexInfo = Names2TargetIndices.find(Name);
201   if (IndexInfo == Names2TargetIndices.end())
202     return true;
203   Index = IndexInfo->second;
204   return false;
205 }
206 
207 void PerTargetMIParsingState::initNames2DirectTargetFlags() {
208   if (!Names2DirectTargetFlags.empty())
209     return;
210 
211   const auto *TII = Subtarget.getInstrInfo();
212   assert(TII && "Expected target instruction info");
213   auto Flags = TII->getSerializableDirectMachineOperandTargetFlags();
214   for (const auto &I : Flags)
215     Names2DirectTargetFlags.insert(
216         std::make_pair(StringRef(I.second), I.first));
217 }
218 
219 bool PerTargetMIParsingState::getDirectTargetFlag(StringRef Name,
220                                                   unsigned &Flag) {
221   initNames2DirectTargetFlags();
222   auto FlagInfo = Names2DirectTargetFlags.find(Name);
223   if (FlagInfo == Names2DirectTargetFlags.end())
224     return true;
225   Flag = FlagInfo->second;
226   return false;
227 }
228 
229 void PerTargetMIParsingState::initNames2BitmaskTargetFlags() {
230   if (!Names2BitmaskTargetFlags.empty())
231     return;
232 
233   const auto *TII = Subtarget.getInstrInfo();
234   assert(TII && "Expected target instruction info");
235   auto Flags = TII->getSerializableBitmaskMachineOperandTargetFlags();
236   for (const auto &I : Flags)
237     Names2BitmaskTargetFlags.insert(
238         std::make_pair(StringRef(I.second), I.first));
239 }
240 
241 bool PerTargetMIParsingState::getBitmaskTargetFlag(StringRef Name,
242                                                    unsigned &Flag) {
243   initNames2BitmaskTargetFlags();
244   auto FlagInfo = Names2BitmaskTargetFlags.find(Name);
245   if (FlagInfo == Names2BitmaskTargetFlags.end())
246     return true;
247   Flag = FlagInfo->second;
248   return false;
249 }
250 
251 void PerTargetMIParsingState::initNames2MMOTargetFlags() {
252   if (!Names2MMOTargetFlags.empty())
253     return;
254 
255   const auto *TII = Subtarget.getInstrInfo();
256   assert(TII && "Expected target instruction info");
257   auto Flags = TII->getSerializableMachineMemOperandTargetFlags();
258   for (const auto &I : Flags)
259     Names2MMOTargetFlags.insert(std::make_pair(StringRef(I.second), I.first));
260 }
261 
262 bool PerTargetMIParsingState::getMMOTargetFlag(StringRef Name,
263                                                MachineMemOperand::Flags &Flag) {
264   initNames2MMOTargetFlags();
265   auto FlagInfo = Names2MMOTargetFlags.find(Name);
266   if (FlagInfo == Names2MMOTargetFlags.end())
267     return true;
268   Flag = FlagInfo->second;
269   return false;
270 }
271 
272 void PerTargetMIParsingState::initNames2RegClasses() {
273   if (!Names2RegClasses.empty())
274     return;
275 
276   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
277   for (unsigned I = 0, E = TRI->getNumRegClasses(); I < E; ++I) {
278     const auto *RC = TRI->getRegClass(I);
279     Names2RegClasses.insert(
280         std::make_pair(StringRef(TRI->getRegClassName(RC)).lower(), RC));
281   }
282 }
283 
284 void PerTargetMIParsingState::initNames2RegBanks() {
285   if (!Names2RegBanks.empty())
286     return;
287 
288   const RegisterBankInfo *RBI = Subtarget.getRegBankInfo();
289   // If the target does not support GlobalISel, we may not have a
290   // register bank info.
291   if (!RBI)
292     return;
293 
294   for (unsigned I = 0, E = RBI->getNumRegBanks(); I < E; ++I) {
295     const auto &RegBank = RBI->getRegBank(I);
296     Names2RegBanks.insert(
297         std::make_pair(StringRef(RegBank.getName()).lower(), &RegBank));
298   }
299 }
300 
301 const TargetRegisterClass *
302 PerTargetMIParsingState::getRegClass(StringRef Name) {
303   auto RegClassInfo = Names2RegClasses.find(Name);
304   if (RegClassInfo == Names2RegClasses.end())
305     return nullptr;
306   return RegClassInfo->getValue();
307 }
308 
309 const RegisterBank *PerTargetMIParsingState::getRegBank(StringRef Name) {
310   auto RegBankInfo = Names2RegBanks.find(Name);
311   if (RegBankInfo == Names2RegBanks.end())
312     return nullptr;
313   return RegBankInfo->getValue();
314 }
315 
316 PerFunctionMIParsingState::PerFunctionMIParsingState(MachineFunction &MF,
317     SourceMgr &SM, const SlotMapping &IRSlots, PerTargetMIParsingState &T)
318   : MF(MF), SM(&SM), IRSlots(IRSlots), Target(T) {
319 }
320 
321 VRegInfo &PerFunctionMIParsingState::getVRegInfo(Register Num) {
322   auto I = VRegInfos.insert(std::make_pair(Num, nullptr));
323   if (I.second) {
324     MachineRegisterInfo &MRI = MF.getRegInfo();
325     VRegInfo *Info = new (Allocator) VRegInfo;
326     Info->VReg = MRI.createIncompleteVirtualRegister();
327     I.first->second = Info;
328   }
329   return *I.first->second;
330 }
331 
332 VRegInfo &PerFunctionMIParsingState::getVRegInfoNamed(StringRef RegName) {
333   assert(RegName != "" && "Expected named reg.");
334 
335   auto I = VRegInfosNamed.insert(std::make_pair(RegName.str(), nullptr));
336   if (I.second) {
337     VRegInfo *Info = new (Allocator) VRegInfo;
338     Info->VReg = MF.getRegInfo().createIncompleteVirtualRegister(RegName);
339     I.first->second = Info;
340   }
341   return *I.first->second;
342 }
343 
344 static void mapValueToSlot(const Value *V, ModuleSlotTracker &MST,
345                            DenseMap<unsigned, const Value *> &Slots2Values) {
346   int Slot = MST.getLocalSlot(V);
347   if (Slot == -1)
348     return;
349   Slots2Values.insert(std::make_pair(unsigned(Slot), V));
350 }
351 
352 /// Creates the mapping from slot numbers to function's unnamed IR values.
353 static void initSlots2Values(const Function &F,
354                              DenseMap<unsigned, const Value *> &Slots2Values) {
355   ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false);
356   MST.incorporateFunction(F);
357   for (const auto &Arg : F.args())
358     mapValueToSlot(&Arg, MST, Slots2Values);
359   for (const auto &BB : F) {
360     mapValueToSlot(&BB, MST, Slots2Values);
361     for (const auto &I : BB)
362       mapValueToSlot(&I, MST, Slots2Values);
363   }
364 }
365 
366 const Value* PerFunctionMIParsingState::getIRValue(unsigned Slot) {
367   if (Slots2Values.empty())
368     initSlots2Values(MF.getFunction(), Slots2Values);
369   return Slots2Values.lookup(Slot);
370 }
371 
372 namespace {
373 
374 /// A wrapper struct around the 'MachineOperand' struct that includes a source
375 /// range and other attributes.
376 struct ParsedMachineOperand {
377   MachineOperand Operand;
378   StringRef::iterator Begin;
379   StringRef::iterator End;
380   Optional<unsigned> TiedDefIdx;
381 
382   ParsedMachineOperand(const MachineOperand &Operand, StringRef::iterator Begin,
383                        StringRef::iterator End, Optional<unsigned> &TiedDefIdx)
384       : Operand(Operand), Begin(Begin), End(End), TiedDefIdx(TiedDefIdx) {
385     if (TiedDefIdx)
386       assert(Operand.isReg() && Operand.isUse() &&
387              "Only used register operands can be tied");
388   }
389 };
390 
391 class MIParser {
392   MachineFunction &MF;
393   SMDiagnostic &Error;
394   StringRef Source, CurrentSource;
395   SMRange SourceRange;
396   MIToken Token;
397   PerFunctionMIParsingState &PFS;
398   /// Maps from slot numbers to function's unnamed basic blocks.
399   DenseMap<unsigned, const BasicBlock *> Slots2BasicBlocks;
400 
401 public:
402   MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error,
403            StringRef Source);
404   MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error,
405            StringRef Source, SMRange SourceRange);
406 
407   /// \p SkipChar gives the number of characters to skip before looking
408   /// for the next token.
409   void lex(unsigned SkipChar = 0);
410 
411   /// Report an error at the current location with the given message.
412   ///
413   /// This function always return true.
414   bool error(const Twine &Msg);
415 
416   /// Report an error at the given location with the given message.
417   ///
418   /// This function always return true.
419   bool error(StringRef::iterator Loc, const Twine &Msg);
420 
421   bool
422   parseBasicBlockDefinitions(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots);
423   bool parseBasicBlocks();
424   bool parse(MachineInstr *&MI);
425   bool parseStandaloneMBB(MachineBasicBlock *&MBB);
426   bool parseStandaloneNamedRegister(Register &Reg);
427   bool parseStandaloneVirtualRegister(VRegInfo *&Info);
428   bool parseStandaloneRegister(Register &Reg);
429   bool parseStandaloneStackObject(int &FI);
430   bool parseStandaloneMDNode(MDNode *&Node);
431   bool parseMachineMetadata();
432   bool parseMDTuple(MDNode *&MD, bool IsDistinct);
433   bool parseMDNodeVector(SmallVectorImpl<Metadata *> &Elts);
434   bool parseMetadata(Metadata *&MD);
435 
436   bool
437   parseBasicBlockDefinition(DenseMap<unsigned, MachineBasicBlock *> &MBBSlots);
438   bool parseBasicBlock(MachineBasicBlock &MBB,
439                        MachineBasicBlock *&AddFalthroughFrom);
440   bool parseBasicBlockLiveins(MachineBasicBlock &MBB);
441   bool parseBasicBlockSuccessors(MachineBasicBlock &MBB);
442 
443   bool parseNamedRegister(Register &Reg);
444   bool parseVirtualRegister(VRegInfo *&Info);
445   bool parseNamedVirtualRegister(VRegInfo *&Info);
446   bool parseRegister(Register &Reg, VRegInfo *&VRegInfo);
447   bool parseRegisterFlag(unsigned &Flags);
448   bool parseRegisterClassOrBank(VRegInfo &RegInfo);
449   bool parseSubRegisterIndex(unsigned &SubReg);
450   bool parseRegisterTiedDefIndex(unsigned &TiedDefIdx);
451   bool parseRegisterOperand(MachineOperand &Dest,
452                             Optional<unsigned> &TiedDefIdx, bool IsDef = false);
453   bool parseImmediateOperand(MachineOperand &Dest);
454   bool parseIRConstant(StringRef::iterator Loc, StringRef StringValue,
455                        const Constant *&C);
456   bool parseIRConstant(StringRef::iterator Loc, const Constant *&C);
457   bool parseLowLevelType(StringRef::iterator Loc, LLT &Ty);
458   bool parseTypedImmediateOperand(MachineOperand &Dest);
459   bool parseFPImmediateOperand(MachineOperand &Dest);
460   bool parseMBBReference(MachineBasicBlock *&MBB);
461   bool parseMBBOperand(MachineOperand &Dest);
462   bool parseStackFrameIndex(int &FI);
463   bool parseStackObjectOperand(MachineOperand &Dest);
464   bool parseFixedStackFrameIndex(int &FI);
465   bool parseFixedStackObjectOperand(MachineOperand &Dest);
466   bool parseGlobalValue(GlobalValue *&GV);
467   bool parseGlobalAddressOperand(MachineOperand &Dest);
468   bool parseConstantPoolIndexOperand(MachineOperand &Dest);
469   bool parseSubRegisterIndexOperand(MachineOperand &Dest);
470   bool parseJumpTableIndexOperand(MachineOperand &Dest);
471   bool parseExternalSymbolOperand(MachineOperand &Dest);
472   bool parseMCSymbolOperand(MachineOperand &Dest);
473   bool parseMDNode(MDNode *&Node);
474   bool parseDIExpression(MDNode *&Expr);
475   bool parseDILocation(MDNode *&Expr);
476   bool parseMetadataOperand(MachineOperand &Dest);
477   bool parseCFIOffset(int &Offset);
478   bool parseCFIRegister(Register &Reg);
479   bool parseCFIAddressSpace(unsigned &AddressSpace);
480   bool parseCFIEscapeValues(std::string& Values);
481   bool parseCFIOperand(MachineOperand &Dest);
482   bool parseIRBlock(BasicBlock *&BB, const Function &F);
483   bool parseBlockAddressOperand(MachineOperand &Dest);
484   bool parseIntrinsicOperand(MachineOperand &Dest);
485   bool parsePredicateOperand(MachineOperand &Dest);
486   bool parseShuffleMaskOperand(MachineOperand &Dest);
487   bool parseTargetIndexOperand(MachineOperand &Dest);
488   bool parseCustomRegisterMaskOperand(MachineOperand &Dest);
489   bool parseLiveoutRegisterMaskOperand(MachineOperand &Dest);
490   bool parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
491                            MachineOperand &Dest,
492                            Optional<unsigned> &TiedDefIdx);
493   bool parseMachineOperandAndTargetFlags(const unsigned OpCode,
494                                          const unsigned OpIdx,
495                                          MachineOperand &Dest,
496                                          Optional<unsigned> &TiedDefIdx);
497   bool parseOffset(int64_t &Offset);
498   bool parseAlignment(uint64_t &Alignment);
499   bool parseAddrspace(unsigned &Addrspace);
500   bool parseSectionID(Optional<MBBSectionID> &SID);
501   bool parseOperandsOffset(MachineOperand &Op);
502   bool parseIRValue(const Value *&V);
503   bool parseMemoryOperandFlag(MachineMemOperand::Flags &Flags);
504   bool parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV);
505   bool parseMachinePointerInfo(MachinePointerInfo &Dest);
506   bool parseOptionalScope(LLVMContext &Context, SyncScope::ID &SSID);
507   bool parseOptionalAtomicOrdering(AtomicOrdering &Order);
508   bool parseMachineMemoryOperand(MachineMemOperand *&Dest);
509   bool parsePreOrPostInstrSymbol(MCSymbol *&Symbol);
510   bool parseHeapAllocMarker(MDNode *&Node);
511 
512   bool parseTargetImmMnemonic(const unsigned OpCode, const unsigned OpIdx,
513                               MachineOperand &Dest, const MIRFormatter &MF);
514 
515 private:
516   /// Convert the integer literal in the current token into an unsigned integer.
517   ///
518   /// Return true if an error occurred.
519   bool getUnsigned(unsigned &Result);
520 
521   /// Convert the integer literal in the current token into an uint64.
522   ///
523   /// Return true if an error occurred.
524   bool getUint64(uint64_t &Result);
525 
526   /// Convert the hexadecimal literal in the current token into an unsigned
527   ///  APInt with a minimum bitwidth required to represent the value.
528   ///
529   /// Return true if the literal does not represent an integer value.
530   bool getHexUint(APInt &Result);
531 
532   /// If the current token is of the given kind, consume it and return false.
533   /// Otherwise report an error and return true.
534   bool expectAndConsume(MIToken::TokenKind TokenKind);
535 
536   /// If the current token is of the given kind, consume it and return true.
537   /// Otherwise return false.
538   bool consumeIfPresent(MIToken::TokenKind TokenKind);
539 
540   bool parseInstruction(unsigned &OpCode, unsigned &Flags);
541 
542   bool assignRegisterTies(MachineInstr &MI,
543                           ArrayRef<ParsedMachineOperand> Operands);
544 
545   bool verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands,
546                               const MCInstrDesc &MCID);
547 
548   const BasicBlock *getIRBlock(unsigned Slot);
549   const BasicBlock *getIRBlock(unsigned Slot, const Function &F);
550 
551   /// Get or create an MCSymbol for a given name.
552   MCSymbol *getOrCreateMCSymbol(StringRef Name);
553 
554   /// parseStringConstant
555   ///   ::= StringConstant
556   bool parseStringConstant(std::string &Result);
557 
558   /// Map the location in the MI string to the corresponding location specified
559   /// in `SourceRange`.
560   SMLoc mapSMLoc(StringRef::iterator Loc);
561 };
562 
563 } // end anonymous namespace
564 
565 MIParser::MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error,
566                    StringRef Source)
567     : MF(PFS.MF), Error(Error), Source(Source), CurrentSource(Source), PFS(PFS)
568 {}
569 
570 MIParser::MIParser(PerFunctionMIParsingState &PFS, SMDiagnostic &Error,
571                    StringRef Source, SMRange SourceRange)
572     : MF(PFS.MF), Error(Error), Source(Source), CurrentSource(Source),
573       SourceRange(SourceRange), PFS(PFS) {}
574 
575 void MIParser::lex(unsigned SkipChar) {
576   CurrentSource = lexMIToken(
577       CurrentSource.slice(SkipChar, StringRef::npos), Token,
578       [this](StringRef::iterator Loc, const Twine &Msg) { error(Loc, Msg); });
579 }
580 
581 bool MIParser::error(const Twine &Msg) { return error(Token.location(), Msg); }
582 
583 bool MIParser::error(StringRef::iterator Loc, const Twine &Msg) {
584   const SourceMgr &SM = *PFS.SM;
585   assert(Loc >= Source.data() && Loc <= (Source.data() + Source.size()));
586   const MemoryBuffer &Buffer = *SM.getMemoryBuffer(SM.getMainFileID());
587   if (Loc >= Buffer.getBufferStart() && Loc <= Buffer.getBufferEnd()) {
588     // Create an ordinary diagnostic when the source manager's buffer is the
589     // source string.
590     Error = SM.GetMessage(SMLoc::getFromPointer(Loc), SourceMgr::DK_Error, Msg);
591     return true;
592   }
593   // Create a diagnostic for a YAML string literal.
594   Error = SMDiagnostic(SM, SMLoc(), Buffer.getBufferIdentifier(), 1,
595                        Loc - Source.data(), SourceMgr::DK_Error, Msg.str(),
596                        Source, None, None);
597   return true;
598 }
599 
600 SMLoc MIParser::mapSMLoc(StringRef::iterator Loc) {
601   assert(SourceRange.isValid() && "Invalid source range");
602   assert(Loc >= Source.data() && Loc <= (Source.data() + Source.size()));
603   return SMLoc::getFromPointer(SourceRange.Start.getPointer() +
604                                (Loc - Source.data()));
605 }
606 
607 typedef function_ref<bool(StringRef::iterator Loc, const Twine &)>
608     ErrorCallbackType;
609 
610 static const char *toString(MIToken::TokenKind TokenKind) {
611   switch (TokenKind) {
612   case MIToken::comma:
613     return "','";
614   case MIToken::equal:
615     return "'='";
616   case MIToken::colon:
617     return "':'";
618   case MIToken::lparen:
619     return "'('";
620   case MIToken::rparen:
621     return "')'";
622   default:
623     return "<unknown token>";
624   }
625 }
626 
627 bool MIParser::expectAndConsume(MIToken::TokenKind TokenKind) {
628   if (Token.isNot(TokenKind))
629     return error(Twine("expected ") + toString(TokenKind));
630   lex();
631   return false;
632 }
633 
634 bool MIParser::consumeIfPresent(MIToken::TokenKind TokenKind) {
635   if (Token.isNot(TokenKind))
636     return false;
637   lex();
638   return true;
639 }
640 
641 // Parse Machine Basic Block Section ID.
642 bool MIParser::parseSectionID(Optional<MBBSectionID> &SID) {
643   assert(Token.is(MIToken::kw_bbsections));
644   lex();
645   if (Token.is(MIToken::IntegerLiteral)) {
646     unsigned Value = 0;
647     if (getUnsigned(Value))
648       return error("Unknown Section ID");
649     SID = MBBSectionID{Value};
650   } else {
651     const StringRef &S = Token.stringValue();
652     if (S == "Exception")
653       SID = MBBSectionID::ExceptionSectionID;
654     else if (S == "Cold")
655       SID = MBBSectionID::ColdSectionID;
656     else
657       return error("Unknown Section ID");
658   }
659   lex();
660   return false;
661 }
662 
663 bool MIParser::parseBasicBlockDefinition(
664     DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) {
665   assert(Token.is(MIToken::MachineBasicBlockLabel));
666   unsigned ID = 0;
667   if (getUnsigned(ID))
668     return true;
669   auto Loc = Token.location();
670   auto Name = Token.stringValue();
671   lex();
672   bool HasAddressTaken = false;
673   bool IsLandingPad = false;
674   bool IsInlineAsmBrIndirectTarget = false;
675   bool IsEHFuncletEntry = false;
676   Optional<MBBSectionID> SectionID;
677   uint64_t Alignment = 0;
678   BasicBlock *BB = nullptr;
679   if (consumeIfPresent(MIToken::lparen)) {
680     do {
681       // TODO: Report an error when multiple same attributes are specified.
682       switch (Token.kind()) {
683       case MIToken::kw_address_taken:
684         HasAddressTaken = true;
685         lex();
686         break;
687       case MIToken::kw_landing_pad:
688         IsLandingPad = true;
689         lex();
690         break;
691       case MIToken::kw_inlineasm_br_indirect_target:
692         IsInlineAsmBrIndirectTarget = true;
693         lex();
694         break;
695       case MIToken::kw_ehfunclet_entry:
696         IsEHFuncletEntry = true;
697         lex();
698         break;
699       case MIToken::kw_align:
700         if (parseAlignment(Alignment))
701           return true;
702         break;
703       case MIToken::IRBlock:
704         // TODO: Report an error when both name and ir block are specified.
705         if (parseIRBlock(BB, MF.getFunction()))
706           return true;
707         lex();
708         break;
709       case MIToken::kw_bbsections:
710         if (parseSectionID(SectionID))
711           return true;
712         break;
713       default:
714         break;
715       }
716     } while (consumeIfPresent(MIToken::comma));
717     if (expectAndConsume(MIToken::rparen))
718       return true;
719   }
720   if (expectAndConsume(MIToken::colon))
721     return true;
722 
723   if (!Name.empty()) {
724     BB = dyn_cast_or_null<BasicBlock>(
725         MF.getFunction().getValueSymbolTable()->lookup(Name));
726     if (!BB)
727       return error(Loc, Twine("basic block '") + Name +
728                             "' is not defined in the function '" +
729                             MF.getName() + "'");
730   }
731   auto *MBB = MF.CreateMachineBasicBlock(BB);
732   MF.insert(MF.end(), MBB);
733   bool WasInserted = MBBSlots.insert(std::make_pair(ID, MBB)).second;
734   if (!WasInserted)
735     return error(Loc, Twine("redefinition of machine basic block with id #") +
736                           Twine(ID));
737   if (Alignment)
738     MBB->setAlignment(Align(Alignment));
739   if (HasAddressTaken)
740     MBB->setHasAddressTaken();
741   MBB->setIsEHPad(IsLandingPad);
742   MBB->setIsInlineAsmBrIndirectTarget(IsInlineAsmBrIndirectTarget);
743   MBB->setIsEHFuncletEntry(IsEHFuncletEntry);
744   if (SectionID.hasValue()) {
745     MBB->setSectionID(SectionID.getValue());
746     MF.setBBSectionsType(BasicBlockSection::List);
747   }
748   return false;
749 }
750 
751 bool MIParser::parseBasicBlockDefinitions(
752     DenseMap<unsigned, MachineBasicBlock *> &MBBSlots) {
753   lex();
754   // Skip until the first machine basic block.
755   while (Token.is(MIToken::Newline))
756     lex();
757   if (Token.isErrorOrEOF())
758     return Token.isError();
759   if (Token.isNot(MIToken::MachineBasicBlockLabel))
760     return error("expected a basic block definition before instructions");
761   unsigned BraceDepth = 0;
762   do {
763     if (parseBasicBlockDefinition(MBBSlots))
764       return true;
765     bool IsAfterNewline = false;
766     // Skip until the next machine basic block.
767     while (true) {
768       if ((Token.is(MIToken::MachineBasicBlockLabel) && IsAfterNewline) ||
769           Token.isErrorOrEOF())
770         break;
771       else if (Token.is(MIToken::MachineBasicBlockLabel))
772         return error("basic block definition should be located at the start of "
773                      "the line");
774       else if (consumeIfPresent(MIToken::Newline)) {
775         IsAfterNewline = true;
776         continue;
777       }
778       IsAfterNewline = false;
779       if (Token.is(MIToken::lbrace))
780         ++BraceDepth;
781       if (Token.is(MIToken::rbrace)) {
782         if (!BraceDepth)
783           return error("extraneous closing brace ('}')");
784         --BraceDepth;
785       }
786       lex();
787     }
788     // Verify that we closed all of the '{' at the end of a file or a block.
789     if (!Token.isError() && BraceDepth)
790       return error("expected '}'"); // FIXME: Report a note that shows '{'.
791   } while (!Token.isErrorOrEOF());
792   return Token.isError();
793 }
794 
795 bool MIParser::parseBasicBlockLiveins(MachineBasicBlock &MBB) {
796   assert(Token.is(MIToken::kw_liveins));
797   lex();
798   if (expectAndConsume(MIToken::colon))
799     return true;
800   if (Token.isNewlineOrEOF()) // Allow an empty list of liveins.
801     return false;
802   do {
803     if (Token.isNot(MIToken::NamedRegister))
804       return error("expected a named register");
805     Register Reg;
806     if (parseNamedRegister(Reg))
807       return true;
808     lex();
809     LaneBitmask Mask = LaneBitmask::getAll();
810     if (consumeIfPresent(MIToken::colon)) {
811       // Parse lane mask.
812       if (Token.isNot(MIToken::IntegerLiteral) &&
813           Token.isNot(MIToken::HexLiteral))
814         return error("expected a lane mask");
815       static_assert(sizeof(LaneBitmask::Type) == sizeof(uint64_t),
816                     "Use correct get-function for lane mask");
817       LaneBitmask::Type V;
818       if (getUint64(V))
819         return error("invalid lane mask value");
820       Mask = LaneBitmask(V);
821       lex();
822     }
823     MBB.addLiveIn(Reg, Mask);
824   } while (consumeIfPresent(MIToken::comma));
825   return false;
826 }
827 
828 bool MIParser::parseBasicBlockSuccessors(MachineBasicBlock &MBB) {
829   assert(Token.is(MIToken::kw_successors));
830   lex();
831   if (expectAndConsume(MIToken::colon))
832     return true;
833   if (Token.isNewlineOrEOF()) // Allow an empty list of successors.
834     return false;
835   do {
836     if (Token.isNot(MIToken::MachineBasicBlock))
837       return error("expected a machine basic block reference");
838     MachineBasicBlock *SuccMBB = nullptr;
839     if (parseMBBReference(SuccMBB))
840       return true;
841     lex();
842     unsigned Weight = 0;
843     if (consumeIfPresent(MIToken::lparen)) {
844       if (Token.isNot(MIToken::IntegerLiteral) &&
845           Token.isNot(MIToken::HexLiteral))
846         return error("expected an integer literal after '('");
847       if (getUnsigned(Weight))
848         return true;
849       lex();
850       if (expectAndConsume(MIToken::rparen))
851         return true;
852     }
853     MBB.addSuccessor(SuccMBB, BranchProbability::getRaw(Weight));
854   } while (consumeIfPresent(MIToken::comma));
855   MBB.normalizeSuccProbs();
856   return false;
857 }
858 
859 bool MIParser::parseBasicBlock(MachineBasicBlock &MBB,
860                                MachineBasicBlock *&AddFalthroughFrom) {
861   // Skip the definition.
862   assert(Token.is(MIToken::MachineBasicBlockLabel));
863   lex();
864   if (consumeIfPresent(MIToken::lparen)) {
865     while (Token.isNot(MIToken::rparen) && !Token.isErrorOrEOF())
866       lex();
867     consumeIfPresent(MIToken::rparen);
868   }
869   consumeIfPresent(MIToken::colon);
870 
871   // Parse the liveins and successors.
872   // N.B: Multiple lists of successors and liveins are allowed and they're
873   // merged into one.
874   // Example:
875   //   liveins: $edi
876   //   liveins: $esi
877   //
878   // is equivalent to
879   //   liveins: $edi, $esi
880   bool ExplicitSuccessors = false;
881   while (true) {
882     if (Token.is(MIToken::kw_successors)) {
883       if (parseBasicBlockSuccessors(MBB))
884         return true;
885       ExplicitSuccessors = true;
886     } else if (Token.is(MIToken::kw_liveins)) {
887       if (parseBasicBlockLiveins(MBB))
888         return true;
889     } else if (consumeIfPresent(MIToken::Newline)) {
890       continue;
891     } else
892       break;
893     if (!Token.isNewlineOrEOF())
894       return error("expected line break at the end of a list");
895     lex();
896   }
897 
898   // Parse the instructions.
899   bool IsInBundle = false;
900   MachineInstr *PrevMI = nullptr;
901   while (!Token.is(MIToken::MachineBasicBlockLabel) &&
902          !Token.is(MIToken::Eof)) {
903     if (consumeIfPresent(MIToken::Newline))
904       continue;
905     if (consumeIfPresent(MIToken::rbrace)) {
906       // The first parsing pass should verify that all closing '}' have an
907       // opening '{'.
908       assert(IsInBundle);
909       IsInBundle = false;
910       continue;
911     }
912     MachineInstr *MI = nullptr;
913     if (parse(MI))
914       return true;
915     MBB.insert(MBB.end(), MI);
916     if (IsInBundle) {
917       PrevMI->setFlag(MachineInstr::BundledSucc);
918       MI->setFlag(MachineInstr::BundledPred);
919     }
920     PrevMI = MI;
921     if (Token.is(MIToken::lbrace)) {
922       if (IsInBundle)
923         return error("nested instruction bundles are not allowed");
924       lex();
925       // This instruction is the start of the bundle.
926       MI->setFlag(MachineInstr::BundledSucc);
927       IsInBundle = true;
928       if (!Token.is(MIToken::Newline))
929         // The next instruction can be on the same line.
930         continue;
931     }
932     assert(Token.isNewlineOrEOF() && "MI is not fully parsed");
933     lex();
934   }
935 
936   // Construct successor list by searching for basic block machine operands.
937   if (!ExplicitSuccessors) {
938     SmallVector<MachineBasicBlock*,4> Successors;
939     bool IsFallthrough;
940     guessSuccessors(MBB, Successors, IsFallthrough);
941     for (MachineBasicBlock *Succ : Successors)
942       MBB.addSuccessor(Succ);
943 
944     if (IsFallthrough) {
945       AddFalthroughFrom = &MBB;
946     } else {
947       MBB.normalizeSuccProbs();
948     }
949   }
950 
951   return false;
952 }
953 
954 bool MIParser::parseBasicBlocks() {
955   lex();
956   // Skip until the first machine basic block.
957   while (Token.is(MIToken::Newline))
958     lex();
959   if (Token.isErrorOrEOF())
960     return Token.isError();
961   // The first parsing pass should have verified that this token is a MBB label
962   // in the 'parseBasicBlockDefinitions' method.
963   assert(Token.is(MIToken::MachineBasicBlockLabel));
964   MachineBasicBlock *AddFalthroughFrom = nullptr;
965   do {
966     MachineBasicBlock *MBB = nullptr;
967     if (parseMBBReference(MBB))
968       return true;
969     if (AddFalthroughFrom) {
970       if (!AddFalthroughFrom->isSuccessor(MBB))
971         AddFalthroughFrom->addSuccessor(MBB);
972       AddFalthroughFrom->normalizeSuccProbs();
973       AddFalthroughFrom = nullptr;
974     }
975     if (parseBasicBlock(*MBB, AddFalthroughFrom))
976       return true;
977     // The method 'parseBasicBlock' should parse the whole block until the next
978     // block or the end of file.
979     assert(Token.is(MIToken::MachineBasicBlockLabel) || Token.is(MIToken::Eof));
980   } while (Token.isNot(MIToken::Eof));
981   return false;
982 }
983 
984 bool MIParser::parse(MachineInstr *&MI) {
985   // Parse any register operands before '='
986   MachineOperand MO = MachineOperand::CreateImm(0);
987   SmallVector<ParsedMachineOperand, 8> Operands;
988   while (Token.isRegister() || Token.isRegisterFlag()) {
989     auto Loc = Token.location();
990     Optional<unsigned> TiedDefIdx;
991     if (parseRegisterOperand(MO, TiedDefIdx, /*IsDef=*/true))
992       return true;
993     Operands.push_back(
994         ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx));
995     if (Token.isNot(MIToken::comma))
996       break;
997     lex();
998   }
999   if (!Operands.empty() && expectAndConsume(MIToken::equal))
1000     return true;
1001 
1002   unsigned OpCode, Flags = 0;
1003   if (Token.isError() || parseInstruction(OpCode, Flags))
1004     return true;
1005 
1006   // Parse the remaining machine operands.
1007   while (!Token.isNewlineOrEOF() && Token.isNot(MIToken::kw_pre_instr_symbol) &&
1008          Token.isNot(MIToken::kw_post_instr_symbol) &&
1009          Token.isNot(MIToken::kw_heap_alloc_marker) &&
1010          Token.isNot(MIToken::kw_debug_location) &&
1011          Token.isNot(MIToken::kw_debug_instr_number) &&
1012          Token.isNot(MIToken::coloncolon) && Token.isNot(MIToken::lbrace)) {
1013     auto Loc = Token.location();
1014     Optional<unsigned> TiedDefIdx;
1015     if (parseMachineOperandAndTargetFlags(OpCode, Operands.size(), MO, TiedDefIdx))
1016       return true;
1017     Operands.push_back(
1018         ParsedMachineOperand(MO, Loc, Token.location(), TiedDefIdx));
1019     if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) ||
1020         Token.is(MIToken::lbrace))
1021       break;
1022     if (Token.isNot(MIToken::comma))
1023       return error("expected ',' before the next machine operand");
1024     lex();
1025   }
1026 
1027   MCSymbol *PreInstrSymbol = nullptr;
1028   if (Token.is(MIToken::kw_pre_instr_symbol))
1029     if (parsePreOrPostInstrSymbol(PreInstrSymbol))
1030       return true;
1031   MCSymbol *PostInstrSymbol = nullptr;
1032   if (Token.is(MIToken::kw_post_instr_symbol))
1033     if (parsePreOrPostInstrSymbol(PostInstrSymbol))
1034       return true;
1035   MDNode *HeapAllocMarker = nullptr;
1036   if (Token.is(MIToken::kw_heap_alloc_marker))
1037     if (parseHeapAllocMarker(HeapAllocMarker))
1038       return true;
1039 
1040   unsigned InstrNum = 0;
1041   if (Token.is(MIToken::kw_debug_instr_number)) {
1042     lex();
1043     if (Token.isNot(MIToken::IntegerLiteral))
1044       return error("expected an integer literal after 'debug-instr-number'");
1045     if (getUnsigned(InstrNum))
1046       return true;
1047     lex();
1048     // Lex past trailing comma if present.
1049     if (Token.is(MIToken::comma))
1050       lex();
1051   }
1052 
1053   DebugLoc DebugLocation;
1054   if (Token.is(MIToken::kw_debug_location)) {
1055     lex();
1056     MDNode *Node = nullptr;
1057     if (Token.is(MIToken::exclaim)) {
1058       if (parseMDNode(Node))
1059         return true;
1060     } else if (Token.is(MIToken::md_dilocation)) {
1061       if (parseDILocation(Node))
1062         return true;
1063     } else
1064       return error("expected a metadata node after 'debug-location'");
1065     if (!isa<DILocation>(Node))
1066       return error("referenced metadata is not a DILocation");
1067     DebugLocation = DebugLoc(Node);
1068   }
1069 
1070   // Parse the machine memory operands.
1071   SmallVector<MachineMemOperand *, 2> MemOperands;
1072   if (Token.is(MIToken::coloncolon)) {
1073     lex();
1074     while (!Token.isNewlineOrEOF()) {
1075       MachineMemOperand *MemOp = nullptr;
1076       if (parseMachineMemoryOperand(MemOp))
1077         return true;
1078       MemOperands.push_back(MemOp);
1079       if (Token.isNewlineOrEOF())
1080         break;
1081       if (Token.isNot(MIToken::comma))
1082         return error("expected ',' before the next machine memory operand");
1083       lex();
1084     }
1085   }
1086 
1087   const auto &MCID = MF.getSubtarget().getInstrInfo()->get(OpCode);
1088   if (!MCID.isVariadic()) {
1089     // FIXME: Move the implicit operand verification to the machine verifier.
1090     if (verifyImplicitOperands(Operands, MCID))
1091       return true;
1092   }
1093 
1094   MI = MF.CreateMachineInstr(MCID, DebugLocation, /*NoImplicit=*/true);
1095   MI->setFlags(Flags);
1096 
1097   unsigned NumExplicitOps = 0;
1098   for (const auto &Operand : Operands) {
1099     bool IsImplicitOp = Operand.Operand.isReg() && Operand.Operand.isImplicit();
1100     if (!IsImplicitOp) {
1101       if (!MCID.isVariadic() && NumExplicitOps >= MCID.getNumOperands() &&
1102           !Operand.Operand.isValidExcessOperand())
1103         return error("too many operands for instruction");
1104 
1105       ++NumExplicitOps;
1106     }
1107 
1108     MI->addOperand(MF, Operand.Operand);
1109   }
1110 
1111   if (assignRegisterTies(*MI, Operands))
1112     return true;
1113   if (PreInstrSymbol)
1114     MI->setPreInstrSymbol(MF, PreInstrSymbol);
1115   if (PostInstrSymbol)
1116     MI->setPostInstrSymbol(MF, PostInstrSymbol);
1117   if (HeapAllocMarker)
1118     MI->setHeapAllocMarker(MF, HeapAllocMarker);
1119   if (!MemOperands.empty())
1120     MI->setMemRefs(MF, MemOperands);
1121   if (InstrNum)
1122     MI->setDebugInstrNum(InstrNum);
1123   return false;
1124 }
1125 
1126 bool MIParser::parseStandaloneMBB(MachineBasicBlock *&MBB) {
1127   lex();
1128   if (Token.isNot(MIToken::MachineBasicBlock))
1129     return error("expected a machine basic block reference");
1130   if (parseMBBReference(MBB))
1131     return true;
1132   lex();
1133   if (Token.isNot(MIToken::Eof))
1134     return error(
1135         "expected end of string after the machine basic block reference");
1136   return false;
1137 }
1138 
1139 bool MIParser::parseStandaloneNamedRegister(Register &Reg) {
1140   lex();
1141   if (Token.isNot(MIToken::NamedRegister))
1142     return error("expected a named register");
1143   if (parseNamedRegister(Reg))
1144     return true;
1145   lex();
1146   if (Token.isNot(MIToken::Eof))
1147     return error("expected end of string after the register reference");
1148   return false;
1149 }
1150 
1151 bool MIParser::parseStandaloneVirtualRegister(VRegInfo *&Info) {
1152   lex();
1153   if (Token.isNot(MIToken::VirtualRegister))
1154     return error("expected a virtual register");
1155   if (parseVirtualRegister(Info))
1156     return true;
1157   lex();
1158   if (Token.isNot(MIToken::Eof))
1159     return error("expected end of string after the register reference");
1160   return false;
1161 }
1162 
1163 bool MIParser::parseStandaloneRegister(Register &Reg) {
1164   lex();
1165   if (Token.isNot(MIToken::NamedRegister) &&
1166       Token.isNot(MIToken::VirtualRegister))
1167     return error("expected either a named or virtual register");
1168 
1169   VRegInfo *Info;
1170   if (parseRegister(Reg, Info))
1171     return true;
1172 
1173   lex();
1174   if (Token.isNot(MIToken::Eof))
1175     return error("expected end of string after the register reference");
1176   return false;
1177 }
1178 
1179 bool MIParser::parseStandaloneStackObject(int &FI) {
1180   lex();
1181   if (Token.isNot(MIToken::StackObject))
1182     return error("expected a stack object");
1183   if (parseStackFrameIndex(FI))
1184     return true;
1185   if (Token.isNot(MIToken::Eof))
1186     return error("expected end of string after the stack object reference");
1187   return false;
1188 }
1189 
1190 bool MIParser::parseStandaloneMDNode(MDNode *&Node) {
1191   lex();
1192   if (Token.is(MIToken::exclaim)) {
1193     if (parseMDNode(Node))
1194       return true;
1195   } else if (Token.is(MIToken::md_diexpr)) {
1196     if (parseDIExpression(Node))
1197       return true;
1198   } else if (Token.is(MIToken::md_dilocation)) {
1199     if (parseDILocation(Node))
1200       return true;
1201   } else
1202     return error("expected a metadata node");
1203   if (Token.isNot(MIToken::Eof))
1204     return error("expected end of string after the metadata node");
1205   return false;
1206 }
1207 
1208 bool MIParser::parseMachineMetadata() {
1209   lex();
1210   if (Token.isNot(MIToken::exclaim))
1211     return error("expected a metadata node");
1212 
1213   lex();
1214   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
1215     return error("expected metadata id after '!'");
1216   unsigned ID = 0;
1217   if (getUnsigned(ID))
1218     return true;
1219   lex();
1220   if (expectAndConsume(MIToken::equal))
1221     return true;
1222   bool IsDistinct = Token.is(MIToken::kw_distinct);
1223   if (IsDistinct)
1224     lex();
1225   if (Token.isNot(MIToken::exclaim))
1226     return error("expected a metadata node");
1227   lex();
1228 
1229   MDNode *MD;
1230   if (parseMDTuple(MD, IsDistinct))
1231     return true;
1232 
1233   auto FI = PFS.MachineForwardRefMDNodes.find(ID);
1234   if (FI != PFS.MachineForwardRefMDNodes.end()) {
1235     FI->second.first->replaceAllUsesWith(MD);
1236     PFS.MachineForwardRefMDNodes.erase(FI);
1237 
1238     assert(PFS.MachineMetadataNodes[ID] == MD && "Tracking VH didn't work");
1239   } else {
1240     if (PFS.MachineMetadataNodes.count(ID))
1241       return error("Metadata id is already used");
1242     PFS.MachineMetadataNodes[ID].reset(MD);
1243   }
1244 
1245   return false;
1246 }
1247 
1248 bool MIParser::parseMDTuple(MDNode *&MD, bool IsDistinct) {
1249   SmallVector<Metadata *, 16> Elts;
1250   if (parseMDNodeVector(Elts))
1251     return true;
1252   MD = (IsDistinct ? MDTuple::getDistinct
1253                    : MDTuple::get)(MF.getFunction().getContext(), Elts);
1254   return false;
1255 }
1256 
1257 bool MIParser::parseMDNodeVector(SmallVectorImpl<Metadata *> &Elts) {
1258   if (Token.isNot(MIToken::lbrace))
1259     return error("expected '{' here");
1260   lex();
1261 
1262   if (Token.is(MIToken::rbrace)) {
1263     lex();
1264     return false;
1265   }
1266 
1267   do {
1268     Metadata *MD;
1269     if (parseMetadata(MD))
1270       return true;
1271 
1272     Elts.push_back(MD);
1273 
1274     if (Token.isNot(MIToken::comma))
1275       break;
1276     lex();
1277   } while (true);
1278 
1279   if (Token.isNot(MIToken::rbrace))
1280     return error("expected end of metadata node");
1281   lex();
1282 
1283   return false;
1284 }
1285 
1286 // ::= !42
1287 // ::= !"string"
1288 bool MIParser::parseMetadata(Metadata *&MD) {
1289   if (Token.isNot(MIToken::exclaim))
1290     return error("expected '!' here");
1291   lex();
1292 
1293   if (Token.is(MIToken::StringConstant)) {
1294     std::string Str;
1295     if (parseStringConstant(Str))
1296       return true;
1297     MD = MDString::get(MF.getFunction().getContext(), Str);
1298     return false;
1299   }
1300 
1301   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
1302     return error("expected metadata id after '!'");
1303 
1304   SMLoc Loc = mapSMLoc(Token.location());
1305 
1306   unsigned ID = 0;
1307   if (getUnsigned(ID))
1308     return true;
1309   lex();
1310 
1311   auto NodeInfo = PFS.IRSlots.MetadataNodes.find(ID);
1312   if (NodeInfo != PFS.IRSlots.MetadataNodes.end()) {
1313     MD = NodeInfo->second.get();
1314     return false;
1315   }
1316   // Check machine metadata.
1317   NodeInfo = PFS.MachineMetadataNodes.find(ID);
1318   if (NodeInfo != PFS.MachineMetadataNodes.end()) {
1319     MD = NodeInfo->second.get();
1320     return false;
1321   }
1322   // Forward reference.
1323   auto &FwdRef = PFS.MachineForwardRefMDNodes[ID];
1324   FwdRef = std::make_pair(
1325       MDTuple::getTemporary(MF.getFunction().getContext(), None), Loc);
1326   PFS.MachineMetadataNodes[ID].reset(FwdRef.first.get());
1327   MD = FwdRef.first.get();
1328 
1329   return false;
1330 }
1331 
1332 static const char *printImplicitRegisterFlag(const MachineOperand &MO) {
1333   assert(MO.isImplicit());
1334   return MO.isDef() ? "implicit-def" : "implicit";
1335 }
1336 
1337 static std::string getRegisterName(const TargetRegisterInfo *TRI,
1338                                    Register Reg) {
1339   assert(Register::isPhysicalRegister(Reg) && "expected phys reg");
1340   return StringRef(TRI->getName(Reg)).lower();
1341 }
1342 
1343 /// Return true if the parsed machine operands contain a given machine operand.
1344 static bool isImplicitOperandIn(const MachineOperand &ImplicitOperand,
1345                                 ArrayRef<ParsedMachineOperand> Operands) {
1346   for (const auto &I : Operands) {
1347     if (ImplicitOperand.isIdenticalTo(I.Operand))
1348       return true;
1349   }
1350   return false;
1351 }
1352 
1353 bool MIParser::verifyImplicitOperands(ArrayRef<ParsedMachineOperand> Operands,
1354                                       const MCInstrDesc &MCID) {
1355   if (MCID.isCall())
1356     // We can't verify call instructions as they can contain arbitrary implicit
1357     // register and register mask operands.
1358     return false;
1359 
1360   // Gather all the expected implicit operands.
1361   SmallVector<MachineOperand, 4> ImplicitOperands;
1362   if (MCID.ImplicitDefs)
1363     for (const MCPhysReg *ImpDefs = MCID.getImplicitDefs(); *ImpDefs; ++ImpDefs)
1364       ImplicitOperands.push_back(
1365           MachineOperand::CreateReg(*ImpDefs, true, true));
1366   if (MCID.ImplicitUses)
1367     for (const MCPhysReg *ImpUses = MCID.getImplicitUses(); *ImpUses; ++ImpUses)
1368       ImplicitOperands.push_back(
1369           MachineOperand::CreateReg(*ImpUses, false, true));
1370 
1371   const auto *TRI = MF.getSubtarget().getRegisterInfo();
1372   assert(TRI && "Expected target register info");
1373   for (const auto &I : ImplicitOperands) {
1374     if (isImplicitOperandIn(I, Operands))
1375       continue;
1376     return error(Operands.empty() ? Token.location() : Operands.back().End,
1377                  Twine("missing implicit register operand '") +
1378                      printImplicitRegisterFlag(I) + " $" +
1379                      getRegisterName(TRI, I.getReg()) + "'");
1380   }
1381   return false;
1382 }
1383 
1384 bool MIParser::parseInstruction(unsigned &OpCode, unsigned &Flags) {
1385   // Allow frame and fast math flags for OPCODE
1386   while (Token.is(MIToken::kw_frame_setup) ||
1387          Token.is(MIToken::kw_frame_destroy) ||
1388          Token.is(MIToken::kw_nnan) ||
1389          Token.is(MIToken::kw_ninf) ||
1390          Token.is(MIToken::kw_nsz) ||
1391          Token.is(MIToken::kw_arcp) ||
1392          Token.is(MIToken::kw_contract) ||
1393          Token.is(MIToken::kw_afn) ||
1394          Token.is(MIToken::kw_reassoc) ||
1395          Token.is(MIToken::kw_nuw) ||
1396          Token.is(MIToken::kw_nsw) ||
1397          Token.is(MIToken::kw_exact) ||
1398          Token.is(MIToken::kw_nofpexcept)) {
1399     // Mine frame and fast math flags
1400     if (Token.is(MIToken::kw_frame_setup))
1401       Flags |= MachineInstr::FrameSetup;
1402     if (Token.is(MIToken::kw_frame_destroy))
1403       Flags |= MachineInstr::FrameDestroy;
1404     if (Token.is(MIToken::kw_nnan))
1405       Flags |= MachineInstr::FmNoNans;
1406     if (Token.is(MIToken::kw_ninf))
1407       Flags |= MachineInstr::FmNoInfs;
1408     if (Token.is(MIToken::kw_nsz))
1409       Flags |= MachineInstr::FmNsz;
1410     if (Token.is(MIToken::kw_arcp))
1411       Flags |= MachineInstr::FmArcp;
1412     if (Token.is(MIToken::kw_contract))
1413       Flags |= MachineInstr::FmContract;
1414     if (Token.is(MIToken::kw_afn))
1415       Flags |= MachineInstr::FmAfn;
1416     if (Token.is(MIToken::kw_reassoc))
1417       Flags |= MachineInstr::FmReassoc;
1418     if (Token.is(MIToken::kw_nuw))
1419       Flags |= MachineInstr::NoUWrap;
1420     if (Token.is(MIToken::kw_nsw))
1421       Flags |= MachineInstr::NoSWrap;
1422     if (Token.is(MIToken::kw_exact))
1423       Flags |= MachineInstr::IsExact;
1424     if (Token.is(MIToken::kw_nofpexcept))
1425       Flags |= MachineInstr::NoFPExcept;
1426 
1427     lex();
1428   }
1429   if (Token.isNot(MIToken::Identifier))
1430     return error("expected a machine instruction");
1431   StringRef InstrName = Token.stringValue();
1432   if (PFS.Target.parseInstrName(InstrName, OpCode))
1433     return error(Twine("unknown machine instruction name '") + InstrName + "'");
1434   lex();
1435   return false;
1436 }
1437 
1438 bool MIParser::parseNamedRegister(Register &Reg) {
1439   assert(Token.is(MIToken::NamedRegister) && "Needs NamedRegister token");
1440   StringRef Name = Token.stringValue();
1441   if (PFS.Target.getRegisterByName(Name, Reg))
1442     return error(Twine("unknown register name '") + Name + "'");
1443   return false;
1444 }
1445 
1446 bool MIParser::parseNamedVirtualRegister(VRegInfo *&Info) {
1447   assert(Token.is(MIToken::NamedVirtualRegister) && "Expected NamedVReg token");
1448   StringRef Name = Token.stringValue();
1449   // TODO: Check that the VReg name is not the same as a physical register name.
1450   //       If it is, then print a warning (when warnings are implemented).
1451   Info = &PFS.getVRegInfoNamed(Name);
1452   return false;
1453 }
1454 
1455 bool MIParser::parseVirtualRegister(VRegInfo *&Info) {
1456   if (Token.is(MIToken::NamedVirtualRegister))
1457     return parseNamedVirtualRegister(Info);
1458   assert(Token.is(MIToken::VirtualRegister) && "Needs VirtualRegister token");
1459   unsigned ID;
1460   if (getUnsigned(ID))
1461     return true;
1462   Info = &PFS.getVRegInfo(ID);
1463   return false;
1464 }
1465 
1466 bool MIParser::parseRegister(Register &Reg, VRegInfo *&Info) {
1467   switch (Token.kind()) {
1468   case MIToken::underscore:
1469     Reg = 0;
1470     return false;
1471   case MIToken::NamedRegister:
1472     return parseNamedRegister(Reg);
1473   case MIToken::NamedVirtualRegister:
1474   case MIToken::VirtualRegister:
1475     if (parseVirtualRegister(Info))
1476       return true;
1477     Reg = Info->VReg;
1478     return false;
1479   // TODO: Parse other register kinds.
1480   default:
1481     llvm_unreachable("The current token should be a register");
1482   }
1483 }
1484 
1485 bool MIParser::parseRegisterClassOrBank(VRegInfo &RegInfo) {
1486   if (Token.isNot(MIToken::Identifier) && Token.isNot(MIToken::underscore))
1487     return error("expected '_', register class, or register bank name");
1488   StringRef::iterator Loc = Token.location();
1489   StringRef Name = Token.stringValue();
1490 
1491   // Was it a register class?
1492   const TargetRegisterClass *RC = PFS.Target.getRegClass(Name);
1493   if (RC) {
1494     lex();
1495 
1496     switch (RegInfo.Kind) {
1497     case VRegInfo::UNKNOWN:
1498     case VRegInfo::NORMAL:
1499       RegInfo.Kind = VRegInfo::NORMAL;
1500       if (RegInfo.Explicit && RegInfo.D.RC != RC) {
1501         const TargetRegisterInfo &TRI = *MF.getSubtarget().getRegisterInfo();
1502         return error(Loc, Twine("conflicting register classes, previously: ") +
1503                      Twine(TRI.getRegClassName(RegInfo.D.RC)));
1504       }
1505       RegInfo.D.RC = RC;
1506       RegInfo.Explicit = true;
1507       return false;
1508 
1509     case VRegInfo::GENERIC:
1510     case VRegInfo::REGBANK:
1511       return error(Loc, "register class specification on generic register");
1512     }
1513     llvm_unreachable("Unexpected register kind");
1514   }
1515 
1516   // Should be a register bank or a generic register.
1517   const RegisterBank *RegBank = nullptr;
1518   if (Name != "_") {
1519     RegBank = PFS.Target.getRegBank(Name);
1520     if (!RegBank)
1521       return error(Loc, "expected '_', register class, or register bank name");
1522   }
1523 
1524   lex();
1525 
1526   switch (RegInfo.Kind) {
1527   case VRegInfo::UNKNOWN:
1528   case VRegInfo::GENERIC:
1529   case VRegInfo::REGBANK:
1530     RegInfo.Kind = RegBank ? VRegInfo::REGBANK : VRegInfo::GENERIC;
1531     if (RegInfo.Explicit && RegInfo.D.RegBank != RegBank)
1532       return error(Loc, "conflicting generic register banks");
1533     RegInfo.D.RegBank = RegBank;
1534     RegInfo.Explicit = true;
1535     return false;
1536 
1537   case VRegInfo::NORMAL:
1538     return error(Loc, "register bank specification on normal register");
1539   }
1540   llvm_unreachable("Unexpected register kind");
1541 }
1542 
1543 bool MIParser::parseRegisterFlag(unsigned &Flags) {
1544   const unsigned OldFlags = Flags;
1545   switch (Token.kind()) {
1546   case MIToken::kw_implicit:
1547     Flags |= RegState::Implicit;
1548     break;
1549   case MIToken::kw_implicit_define:
1550     Flags |= RegState::ImplicitDefine;
1551     break;
1552   case MIToken::kw_def:
1553     Flags |= RegState::Define;
1554     break;
1555   case MIToken::kw_dead:
1556     Flags |= RegState::Dead;
1557     break;
1558   case MIToken::kw_killed:
1559     Flags |= RegState::Kill;
1560     break;
1561   case MIToken::kw_undef:
1562     Flags |= RegState::Undef;
1563     break;
1564   case MIToken::kw_internal:
1565     Flags |= RegState::InternalRead;
1566     break;
1567   case MIToken::kw_early_clobber:
1568     Flags |= RegState::EarlyClobber;
1569     break;
1570   case MIToken::kw_debug_use:
1571     Flags |= RegState::Debug;
1572     break;
1573   case MIToken::kw_renamable:
1574     Flags |= RegState::Renamable;
1575     break;
1576   default:
1577     llvm_unreachable("The current token should be a register flag");
1578   }
1579   if (OldFlags == Flags)
1580     // We know that the same flag is specified more than once when the flags
1581     // weren't modified.
1582     return error("duplicate '" + Token.stringValue() + "' register flag");
1583   lex();
1584   return false;
1585 }
1586 
1587 bool MIParser::parseSubRegisterIndex(unsigned &SubReg) {
1588   assert(Token.is(MIToken::dot));
1589   lex();
1590   if (Token.isNot(MIToken::Identifier))
1591     return error("expected a subregister index after '.'");
1592   auto Name = Token.stringValue();
1593   SubReg = PFS.Target.getSubRegIndex(Name);
1594   if (!SubReg)
1595     return error(Twine("use of unknown subregister index '") + Name + "'");
1596   lex();
1597   return false;
1598 }
1599 
1600 bool MIParser::parseRegisterTiedDefIndex(unsigned &TiedDefIdx) {
1601   if (!consumeIfPresent(MIToken::kw_tied_def))
1602     return true;
1603   if (Token.isNot(MIToken::IntegerLiteral))
1604     return error("expected an integer literal after 'tied-def'");
1605   if (getUnsigned(TiedDefIdx))
1606     return true;
1607   lex();
1608   if (expectAndConsume(MIToken::rparen))
1609     return true;
1610   return false;
1611 }
1612 
1613 bool MIParser::assignRegisterTies(MachineInstr &MI,
1614                                   ArrayRef<ParsedMachineOperand> Operands) {
1615   SmallVector<std::pair<unsigned, unsigned>, 4> TiedRegisterPairs;
1616   for (unsigned I = 0, E = Operands.size(); I != E; ++I) {
1617     if (!Operands[I].TiedDefIdx)
1618       continue;
1619     // The parser ensures that this operand is a register use, so we just have
1620     // to check the tied-def operand.
1621     unsigned DefIdx = Operands[I].TiedDefIdx.getValue();
1622     if (DefIdx >= E)
1623       return error(Operands[I].Begin,
1624                    Twine("use of invalid tied-def operand index '" +
1625                          Twine(DefIdx) + "'; instruction has only ") +
1626                        Twine(E) + " operands");
1627     const auto &DefOperand = Operands[DefIdx].Operand;
1628     if (!DefOperand.isReg() || !DefOperand.isDef())
1629       // FIXME: add note with the def operand.
1630       return error(Operands[I].Begin,
1631                    Twine("use of invalid tied-def operand index '") +
1632                        Twine(DefIdx) + "'; the operand #" + Twine(DefIdx) +
1633                        " isn't a defined register");
1634     // Check that the tied-def operand wasn't tied elsewhere.
1635     for (const auto &TiedPair : TiedRegisterPairs) {
1636       if (TiedPair.first == DefIdx)
1637         return error(Operands[I].Begin,
1638                      Twine("the tied-def operand #") + Twine(DefIdx) +
1639                          " is already tied with another register operand");
1640     }
1641     TiedRegisterPairs.push_back(std::make_pair(DefIdx, I));
1642   }
1643   // FIXME: Verify that for non INLINEASM instructions, the def and use tied
1644   // indices must be less than tied max.
1645   for (const auto &TiedPair : TiedRegisterPairs)
1646     MI.tieOperands(TiedPair.first, TiedPair.second);
1647   return false;
1648 }
1649 
1650 bool MIParser::parseRegisterOperand(MachineOperand &Dest,
1651                                     Optional<unsigned> &TiedDefIdx,
1652                                     bool IsDef) {
1653   unsigned Flags = IsDef ? RegState::Define : 0;
1654   while (Token.isRegisterFlag()) {
1655     if (parseRegisterFlag(Flags))
1656       return true;
1657   }
1658   if (!Token.isRegister())
1659     return error("expected a register after register flags");
1660   Register Reg;
1661   VRegInfo *RegInfo;
1662   if (parseRegister(Reg, RegInfo))
1663     return true;
1664   lex();
1665   unsigned SubReg = 0;
1666   if (Token.is(MIToken::dot)) {
1667     if (parseSubRegisterIndex(SubReg))
1668       return true;
1669     if (!Register::isVirtualRegister(Reg))
1670       return error("subregister index expects a virtual register");
1671   }
1672   if (Token.is(MIToken::colon)) {
1673     if (!Register::isVirtualRegister(Reg))
1674       return error("register class specification expects a virtual register");
1675     lex();
1676     if (parseRegisterClassOrBank(*RegInfo))
1677         return true;
1678   }
1679   MachineRegisterInfo &MRI = MF.getRegInfo();
1680   if ((Flags & RegState::Define) == 0) {
1681     if (consumeIfPresent(MIToken::lparen)) {
1682       unsigned Idx;
1683       if (!parseRegisterTiedDefIndex(Idx))
1684         TiedDefIdx = Idx;
1685       else {
1686         // Try a redundant low-level type.
1687         LLT Ty;
1688         if (parseLowLevelType(Token.location(), Ty))
1689           return error("expected tied-def or low-level type after '('");
1690 
1691         if (expectAndConsume(MIToken::rparen))
1692           return true;
1693 
1694         if (MRI.getType(Reg).isValid() && MRI.getType(Reg) != Ty)
1695           return error("inconsistent type for generic virtual register");
1696 
1697         MRI.setRegClassOrRegBank(Reg, static_cast<RegisterBank *>(nullptr));
1698         MRI.setType(Reg, Ty);
1699       }
1700     }
1701   } else if (consumeIfPresent(MIToken::lparen)) {
1702     // Virtual registers may have a tpe with GlobalISel.
1703     if (!Register::isVirtualRegister(Reg))
1704       return error("unexpected type on physical register");
1705 
1706     LLT Ty;
1707     if (parseLowLevelType(Token.location(), Ty))
1708       return true;
1709 
1710     if (expectAndConsume(MIToken::rparen))
1711       return true;
1712 
1713     if (MRI.getType(Reg).isValid() && MRI.getType(Reg) != Ty)
1714       return error("inconsistent type for generic virtual register");
1715 
1716     MRI.setRegClassOrRegBank(Reg, static_cast<RegisterBank *>(nullptr));
1717     MRI.setType(Reg, Ty);
1718   } else if (Register::isVirtualRegister(Reg)) {
1719     // Generic virtual registers must have a type.
1720     // If we end up here this means the type hasn't been specified and
1721     // this is bad!
1722     if (RegInfo->Kind == VRegInfo::GENERIC ||
1723         RegInfo->Kind == VRegInfo::REGBANK)
1724       return error("generic virtual registers must have a type");
1725   }
1726   Dest = MachineOperand::CreateReg(
1727       Reg, Flags & RegState::Define, Flags & RegState::Implicit,
1728       Flags & RegState::Kill, Flags & RegState::Dead, Flags & RegState::Undef,
1729       Flags & RegState::EarlyClobber, SubReg, Flags & RegState::Debug,
1730       Flags & RegState::InternalRead, Flags & RegState::Renamable);
1731 
1732   return false;
1733 }
1734 
1735 bool MIParser::parseImmediateOperand(MachineOperand &Dest) {
1736   assert(Token.is(MIToken::IntegerLiteral));
1737   const APSInt &Int = Token.integerValue();
1738   if (Int.getMinSignedBits() > 64)
1739     return error("integer literal is too large to be an immediate operand");
1740   Dest = MachineOperand::CreateImm(Int.getExtValue());
1741   lex();
1742   return false;
1743 }
1744 
1745 bool MIParser::parseTargetImmMnemonic(const unsigned OpCode,
1746                                       const unsigned OpIdx,
1747                                       MachineOperand &Dest,
1748                                       const MIRFormatter &MF) {
1749   assert(Token.is(MIToken::dot));
1750   auto Loc = Token.location(); // record start position
1751   size_t Len = 1;              // for "."
1752   lex();
1753 
1754   // Handle the case that mnemonic starts with number.
1755   if (Token.is(MIToken::IntegerLiteral)) {
1756     Len += Token.range().size();
1757     lex();
1758   }
1759 
1760   StringRef Src;
1761   if (Token.is(MIToken::comma))
1762     Src = StringRef(Loc, Len);
1763   else {
1764     assert(Token.is(MIToken::Identifier));
1765     Src = StringRef(Loc, Len + Token.stringValue().size());
1766   }
1767   int64_t Val;
1768   if (MF.parseImmMnemonic(OpCode, OpIdx, Src, Val,
1769                           [this](StringRef::iterator Loc, const Twine &Msg)
1770                               -> bool { return error(Loc, Msg); }))
1771     return true;
1772 
1773   Dest = MachineOperand::CreateImm(Val);
1774   if (!Token.is(MIToken::comma))
1775     lex();
1776   return false;
1777 }
1778 
1779 static bool parseIRConstant(StringRef::iterator Loc, StringRef StringValue,
1780                             PerFunctionMIParsingState &PFS, const Constant *&C,
1781                             ErrorCallbackType ErrCB) {
1782   auto Source = StringValue.str(); // The source has to be null terminated.
1783   SMDiagnostic Err;
1784   C = parseConstantValue(Source, Err, *PFS.MF.getFunction().getParent(),
1785                          &PFS.IRSlots);
1786   if (!C)
1787     return ErrCB(Loc + Err.getColumnNo(), Err.getMessage());
1788   return false;
1789 }
1790 
1791 bool MIParser::parseIRConstant(StringRef::iterator Loc, StringRef StringValue,
1792                                const Constant *&C) {
1793   return ::parseIRConstant(
1794       Loc, StringValue, PFS, C,
1795       [this](StringRef::iterator Loc, const Twine &Msg) -> bool {
1796         return error(Loc, Msg);
1797       });
1798 }
1799 
1800 bool MIParser::parseIRConstant(StringRef::iterator Loc, const Constant *&C) {
1801   if (parseIRConstant(Loc, StringRef(Loc, Token.range().end() - Loc), C))
1802     return true;
1803   lex();
1804   return false;
1805 }
1806 
1807 // See LLT implemntation for bit size limits.
1808 static bool verifyScalarSize(uint64_t Size) {
1809   return Size != 0 && isUInt<16>(Size);
1810 }
1811 
1812 static bool verifyVectorElementCount(uint64_t NumElts) {
1813   return NumElts != 0 && isUInt<16>(NumElts);
1814 }
1815 
1816 static bool verifyAddrSpace(uint64_t AddrSpace) {
1817   return isUInt<24>(AddrSpace);
1818 }
1819 
1820 bool MIParser::parseLowLevelType(StringRef::iterator Loc, LLT &Ty) {
1821   if (Token.range().front() == 's' || Token.range().front() == 'p') {
1822     StringRef SizeStr = Token.range().drop_front();
1823     if (SizeStr.size() == 0 || !llvm::all_of(SizeStr, isdigit))
1824       return error("expected integers after 's'/'p' type character");
1825   }
1826 
1827   if (Token.range().front() == 's') {
1828     auto ScalarSize = APSInt(Token.range().drop_front()).getZExtValue();
1829     if (!verifyScalarSize(ScalarSize))
1830       return error("invalid size for scalar type");
1831 
1832     Ty = LLT::scalar(ScalarSize);
1833     lex();
1834     return false;
1835   } else if (Token.range().front() == 'p') {
1836     const DataLayout &DL = MF.getDataLayout();
1837     uint64_t AS = APSInt(Token.range().drop_front()).getZExtValue();
1838     if (!verifyAddrSpace(AS))
1839       return error("invalid address space number");
1840 
1841     Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS));
1842     lex();
1843     return false;
1844   }
1845 
1846   // Now we're looking for a vector.
1847   if (Token.isNot(MIToken::less))
1848     return error(Loc,
1849                  "expected sN, pA, <M x sN>, or <M x pA> for GlobalISel type");
1850   lex();
1851 
1852   if (Token.isNot(MIToken::IntegerLiteral))
1853     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
1854   uint64_t NumElements = Token.integerValue().getZExtValue();
1855   if (!verifyVectorElementCount(NumElements))
1856     return error("invalid number of vector elements");
1857 
1858   lex();
1859 
1860   if (Token.isNot(MIToken::Identifier) || Token.stringValue() != "x")
1861     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
1862   lex();
1863 
1864   if (Token.range().front() != 's' && Token.range().front() != 'p')
1865     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
1866   StringRef SizeStr = Token.range().drop_front();
1867   if (SizeStr.size() == 0 || !llvm::all_of(SizeStr, isdigit))
1868     return error("expected integers after 's'/'p' type character");
1869 
1870   if (Token.range().front() == 's') {
1871     auto ScalarSize = APSInt(Token.range().drop_front()).getZExtValue();
1872     if (!verifyScalarSize(ScalarSize))
1873       return error("invalid size for scalar type");
1874     Ty = LLT::scalar(ScalarSize);
1875   } else if (Token.range().front() == 'p') {
1876     const DataLayout &DL = MF.getDataLayout();
1877     uint64_t AS = APSInt(Token.range().drop_front()).getZExtValue();
1878     if (!verifyAddrSpace(AS))
1879       return error("invalid address space number");
1880 
1881     Ty = LLT::pointer(AS, DL.getPointerSizeInBits(AS));
1882   } else
1883     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
1884   lex();
1885 
1886   if (Token.isNot(MIToken::greater))
1887     return error(Loc, "expected <M x sN> or <M x pA> for vector type");
1888   lex();
1889 
1890   Ty = LLT::fixed_vector(NumElements, Ty);
1891   return false;
1892 }
1893 
1894 bool MIParser::parseTypedImmediateOperand(MachineOperand &Dest) {
1895   assert(Token.is(MIToken::Identifier));
1896   StringRef TypeStr = Token.range();
1897   if (TypeStr.front() != 'i' && TypeStr.front() != 's' &&
1898       TypeStr.front() != 'p')
1899     return error(
1900         "a typed immediate operand should start with one of 'i', 's', or 'p'");
1901   StringRef SizeStr = Token.range().drop_front();
1902   if (SizeStr.size() == 0 || !llvm::all_of(SizeStr, isdigit))
1903     return error("expected integers after 'i'/'s'/'p' type character");
1904 
1905   auto Loc = Token.location();
1906   lex();
1907   if (Token.isNot(MIToken::IntegerLiteral)) {
1908     if (Token.isNot(MIToken::Identifier) ||
1909         !(Token.range() == "true" || Token.range() == "false"))
1910       return error("expected an integer literal");
1911   }
1912   const Constant *C = nullptr;
1913   if (parseIRConstant(Loc, C))
1914     return true;
1915   Dest = MachineOperand::CreateCImm(cast<ConstantInt>(C));
1916   return false;
1917 }
1918 
1919 bool MIParser::parseFPImmediateOperand(MachineOperand &Dest) {
1920   auto Loc = Token.location();
1921   lex();
1922   if (Token.isNot(MIToken::FloatingPointLiteral) &&
1923       Token.isNot(MIToken::HexLiteral))
1924     return error("expected a floating point literal");
1925   const Constant *C = nullptr;
1926   if (parseIRConstant(Loc, C))
1927     return true;
1928   Dest = MachineOperand::CreateFPImm(cast<ConstantFP>(C));
1929   return false;
1930 }
1931 
1932 static bool getHexUint(const MIToken &Token, APInt &Result) {
1933   assert(Token.is(MIToken::HexLiteral));
1934   StringRef S = Token.range();
1935   assert(S[0] == '0' && tolower(S[1]) == 'x');
1936   // This could be a floating point literal with a special prefix.
1937   if (!isxdigit(S[2]))
1938     return true;
1939   StringRef V = S.substr(2);
1940   APInt A(V.size()*4, V, 16);
1941 
1942   // If A is 0, then A.getActiveBits() is 0. This isn't a valid bitwidth. Make
1943   // sure it isn't the case before constructing result.
1944   unsigned NumBits = (A == 0) ? 32 : A.getActiveBits();
1945   Result = APInt(NumBits, ArrayRef<uint64_t>(A.getRawData(), A.getNumWords()));
1946   return false;
1947 }
1948 
1949 static bool getUnsigned(const MIToken &Token, unsigned &Result,
1950                         ErrorCallbackType ErrCB) {
1951   if (Token.hasIntegerValue()) {
1952     const uint64_t Limit = uint64_t(std::numeric_limits<unsigned>::max()) + 1;
1953     uint64_t Val64 = Token.integerValue().getLimitedValue(Limit);
1954     if (Val64 == Limit)
1955       return ErrCB(Token.location(), "expected 32-bit integer (too large)");
1956     Result = Val64;
1957     return false;
1958   }
1959   if (Token.is(MIToken::HexLiteral)) {
1960     APInt A;
1961     if (getHexUint(Token, A))
1962       return true;
1963     if (A.getBitWidth() > 32)
1964       return ErrCB(Token.location(), "expected 32-bit integer (too large)");
1965     Result = A.getZExtValue();
1966     return false;
1967   }
1968   return true;
1969 }
1970 
1971 bool MIParser::getUnsigned(unsigned &Result) {
1972   return ::getUnsigned(
1973       Token, Result, [this](StringRef::iterator Loc, const Twine &Msg) -> bool {
1974         return error(Loc, Msg);
1975       });
1976 }
1977 
1978 bool MIParser::parseMBBReference(MachineBasicBlock *&MBB) {
1979   assert(Token.is(MIToken::MachineBasicBlock) ||
1980          Token.is(MIToken::MachineBasicBlockLabel));
1981   unsigned Number;
1982   if (getUnsigned(Number))
1983     return true;
1984   auto MBBInfo = PFS.MBBSlots.find(Number);
1985   if (MBBInfo == PFS.MBBSlots.end())
1986     return error(Twine("use of undefined machine basic block #") +
1987                  Twine(Number));
1988   MBB = MBBInfo->second;
1989   // TODO: Only parse the name if it's a MachineBasicBlockLabel. Deprecate once
1990   // we drop the <irname> from the bb.<id>.<irname> format.
1991   if (!Token.stringValue().empty() && Token.stringValue() != MBB->getName())
1992     return error(Twine("the name of machine basic block #") + Twine(Number) +
1993                  " isn't '" + Token.stringValue() + "'");
1994   return false;
1995 }
1996 
1997 bool MIParser::parseMBBOperand(MachineOperand &Dest) {
1998   MachineBasicBlock *MBB;
1999   if (parseMBBReference(MBB))
2000     return true;
2001   Dest = MachineOperand::CreateMBB(MBB);
2002   lex();
2003   return false;
2004 }
2005 
2006 bool MIParser::parseStackFrameIndex(int &FI) {
2007   assert(Token.is(MIToken::StackObject));
2008   unsigned ID;
2009   if (getUnsigned(ID))
2010     return true;
2011   auto ObjectInfo = PFS.StackObjectSlots.find(ID);
2012   if (ObjectInfo == PFS.StackObjectSlots.end())
2013     return error(Twine("use of undefined stack object '%stack.") + Twine(ID) +
2014                  "'");
2015   StringRef Name;
2016   if (const auto *Alloca =
2017           MF.getFrameInfo().getObjectAllocation(ObjectInfo->second))
2018     Name = Alloca->getName();
2019   if (!Token.stringValue().empty() && Token.stringValue() != Name)
2020     return error(Twine("the name of the stack object '%stack.") + Twine(ID) +
2021                  "' isn't '" + Token.stringValue() + "'");
2022   lex();
2023   FI = ObjectInfo->second;
2024   return false;
2025 }
2026 
2027 bool MIParser::parseStackObjectOperand(MachineOperand &Dest) {
2028   int FI;
2029   if (parseStackFrameIndex(FI))
2030     return true;
2031   Dest = MachineOperand::CreateFI(FI);
2032   return false;
2033 }
2034 
2035 bool MIParser::parseFixedStackFrameIndex(int &FI) {
2036   assert(Token.is(MIToken::FixedStackObject));
2037   unsigned ID;
2038   if (getUnsigned(ID))
2039     return true;
2040   auto ObjectInfo = PFS.FixedStackObjectSlots.find(ID);
2041   if (ObjectInfo == PFS.FixedStackObjectSlots.end())
2042     return error(Twine("use of undefined fixed stack object '%fixed-stack.") +
2043                  Twine(ID) + "'");
2044   lex();
2045   FI = ObjectInfo->second;
2046   return false;
2047 }
2048 
2049 bool MIParser::parseFixedStackObjectOperand(MachineOperand &Dest) {
2050   int FI;
2051   if (parseFixedStackFrameIndex(FI))
2052     return true;
2053   Dest = MachineOperand::CreateFI(FI);
2054   return false;
2055 }
2056 
2057 static bool parseGlobalValue(const MIToken &Token,
2058                              PerFunctionMIParsingState &PFS, GlobalValue *&GV,
2059                              ErrorCallbackType ErrCB) {
2060   switch (Token.kind()) {
2061   case MIToken::NamedGlobalValue: {
2062     const Module *M = PFS.MF.getFunction().getParent();
2063     GV = M->getNamedValue(Token.stringValue());
2064     if (!GV)
2065       return ErrCB(Token.location(), Twine("use of undefined global value '") +
2066                                          Token.range() + "'");
2067     break;
2068   }
2069   case MIToken::GlobalValue: {
2070     unsigned GVIdx;
2071     if (getUnsigned(Token, GVIdx, ErrCB))
2072       return true;
2073     if (GVIdx >= PFS.IRSlots.GlobalValues.size())
2074       return ErrCB(Token.location(), Twine("use of undefined global value '@") +
2075                                          Twine(GVIdx) + "'");
2076     GV = PFS.IRSlots.GlobalValues[GVIdx];
2077     break;
2078   }
2079   default:
2080     llvm_unreachable("The current token should be a global value");
2081   }
2082   return false;
2083 }
2084 
2085 bool MIParser::parseGlobalValue(GlobalValue *&GV) {
2086   return ::parseGlobalValue(
2087       Token, PFS, GV,
2088       [this](StringRef::iterator Loc, const Twine &Msg) -> bool {
2089         return error(Loc, Msg);
2090       });
2091 }
2092 
2093 bool MIParser::parseGlobalAddressOperand(MachineOperand &Dest) {
2094   GlobalValue *GV = nullptr;
2095   if (parseGlobalValue(GV))
2096     return true;
2097   lex();
2098   Dest = MachineOperand::CreateGA(GV, /*Offset=*/0);
2099   if (parseOperandsOffset(Dest))
2100     return true;
2101   return false;
2102 }
2103 
2104 bool MIParser::parseConstantPoolIndexOperand(MachineOperand &Dest) {
2105   assert(Token.is(MIToken::ConstantPoolItem));
2106   unsigned ID;
2107   if (getUnsigned(ID))
2108     return true;
2109   auto ConstantInfo = PFS.ConstantPoolSlots.find(ID);
2110   if (ConstantInfo == PFS.ConstantPoolSlots.end())
2111     return error("use of undefined constant '%const." + Twine(ID) + "'");
2112   lex();
2113   Dest = MachineOperand::CreateCPI(ID, /*Offset=*/0);
2114   if (parseOperandsOffset(Dest))
2115     return true;
2116   return false;
2117 }
2118 
2119 bool MIParser::parseJumpTableIndexOperand(MachineOperand &Dest) {
2120   assert(Token.is(MIToken::JumpTableIndex));
2121   unsigned ID;
2122   if (getUnsigned(ID))
2123     return true;
2124   auto JumpTableEntryInfo = PFS.JumpTableSlots.find(ID);
2125   if (JumpTableEntryInfo == PFS.JumpTableSlots.end())
2126     return error("use of undefined jump table '%jump-table." + Twine(ID) + "'");
2127   lex();
2128   Dest = MachineOperand::CreateJTI(JumpTableEntryInfo->second);
2129   return false;
2130 }
2131 
2132 bool MIParser::parseExternalSymbolOperand(MachineOperand &Dest) {
2133   assert(Token.is(MIToken::ExternalSymbol));
2134   const char *Symbol = MF.createExternalSymbolName(Token.stringValue());
2135   lex();
2136   Dest = MachineOperand::CreateES(Symbol);
2137   if (parseOperandsOffset(Dest))
2138     return true;
2139   return false;
2140 }
2141 
2142 bool MIParser::parseMCSymbolOperand(MachineOperand &Dest) {
2143   assert(Token.is(MIToken::MCSymbol));
2144   MCSymbol *Symbol = getOrCreateMCSymbol(Token.stringValue());
2145   lex();
2146   Dest = MachineOperand::CreateMCSymbol(Symbol);
2147   if (parseOperandsOffset(Dest))
2148     return true;
2149   return false;
2150 }
2151 
2152 bool MIParser::parseSubRegisterIndexOperand(MachineOperand &Dest) {
2153   assert(Token.is(MIToken::SubRegisterIndex));
2154   StringRef Name = Token.stringValue();
2155   unsigned SubRegIndex = PFS.Target.getSubRegIndex(Token.stringValue());
2156   if (SubRegIndex == 0)
2157     return error(Twine("unknown subregister index '") + Name + "'");
2158   lex();
2159   Dest = MachineOperand::CreateImm(SubRegIndex);
2160   return false;
2161 }
2162 
2163 bool MIParser::parseMDNode(MDNode *&Node) {
2164   assert(Token.is(MIToken::exclaim));
2165 
2166   auto Loc = Token.location();
2167   lex();
2168   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
2169     return error("expected metadata id after '!'");
2170   unsigned ID;
2171   if (getUnsigned(ID))
2172     return true;
2173   auto NodeInfo = PFS.IRSlots.MetadataNodes.find(ID);
2174   if (NodeInfo == PFS.IRSlots.MetadataNodes.end()) {
2175     NodeInfo = PFS.MachineMetadataNodes.find(ID);
2176     if (NodeInfo == PFS.MachineMetadataNodes.end())
2177       return error(Loc, "use of undefined metadata '!" + Twine(ID) + "'");
2178   }
2179   lex();
2180   Node = NodeInfo->second.get();
2181   return false;
2182 }
2183 
2184 bool MIParser::parseDIExpression(MDNode *&Expr) {
2185   assert(Token.is(MIToken::md_diexpr));
2186   lex();
2187 
2188   // FIXME: Share this parsing with the IL parser.
2189   SmallVector<uint64_t, 8> Elements;
2190 
2191   if (expectAndConsume(MIToken::lparen))
2192     return true;
2193 
2194   if (Token.isNot(MIToken::rparen)) {
2195     do {
2196       if (Token.is(MIToken::Identifier)) {
2197         if (unsigned Op = dwarf::getOperationEncoding(Token.stringValue())) {
2198           lex();
2199           Elements.push_back(Op);
2200           continue;
2201         }
2202         if (unsigned Enc = dwarf::getAttributeEncoding(Token.stringValue())) {
2203           lex();
2204           Elements.push_back(Enc);
2205           continue;
2206         }
2207         return error(Twine("invalid DWARF op '") + Token.stringValue() + "'");
2208       }
2209 
2210       if (Token.isNot(MIToken::IntegerLiteral) ||
2211           Token.integerValue().isSigned())
2212         return error("expected unsigned integer");
2213 
2214       auto &U = Token.integerValue();
2215       if (U.ugt(UINT64_MAX))
2216         return error("element too large, limit is " + Twine(UINT64_MAX));
2217       Elements.push_back(U.getZExtValue());
2218       lex();
2219 
2220     } while (consumeIfPresent(MIToken::comma));
2221   }
2222 
2223   if (expectAndConsume(MIToken::rparen))
2224     return true;
2225 
2226   Expr = DIExpression::get(MF.getFunction().getContext(), Elements);
2227   return false;
2228 }
2229 
2230 bool MIParser::parseDILocation(MDNode *&Loc) {
2231   assert(Token.is(MIToken::md_dilocation));
2232   lex();
2233 
2234   bool HaveLine = false;
2235   unsigned Line = 0;
2236   unsigned Column = 0;
2237   MDNode *Scope = nullptr;
2238   MDNode *InlinedAt = nullptr;
2239   bool ImplicitCode = false;
2240 
2241   if (expectAndConsume(MIToken::lparen))
2242     return true;
2243 
2244   if (Token.isNot(MIToken::rparen)) {
2245     do {
2246       if (Token.is(MIToken::Identifier)) {
2247         if (Token.stringValue() == "line") {
2248           lex();
2249           if (expectAndConsume(MIToken::colon))
2250             return true;
2251           if (Token.isNot(MIToken::IntegerLiteral) ||
2252               Token.integerValue().isSigned())
2253             return error("expected unsigned integer");
2254           Line = Token.integerValue().getZExtValue();
2255           HaveLine = true;
2256           lex();
2257           continue;
2258         }
2259         if (Token.stringValue() == "column") {
2260           lex();
2261           if (expectAndConsume(MIToken::colon))
2262             return true;
2263           if (Token.isNot(MIToken::IntegerLiteral) ||
2264               Token.integerValue().isSigned())
2265             return error("expected unsigned integer");
2266           Column = Token.integerValue().getZExtValue();
2267           lex();
2268           continue;
2269         }
2270         if (Token.stringValue() == "scope") {
2271           lex();
2272           if (expectAndConsume(MIToken::colon))
2273             return true;
2274           if (parseMDNode(Scope))
2275             return error("expected metadata node");
2276           if (!isa<DIScope>(Scope))
2277             return error("expected DIScope node");
2278           continue;
2279         }
2280         if (Token.stringValue() == "inlinedAt") {
2281           lex();
2282           if (expectAndConsume(MIToken::colon))
2283             return true;
2284           if (Token.is(MIToken::exclaim)) {
2285             if (parseMDNode(InlinedAt))
2286               return true;
2287           } else if (Token.is(MIToken::md_dilocation)) {
2288             if (parseDILocation(InlinedAt))
2289               return true;
2290           } else
2291             return error("expected metadata node");
2292           if (!isa<DILocation>(InlinedAt))
2293             return error("expected DILocation node");
2294           continue;
2295         }
2296         if (Token.stringValue() == "isImplicitCode") {
2297           lex();
2298           if (expectAndConsume(MIToken::colon))
2299             return true;
2300           if (!Token.is(MIToken::Identifier))
2301             return error("expected true/false");
2302           // As far as I can see, we don't have any existing need for parsing
2303           // true/false in MIR yet. Do it ad-hoc until there's something else
2304           // that needs it.
2305           if (Token.stringValue() == "true")
2306             ImplicitCode = true;
2307           else if (Token.stringValue() == "false")
2308             ImplicitCode = false;
2309           else
2310             return error("expected true/false");
2311           lex();
2312           continue;
2313         }
2314       }
2315       return error(Twine("invalid DILocation argument '") +
2316                    Token.stringValue() + "'");
2317     } while (consumeIfPresent(MIToken::comma));
2318   }
2319 
2320   if (expectAndConsume(MIToken::rparen))
2321     return true;
2322 
2323   if (!HaveLine)
2324     return error("DILocation requires line number");
2325   if (!Scope)
2326     return error("DILocation requires a scope");
2327 
2328   Loc = DILocation::get(MF.getFunction().getContext(), Line, Column, Scope,
2329                         InlinedAt, ImplicitCode);
2330   return false;
2331 }
2332 
2333 bool MIParser::parseMetadataOperand(MachineOperand &Dest) {
2334   MDNode *Node = nullptr;
2335   if (Token.is(MIToken::exclaim)) {
2336     if (parseMDNode(Node))
2337       return true;
2338   } else if (Token.is(MIToken::md_diexpr)) {
2339     if (parseDIExpression(Node))
2340       return true;
2341   }
2342   Dest = MachineOperand::CreateMetadata(Node);
2343   return false;
2344 }
2345 
2346 bool MIParser::parseCFIOffset(int &Offset) {
2347   if (Token.isNot(MIToken::IntegerLiteral))
2348     return error("expected a cfi offset");
2349   if (Token.integerValue().getMinSignedBits() > 32)
2350     return error("expected a 32 bit integer (the cfi offset is too large)");
2351   Offset = (int)Token.integerValue().getExtValue();
2352   lex();
2353   return false;
2354 }
2355 
2356 bool MIParser::parseCFIRegister(Register &Reg) {
2357   if (Token.isNot(MIToken::NamedRegister))
2358     return error("expected a cfi register");
2359   Register LLVMReg;
2360   if (parseNamedRegister(LLVMReg))
2361     return true;
2362   const auto *TRI = MF.getSubtarget().getRegisterInfo();
2363   assert(TRI && "Expected target register info");
2364   int DwarfReg = TRI->getDwarfRegNum(LLVMReg, true);
2365   if (DwarfReg < 0)
2366     return error("invalid DWARF register");
2367   Reg = (unsigned)DwarfReg;
2368   lex();
2369   return false;
2370 }
2371 
2372 bool MIParser::parseCFIAddressSpace(unsigned &AddressSpace) {
2373   if (Token.isNot(MIToken::IntegerLiteral))
2374     return error("expected a cfi address space literal");
2375   if (Token.integerValue().isSigned())
2376     return error("expected an unsigned integer (cfi address space)");
2377   AddressSpace = Token.integerValue().getZExtValue();
2378   lex();
2379   return false;
2380 }
2381 
2382 bool MIParser::parseCFIEscapeValues(std::string &Values) {
2383   do {
2384     if (Token.isNot(MIToken::HexLiteral))
2385       return error("expected a hexadecimal literal");
2386     unsigned Value;
2387     if (getUnsigned(Value))
2388       return true;
2389     if (Value > UINT8_MAX)
2390       return error("expected a 8-bit integer (too large)");
2391     Values.push_back(static_cast<uint8_t>(Value));
2392     lex();
2393   } while (consumeIfPresent(MIToken::comma));
2394   return false;
2395 }
2396 
2397 bool MIParser::parseCFIOperand(MachineOperand &Dest) {
2398   auto Kind = Token.kind();
2399   lex();
2400   int Offset;
2401   Register Reg;
2402   unsigned AddressSpace;
2403   unsigned CFIIndex;
2404   switch (Kind) {
2405   case MIToken::kw_cfi_same_value:
2406     if (parseCFIRegister(Reg))
2407       return true;
2408     CFIIndex = MF.addFrameInst(MCCFIInstruction::createSameValue(nullptr, Reg));
2409     break;
2410   case MIToken::kw_cfi_offset:
2411     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
2412         parseCFIOffset(Offset))
2413       return true;
2414     CFIIndex =
2415         MF.addFrameInst(MCCFIInstruction::createOffset(nullptr, Reg, Offset));
2416     break;
2417   case MIToken::kw_cfi_rel_offset:
2418     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
2419         parseCFIOffset(Offset))
2420       return true;
2421     CFIIndex = MF.addFrameInst(
2422         MCCFIInstruction::createRelOffset(nullptr, Reg, Offset));
2423     break;
2424   case MIToken::kw_cfi_def_cfa_register:
2425     if (parseCFIRegister(Reg))
2426       return true;
2427     CFIIndex =
2428         MF.addFrameInst(MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
2429     break;
2430   case MIToken::kw_cfi_def_cfa_offset:
2431     if (parseCFIOffset(Offset))
2432       return true;
2433     CFIIndex =
2434         MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset(nullptr, Offset));
2435     break;
2436   case MIToken::kw_cfi_adjust_cfa_offset:
2437     if (parseCFIOffset(Offset))
2438       return true;
2439     CFIIndex = MF.addFrameInst(
2440         MCCFIInstruction::createAdjustCfaOffset(nullptr, Offset));
2441     break;
2442   case MIToken::kw_cfi_def_cfa:
2443     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
2444         parseCFIOffset(Offset))
2445       return true;
2446     CFIIndex =
2447         MF.addFrameInst(MCCFIInstruction::cfiDefCfa(nullptr, Reg, Offset));
2448     break;
2449   case MIToken::kw_cfi_llvm_def_aspace_cfa:
2450     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
2451         parseCFIOffset(Offset) || expectAndConsume(MIToken::comma) ||
2452         parseCFIAddressSpace(AddressSpace))
2453       return true;
2454     CFIIndex = MF.addFrameInst(MCCFIInstruction::createLLVMDefAspaceCfa(
2455         nullptr, Reg, Offset, AddressSpace));
2456     break;
2457   case MIToken::kw_cfi_remember_state:
2458     CFIIndex = MF.addFrameInst(MCCFIInstruction::createRememberState(nullptr));
2459     break;
2460   case MIToken::kw_cfi_restore:
2461     if (parseCFIRegister(Reg))
2462       return true;
2463     CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestore(nullptr, Reg));
2464     break;
2465   case MIToken::kw_cfi_restore_state:
2466     CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestoreState(nullptr));
2467     break;
2468   case MIToken::kw_cfi_undefined:
2469     if (parseCFIRegister(Reg))
2470       return true;
2471     CFIIndex = MF.addFrameInst(MCCFIInstruction::createUndefined(nullptr, Reg));
2472     break;
2473   case MIToken::kw_cfi_register: {
2474     Register Reg2;
2475     if (parseCFIRegister(Reg) || expectAndConsume(MIToken::comma) ||
2476         parseCFIRegister(Reg2))
2477       return true;
2478 
2479     CFIIndex =
2480         MF.addFrameInst(MCCFIInstruction::createRegister(nullptr, Reg, Reg2));
2481     break;
2482   }
2483   case MIToken::kw_cfi_window_save:
2484     CFIIndex = MF.addFrameInst(MCCFIInstruction::createWindowSave(nullptr));
2485     break;
2486   case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
2487     CFIIndex = MF.addFrameInst(MCCFIInstruction::createNegateRAState(nullptr));
2488     break;
2489   case MIToken::kw_cfi_escape: {
2490     std::string Values;
2491     if (parseCFIEscapeValues(Values))
2492       return true;
2493     CFIIndex = MF.addFrameInst(MCCFIInstruction::createEscape(nullptr, Values));
2494     break;
2495   }
2496   default:
2497     // TODO: Parse the other CFI operands.
2498     llvm_unreachable("The current token should be a cfi operand");
2499   }
2500   Dest = MachineOperand::CreateCFIIndex(CFIIndex);
2501   return false;
2502 }
2503 
2504 bool MIParser::parseIRBlock(BasicBlock *&BB, const Function &F) {
2505   switch (Token.kind()) {
2506   case MIToken::NamedIRBlock: {
2507     BB = dyn_cast_or_null<BasicBlock>(
2508         F.getValueSymbolTable()->lookup(Token.stringValue()));
2509     if (!BB)
2510       return error(Twine("use of undefined IR block '") + Token.range() + "'");
2511     break;
2512   }
2513   case MIToken::IRBlock: {
2514     unsigned SlotNumber = 0;
2515     if (getUnsigned(SlotNumber))
2516       return true;
2517     BB = const_cast<BasicBlock *>(getIRBlock(SlotNumber, F));
2518     if (!BB)
2519       return error(Twine("use of undefined IR block '%ir-block.") +
2520                    Twine(SlotNumber) + "'");
2521     break;
2522   }
2523   default:
2524     llvm_unreachable("The current token should be an IR block reference");
2525   }
2526   return false;
2527 }
2528 
2529 bool MIParser::parseBlockAddressOperand(MachineOperand &Dest) {
2530   assert(Token.is(MIToken::kw_blockaddress));
2531   lex();
2532   if (expectAndConsume(MIToken::lparen))
2533     return true;
2534   if (Token.isNot(MIToken::GlobalValue) &&
2535       Token.isNot(MIToken::NamedGlobalValue))
2536     return error("expected a global value");
2537   GlobalValue *GV = nullptr;
2538   if (parseGlobalValue(GV))
2539     return true;
2540   auto *F = dyn_cast<Function>(GV);
2541   if (!F)
2542     return error("expected an IR function reference");
2543   lex();
2544   if (expectAndConsume(MIToken::comma))
2545     return true;
2546   BasicBlock *BB = nullptr;
2547   if (Token.isNot(MIToken::IRBlock) && Token.isNot(MIToken::NamedIRBlock))
2548     return error("expected an IR block reference");
2549   if (parseIRBlock(BB, *F))
2550     return true;
2551   lex();
2552   if (expectAndConsume(MIToken::rparen))
2553     return true;
2554   Dest = MachineOperand::CreateBA(BlockAddress::get(F, BB), /*Offset=*/0);
2555   if (parseOperandsOffset(Dest))
2556     return true;
2557   return false;
2558 }
2559 
2560 bool MIParser::parseIntrinsicOperand(MachineOperand &Dest) {
2561   assert(Token.is(MIToken::kw_intrinsic));
2562   lex();
2563   if (expectAndConsume(MIToken::lparen))
2564     return error("expected syntax intrinsic(@llvm.whatever)");
2565 
2566   if (Token.isNot(MIToken::NamedGlobalValue))
2567     return error("expected syntax intrinsic(@llvm.whatever)");
2568 
2569   std::string Name = std::string(Token.stringValue());
2570   lex();
2571 
2572   if (expectAndConsume(MIToken::rparen))
2573     return error("expected ')' to terminate intrinsic name");
2574 
2575   // Find out what intrinsic we're dealing with, first try the global namespace
2576   // and then the target's private intrinsics if that fails.
2577   const TargetIntrinsicInfo *TII = MF.getTarget().getIntrinsicInfo();
2578   Intrinsic::ID ID = Function::lookupIntrinsicID(Name);
2579   if (ID == Intrinsic::not_intrinsic && TII)
2580     ID = static_cast<Intrinsic::ID>(TII->lookupName(Name));
2581 
2582   if (ID == Intrinsic::not_intrinsic)
2583     return error("unknown intrinsic name");
2584   Dest = MachineOperand::CreateIntrinsicID(ID);
2585 
2586   return false;
2587 }
2588 
2589 bool MIParser::parsePredicateOperand(MachineOperand &Dest) {
2590   assert(Token.is(MIToken::kw_intpred) || Token.is(MIToken::kw_floatpred));
2591   bool IsFloat = Token.is(MIToken::kw_floatpred);
2592   lex();
2593 
2594   if (expectAndConsume(MIToken::lparen))
2595     return error("expected syntax intpred(whatever) or floatpred(whatever");
2596 
2597   if (Token.isNot(MIToken::Identifier))
2598     return error("whatever");
2599 
2600   CmpInst::Predicate Pred;
2601   if (IsFloat) {
2602     Pred = StringSwitch<CmpInst::Predicate>(Token.stringValue())
2603                .Case("false", CmpInst::FCMP_FALSE)
2604                .Case("oeq", CmpInst::FCMP_OEQ)
2605                .Case("ogt", CmpInst::FCMP_OGT)
2606                .Case("oge", CmpInst::FCMP_OGE)
2607                .Case("olt", CmpInst::FCMP_OLT)
2608                .Case("ole", CmpInst::FCMP_OLE)
2609                .Case("one", CmpInst::FCMP_ONE)
2610                .Case("ord", CmpInst::FCMP_ORD)
2611                .Case("uno", CmpInst::FCMP_UNO)
2612                .Case("ueq", CmpInst::FCMP_UEQ)
2613                .Case("ugt", CmpInst::FCMP_UGT)
2614                .Case("uge", CmpInst::FCMP_UGE)
2615                .Case("ult", CmpInst::FCMP_ULT)
2616                .Case("ule", CmpInst::FCMP_ULE)
2617                .Case("une", CmpInst::FCMP_UNE)
2618                .Case("true", CmpInst::FCMP_TRUE)
2619                .Default(CmpInst::BAD_FCMP_PREDICATE);
2620     if (!CmpInst::isFPPredicate(Pred))
2621       return error("invalid floating-point predicate");
2622   } else {
2623     Pred = StringSwitch<CmpInst::Predicate>(Token.stringValue())
2624                .Case("eq", CmpInst::ICMP_EQ)
2625                .Case("ne", CmpInst::ICMP_NE)
2626                .Case("sgt", CmpInst::ICMP_SGT)
2627                .Case("sge", CmpInst::ICMP_SGE)
2628                .Case("slt", CmpInst::ICMP_SLT)
2629                .Case("sle", CmpInst::ICMP_SLE)
2630                .Case("ugt", CmpInst::ICMP_UGT)
2631                .Case("uge", CmpInst::ICMP_UGE)
2632                .Case("ult", CmpInst::ICMP_ULT)
2633                .Case("ule", CmpInst::ICMP_ULE)
2634                .Default(CmpInst::BAD_ICMP_PREDICATE);
2635     if (!CmpInst::isIntPredicate(Pred))
2636       return error("invalid integer predicate");
2637   }
2638 
2639   lex();
2640   Dest = MachineOperand::CreatePredicate(Pred);
2641   if (expectAndConsume(MIToken::rparen))
2642     return error("predicate should be terminated by ')'.");
2643 
2644   return false;
2645 }
2646 
2647 bool MIParser::parseShuffleMaskOperand(MachineOperand &Dest) {
2648   assert(Token.is(MIToken::kw_shufflemask));
2649 
2650   lex();
2651   if (expectAndConsume(MIToken::lparen))
2652     return error("expected syntax shufflemask(<integer or undef>, ...)");
2653 
2654   SmallVector<int, 32> ShufMask;
2655   do {
2656     if (Token.is(MIToken::kw_undef)) {
2657       ShufMask.push_back(-1);
2658     } else if (Token.is(MIToken::IntegerLiteral)) {
2659       const APSInt &Int = Token.integerValue();
2660       ShufMask.push_back(Int.getExtValue());
2661     } else
2662       return error("expected integer constant");
2663 
2664     lex();
2665   } while (consumeIfPresent(MIToken::comma));
2666 
2667   if (expectAndConsume(MIToken::rparen))
2668     return error("shufflemask should be terminated by ')'.");
2669 
2670   ArrayRef<int> MaskAlloc = MF.allocateShuffleMask(ShufMask);
2671   Dest = MachineOperand::CreateShuffleMask(MaskAlloc);
2672   return false;
2673 }
2674 
2675 bool MIParser::parseTargetIndexOperand(MachineOperand &Dest) {
2676   assert(Token.is(MIToken::kw_target_index));
2677   lex();
2678   if (expectAndConsume(MIToken::lparen))
2679     return true;
2680   if (Token.isNot(MIToken::Identifier))
2681     return error("expected the name of the target index");
2682   int Index = 0;
2683   if (PFS.Target.getTargetIndex(Token.stringValue(), Index))
2684     return error("use of undefined target index '" + Token.stringValue() + "'");
2685   lex();
2686   if (expectAndConsume(MIToken::rparen))
2687     return true;
2688   Dest = MachineOperand::CreateTargetIndex(unsigned(Index), /*Offset=*/0);
2689   if (parseOperandsOffset(Dest))
2690     return true;
2691   return false;
2692 }
2693 
2694 bool MIParser::parseCustomRegisterMaskOperand(MachineOperand &Dest) {
2695   assert(Token.stringValue() == "CustomRegMask" && "Expected a custom RegMask");
2696   lex();
2697   if (expectAndConsume(MIToken::lparen))
2698     return true;
2699 
2700   uint32_t *Mask = MF.allocateRegMask();
2701   while (true) {
2702     if (Token.isNot(MIToken::NamedRegister))
2703       return error("expected a named register");
2704     Register Reg;
2705     if (parseNamedRegister(Reg))
2706       return true;
2707     lex();
2708     Mask[Reg / 32] |= 1U << (Reg % 32);
2709     // TODO: Report an error if the same register is used more than once.
2710     if (Token.isNot(MIToken::comma))
2711       break;
2712     lex();
2713   }
2714 
2715   if (expectAndConsume(MIToken::rparen))
2716     return true;
2717   Dest = MachineOperand::CreateRegMask(Mask);
2718   return false;
2719 }
2720 
2721 bool MIParser::parseLiveoutRegisterMaskOperand(MachineOperand &Dest) {
2722   assert(Token.is(MIToken::kw_liveout));
2723   uint32_t *Mask = MF.allocateRegMask();
2724   lex();
2725   if (expectAndConsume(MIToken::lparen))
2726     return true;
2727   while (true) {
2728     if (Token.isNot(MIToken::NamedRegister))
2729       return error("expected a named register");
2730     Register Reg;
2731     if (parseNamedRegister(Reg))
2732       return true;
2733     lex();
2734     Mask[Reg / 32] |= 1U << (Reg % 32);
2735     // TODO: Report an error if the same register is used more than once.
2736     if (Token.isNot(MIToken::comma))
2737       break;
2738     lex();
2739   }
2740   if (expectAndConsume(MIToken::rparen))
2741     return true;
2742   Dest = MachineOperand::CreateRegLiveOut(Mask);
2743   return false;
2744 }
2745 
2746 bool MIParser::parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
2747                                    MachineOperand &Dest,
2748                                    Optional<unsigned> &TiedDefIdx) {
2749   switch (Token.kind()) {
2750   case MIToken::kw_implicit:
2751   case MIToken::kw_implicit_define:
2752   case MIToken::kw_def:
2753   case MIToken::kw_dead:
2754   case MIToken::kw_killed:
2755   case MIToken::kw_undef:
2756   case MIToken::kw_internal:
2757   case MIToken::kw_early_clobber:
2758   case MIToken::kw_debug_use:
2759   case MIToken::kw_renamable:
2760   case MIToken::underscore:
2761   case MIToken::NamedRegister:
2762   case MIToken::VirtualRegister:
2763   case MIToken::NamedVirtualRegister:
2764     return parseRegisterOperand(Dest, TiedDefIdx);
2765   case MIToken::IntegerLiteral:
2766     return parseImmediateOperand(Dest);
2767   case MIToken::kw_half:
2768   case MIToken::kw_float:
2769   case MIToken::kw_double:
2770   case MIToken::kw_x86_fp80:
2771   case MIToken::kw_fp128:
2772   case MIToken::kw_ppc_fp128:
2773     return parseFPImmediateOperand(Dest);
2774   case MIToken::MachineBasicBlock:
2775     return parseMBBOperand(Dest);
2776   case MIToken::StackObject:
2777     return parseStackObjectOperand(Dest);
2778   case MIToken::FixedStackObject:
2779     return parseFixedStackObjectOperand(Dest);
2780   case MIToken::GlobalValue:
2781   case MIToken::NamedGlobalValue:
2782     return parseGlobalAddressOperand(Dest);
2783   case MIToken::ConstantPoolItem:
2784     return parseConstantPoolIndexOperand(Dest);
2785   case MIToken::JumpTableIndex:
2786     return parseJumpTableIndexOperand(Dest);
2787   case MIToken::ExternalSymbol:
2788     return parseExternalSymbolOperand(Dest);
2789   case MIToken::MCSymbol:
2790     return parseMCSymbolOperand(Dest);
2791   case MIToken::SubRegisterIndex:
2792     return parseSubRegisterIndexOperand(Dest);
2793   case MIToken::md_diexpr:
2794   case MIToken::exclaim:
2795     return parseMetadataOperand(Dest);
2796   case MIToken::kw_cfi_same_value:
2797   case MIToken::kw_cfi_offset:
2798   case MIToken::kw_cfi_rel_offset:
2799   case MIToken::kw_cfi_def_cfa_register:
2800   case MIToken::kw_cfi_def_cfa_offset:
2801   case MIToken::kw_cfi_adjust_cfa_offset:
2802   case MIToken::kw_cfi_escape:
2803   case MIToken::kw_cfi_def_cfa:
2804   case MIToken::kw_cfi_llvm_def_aspace_cfa:
2805   case MIToken::kw_cfi_register:
2806   case MIToken::kw_cfi_remember_state:
2807   case MIToken::kw_cfi_restore:
2808   case MIToken::kw_cfi_restore_state:
2809   case MIToken::kw_cfi_undefined:
2810   case MIToken::kw_cfi_window_save:
2811   case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
2812     return parseCFIOperand(Dest);
2813   case MIToken::kw_blockaddress:
2814     return parseBlockAddressOperand(Dest);
2815   case MIToken::kw_intrinsic:
2816     return parseIntrinsicOperand(Dest);
2817   case MIToken::kw_target_index:
2818     return parseTargetIndexOperand(Dest);
2819   case MIToken::kw_liveout:
2820     return parseLiveoutRegisterMaskOperand(Dest);
2821   case MIToken::kw_floatpred:
2822   case MIToken::kw_intpred:
2823     return parsePredicateOperand(Dest);
2824   case MIToken::kw_shufflemask:
2825     return parseShuffleMaskOperand(Dest);
2826   case MIToken::Error:
2827     return true;
2828   case MIToken::Identifier:
2829     if (const auto *RegMask = PFS.Target.getRegMask(Token.stringValue())) {
2830       Dest = MachineOperand::CreateRegMask(RegMask);
2831       lex();
2832       break;
2833     } else if (Token.stringValue() == "CustomRegMask") {
2834       return parseCustomRegisterMaskOperand(Dest);
2835     } else
2836       return parseTypedImmediateOperand(Dest);
2837   case MIToken::dot: {
2838     const auto *TII = MF.getSubtarget().getInstrInfo();
2839     if (const auto *Formatter = TII->getMIRFormatter()) {
2840       return parseTargetImmMnemonic(OpCode, OpIdx, Dest, *Formatter);
2841     }
2842     LLVM_FALLTHROUGH;
2843   }
2844   default:
2845     // FIXME: Parse the MCSymbol machine operand.
2846     return error("expected a machine operand");
2847   }
2848   return false;
2849 }
2850 
2851 bool MIParser::parseMachineOperandAndTargetFlags(
2852     const unsigned OpCode, const unsigned OpIdx, MachineOperand &Dest,
2853     Optional<unsigned> &TiedDefIdx) {
2854   unsigned TF = 0;
2855   bool HasTargetFlags = false;
2856   if (Token.is(MIToken::kw_target_flags)) {
2857     HasTargetFlags = true;
2858     lex();
2859     if (expectAndConsume(MIToken::lparen))
2860       return true;
2861     if (Token.isNot(MIToken::Identifier))
2862       return error("expected the name of the target flag");
2863     if (PFS.Target.getDirectTargetFlag(Token.stringValue(), TF)) {
2864       if (PFS.Target.getBitmaskTargetFlag(Token.stringValue(), TF))
2865         return error("use of undefined target flag '" + Token.stringValue() +
2866                      "'");
2867     }
2868     lex();
2869     while (Token.is(MIToken::comma)) {
2870       lex();
2871       if (Token.isNot(MIToken::Identifier))
2872         return error("expected the name of the target flag");
2873       unsigned BitFlag = 0;
2874       if (PFS.Target.getBitmaskTargetFlag(Token.stringValue(), BitFlag))
2875         return error("use of undefined target flag '" + Token.stringValue() +
2876                      "'");
2877       // TODO: Report an error when using a duplicate bit target flag.
2878       TF |= BitFlag;
2879       lex();
2880     }
2881     if (expectAndConsume(MIToken::rparen))
2882       return true;
2883   }
2884   auto Loc = Token.location();
2885   if (parseMachineOperand(OpCode, OpIdx, Dest, TiedDefIdx))
2886     return true;
2887   if (!HasTargetFlags)
2888     return false;
2889   if (Dest.isReg())
2890     return error(Loc, "register operands can't have target flags");
2891   Dest.setTargetFlags(TF);
2892   return false;
2893 }
2894 
2895 bool MIParser::parseOffset(int64_t &Offset) {
2896   if (Token.isNot(MIToken::plus) && Token.isNot(MIToken::minus))
2897     return false;
2898   StringRef Sign = Token.range();
2899   bool IsNegative = Token.is(MIToken::minus);
2900   lex();
2901   if (Token.isNot(MIToken::IntegerLiteral))
2902     return error("expected an integer literal after '" + Sign + "'");
2903   if (Token.integerValue().getMinSignedBits() > 64)
2904     return error("expected 64-bit integer (too large)");
2905   Offset = Token.integerValue().getExtValue();
2906   if (IsNegative)
2907     Offset = -Offset;
2908   lex();
2909   return false;
2910 }
2911 
2912 bool MIParser::parseAlignment(uint64_t &Alignment) {
2913   assert(Token.is(MIToken::kw_align) || Token.is(MIToken::kw_basealign));
2914   lex();
2915   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
2916     return error("expected an integer literal after 'align'");
2917   if (getUint64(Alignment))
2918     return true;
2919   lex();
2920 
2921   if (!isPowerOf2_64(Alignment))
2922     return error("expected a power-of-2 literal after 'align'");
2923 
2924   return false;
2925 }
2926 
2927 bool MIParser::parseAddrspace(unsigned &Addrspace) {
2928   assert(Token.is(MIToken::kw_addrspace));
2929   lex();
2930   if (Token.isNot(MIToken::IntegerLiteral) || Token.integerValue().isSigned())
2931     return error("expected an integer literal after 'addrspace'");
2932   if (getUnsigned(Addrspace))
2933     return true;
2934   lex();
2935   return false;
2936 }
2937 
2938 bool MIParser::parseOperandsOffset(MachineOperand &Op) {
2939   int64_t Offset = 0;
2940   if (parseOffset(Offset))
2941     return true;
2942   Op.setOffset(Offset);
2943   return false;
2944 }
2945 
2946 static bool parseIRValue(const MIToken &Token, PerFunctionMIParsingState &PFS,
2947                          const Value *&V, ErrorCallbackType ErrCB) {
2948   switch (Token.kind()) {
2949   case MIToken::NamedIRValue: {
2950     V = PFS.MF.getFunction().getValueSymbolTable()->lookup(Token.stringValue());
2951     break;
2952   }
2953   case MIToken::IRValue: {
2954     unsigned SlotNumber = 0;
2955     if (getUnsigned(Token, SlotNumber, ErrCB))
2956       return true;
2957     V = PFS.getIRValue(SlotNumber);
2958     break;
2959   }
2960   case MIToken::NamedGlobalValue:
2961   case MIToken::GlobalValue: {
2962     GlobalValue *GV = nullptr;
2963     if (parseGlobalValue(Token, PFS, GV, ErrCB))
2964       return true;
2965     V = GV;
2966     break;
2967   }
2968   case MIToken::QuotedIRValue: {
2969     const Constant *C = nullptr;
2970     if (parseIRConstant(Token.location(), Token.stringValue(), PFS, C, ErrCB))
2971       return true;
2972     V = C;
2973     break;
2974   }
2975   case MIToken::kw_unknown_address:
2976     V = nullptr;
2977     return false;
2978   default:
2979     llvm_unreachable("The current token should be an IR block reference");
2980   }
2981   if (!V)
2982     return ErrCB(Token.location(), Twine("use of undefined IR value '") + Token.range() + "'");
2983   return false;
2984 }
2985 
2986 bool MIParser::parseIRValue(const Value *&V) {
2987   return ::parseIRValue(
2988       Token, PFS, V, [this](StringRef::iterator Loc, const Twine &Msg) -> bool {
2989         return error(Loc, Msg);
2990       });
2991 }
2992 
2993 bool MIParser::getUint64(uint64_t &Result) {
2994   if (Token.hasIntegerValue()) {
2995     if (Token.integerValue().getActiveBits() > 64)
2996       return error("expected 64-bit integer (too large)");
2997     Result = Token.integerValue().getZExtValue();
2998     return false;
2999   }
3000   if (Token.is(MIToken::HexLiteral)) {
3001     APInt A;
3002     if (getHexUint(A))
3003       return true;
3004     if (A.getBitWidth() > 64)
3005       return error("expected 64-bit integer (too large)");
3006     Result = A.getZExtValue();
3007     return false;
3008   }
3009   return true;
3010 }
3011 
3012 bool MIParser::getHexUint(APInt &Result) {
3013   return ::getHexUint(Token, Result);
3014 }
3015 
3016 bool MIParser::parseMemoryOperandFlag(MachineMemOperand::Flags &Flags) {
3017   const auto OldFlags = Flags;
3018   switch (Token.kind()) {
3019   case MIToken::kw_volatile:
3020     Flags |= MachineMemOperand::MOVolatile;
3021     break;
3022   case MIToken::kw_non_temporal:
3023     Flags |= MachineMemOperand::MONonTemporal;
3024     break;
3025   case MIToken::kw_dereferenceable:
3026     Flags |= MachineMemOperand::MODereferenceable;
3027     break;
3028   case MIToken::kw_invariant:
3029     Flags |= MachineMemOperand::MOInvariant;
3030     break;
3031   case MIToken::StringConstant: {
3032     MachineMemOperand::Flags TF;
3033     if (PFS.Target.getMMOTargetFlag(Token.stringValue(), TF))
3034       return error("use of undefined target MMO flag '" + Token.stringValue() +
3035                    "'");
3036     Flags |= TF;
3037     break;
3038   }
3039   default:
3040     llvm_unreachable("The current token should be a memory operand flag");
3041   }
3042   if (OldFlags == Flags)
3043     // We know that the same flag is specified more than once when the flags
3044     // weren't modified.
3045     return error("duplicate '" + Token.stringValue() + "' memory operand flag");
3046   lex();
3047   return false;
3048 }
3049 
3050 bool MIParser::parseMemoryPseudoSourceValue(const PseudoSourceValue *&PSV) {
3051   switch (Token.kind()) {
3052   case MIToken::kw_stack:
3053     PSV = MF.getPSVManager().getStack();
3054     break;
3055   case MIToken::kw_got:
3056     PSV = MF.getPSVManager().getGOT();
3057     break;
3058   case MIToken::kw_jump_table:
3059     PSV = MF.getPSVManager().getJumpTable();
3060     break;
3061   case MIToken::kw_constant_pool:
3062     PSV = MF.getPSVManager().getConstantPool();
3063     break;
3064   case MIToken::FixedStackObject: {
3065     int FI;
3066     if (parseFixedStackFrameIndex(FI))
3067       return true;
3068     PSV = MF.getPSVManager().getFixedStack(FI);
3069     // The token was already consumed, so use return here instead of break.
3070     return false;
3071   }
3072   case MIToken::StackObject: {
3073     int FI;
3074     if (parseStackFrameIndex(FI))
3075       return true;
3076     PSV = MF.getPSVManager().getFixedStack(FI);
3077     // The token was already consumed, so use return here instead of break.
3078     return false;
3079   }
3080   case MIToken::kw_call_entry:
3081     lex();
3082     switch (Token.kind()) {
3083     case MIToken::GlobalValue:
3084     case MIToken::NamedGlobalValue: {
3085       GlobalValue *GV = nullptr;
3086       if (parseGlobalValue(GV))
3087         return true;
3088       PSV = MF.getPSVManager().getGlobalValueCallEntry(GV);
3089       break;
3090     }
3091     case MIToken::ExternalSymbol:
3092       PSV = MF.getPSVManager().getExternalSymbolCallEntry(
3093           MF.createExternalSymbolName(Token.stringValue()));
3094       break;
3095     default:
3096       return error(
3097           "expected a global value or an external symbol after 'call-entry'");
3098     }
3099     break;
3100   case MIToken::kw_custom: {
3101     lex();
3102     const auto *TII = MF.getSubtarget().getInstrInfo();
3103     if (const auto *Formatter = TII->getMIRFormatter()) {
3104       if (Formatter->parseCustomPseudoSourceValue(
3105               Token.stringValue(), MF, PFS, PSV,
3106               [this](StringRef::iterator Loc, const Twine &Msg) -> bool {
3107                 return error(Loc, Msg);
3108               }))
3109         return true;
3110     } else
3111       return error("unable to parse target custom pseudo source value");
3112     break;
3113   }
3114   default:
3115     llvm_unreachable("The current token should be pseudo source value");
3116   }
3117   lex();
3118   return false;
3119 }
3120 
3121 bool MIParser::parseMachinePointerInfo(MachinePointerInfo &Dest) {
3122   if (Token.is(MIToken::kw_constant_pool) || Token.is(MIToken::kw_stack) ||
3123       Token.is(MIToken::kw_got) || Token.is(MIToken::kw_jump_table) ||
3124       Token.is(MIToken::FixedStackObject) || Token.is(MIToken::StackObject) ||
3125       Token.is(MIToken::kw_call_entry) || Token.is(MIToken::kw_custom)) {
3126     const PseudoSourceValue *PSV = nullptr;
3127     if (parseMemoryPseudoSourceValue(PSV))
3128       return true;
3129     int64_t Offset = 0;
3130     if (parseOffset(Offset))
3131       return true;
3132     Dest = MachinePointerInfo(PSV, Offset);
3133     return false;
3134   }
3135   if (Token.isNot(MIToken::NamedIRValue) && Token.isNot(MIToken::IRValue) &&
3136       Token.isNot(MIToken::GlobalValue) &&
3137       Token.isNot(MIToken::NamedGlobalValue) &&
3138       Token.isNot(MIToken::QuotedIRValue) &&
3139       Token.isNot(MIToken::kw_unknown_address))
3140     return error("expected an IR value reference");
3141   const Value *V = nullptr;
3142   if (parseIRValue(V))
3143     return true;
3144   if (V && !V->getType()->isPointerTy())
3145     return error("expected a pointer IR value");
3146   lex();
3147   int64_t Offset = 0;
3148   if (parseOffset(Offset))
3149     return true;
3150   Dest = MachinePointerInfo(V, Offset);
3151   return false;
3152 }
3153 
3154 bool MIParser::parseOptionalScope(LLVMContext &Context,
3155                                   SyncScope::ID &SSID) {
3156   SSID = SyncScope::System;
3157   if (Token.is(MIToken::Identifier) && Token.stringValue() == "syncscope") {
3158     lex();
3159     if (expectAndConsume(MIToken::lparen))
3160       return error("expected '(' in syncscope");
3161 
3162     std::string SSN;
3163     if (parseStringConstant(SSN))
3164       return true;
3165 
3166     SSID = Context.getOrInsertSyncScopeID(SSN);
3167     if (expectAndConsume(MIToken::rparen))
3168       return error("expected ')' in syncscope");
3169   }
3170 
3171   return false;
3172 }
3173 
3174 bool MIParser::parseOptionalAtomicOrdering(AtomicOrdering &Order) {
3175   Order = AtomicOrdering::NotAtomic;
3176   if (Token.isNot(MIToken::Identifier))
3177     return false;
3178 
3179   Order = StringSwitch<AtomicOrdering>(Token.stringValue())
3180               .Case("unordered", AtomicOrdering::Unordered)
3181               .Case("monotonic", AtomicOrdering::Monotonic)
3182               .Case("acquire", AtomicOrdering::Acquire)
3183               .Case("release", AtomicOrdering::Release)
3184               .Case("acq_rel", AtomicOrdering::AcquireRelease)
3185               .Case("seq_cst", AtomicOrdering::SequentiallyConsistent)
3186               .Default(AtomicOrdering::NotAtomic);
3187 
3188   if (Order != AtomicOrdering::NotAtomic) {
3189     lex();
3190     return false;
3191   }
3192 
3193   return error("expected an atomic scope, ordering or a size specification");
3194 }
3195 
3196 bool MIParser::parseMachineMemoryOperand(MachineMemOperand *&Dest) {
3197   if (expectAndConsume(MIToken::lparen))
3198     return true;
3199   MachineMemOperand::Flags Flags = MachineMemOperand::MONone;
3200   while (Token.isMemoryOperandFlag()) {
3201     if (parseMemoryOperandFlag(Flags))
3202       return true;
3203   }
3204   if (Token.isNot(MIToken::Identifier) ||
3205       (Token.stringValue() != "load" && Token.stringValue() != "store"))
3206     return error("expected 'load' or 'store' memory operation");
3207   if (Token.stringValue() == "load")
3208     Flags |= MachineMemOperand::MOLoad;
3209   else
3210     Flags |= MachineMemOperand::MOStore;
3211   lex();
3212 
3213   // Optional 'store' for operands that both load and store.
3214   if (Token.is(MIToken::Identifier) && Token.stringValue() == "store") {
3215     Flags |= MachineMemOperand::MOStore;
3216     lex();
3217   }
3218 
3219   // Optional synchronization scope.
3220   SyncScope::ID SSID;
3221   if (parseOptionalScope(MF.getFunction().getContext(), SSID))
3222     return true;
3223 
3224   // Up to two atomic orderings (cmpxchg provides guarantees on failure).
3225   AtomicOrdering Order, FailureOrder;
3226   if (parseOptionalAtomicOrdering(Order))
3227     return true;
3228 
3229   if (parseOptionalAtomicOrdering(FailureOrder))
3230     return true;
3231 
3232   LLT MemoryType;
3233   if (Token.isNot(MIToken::IntegerLiteral) &&
3234       Token.isNot(MIToken::kw_unknown_size) &&
3235       Token.isNot(MIToken::lparen))
3236     return error("expected memory LLT, the size integer literal or 'unknown-size' after "
3237                  "memory operation");
3238 
3239   uint64_t Size = MemoryLocation::UnknownSize;
3240   if (Token.is(MIToken::IntegerLiteral)) {
3241     if (getUint64(Size))
3242       return true;
3243 
3244     // Convert from bytes to bits for storage.
3245     MemoryType = LLT::scalar(8 * Size);
3246     lex();
3247   } else if (Token.is(MIToken::kw_unknown_size)) {
3248     Size = MemoryLocation::UnknownSize;
3249     lex();
3250   } else {
3251     if (expectAndConsume(MIToken::lparen))
3252       return true;
3253     if (parseLowLevelType(Token.location(), MemoryType))
3254       return true;
3255     if (expectAndConsume(MIToken::rparen))
3256       return true;
3257 
3258     Size = MemoryType.getSizeInBytes();
3259   }
3260 
3261   MachinePointerInfo Ptr = MachinePointerInfo();
3262   if (Token.is(MIToken::Identifier)) {
3263     const char *Word =
3264         ((Flags & MachineMemOperand::MOLoad) &&
3265          (Flags & MachineMemOperand::MOStore))
3266             ? "on"
3267             : Flags & MachineMemOperand::MOLoad ? "from" : "into";
3268     if (Token.stringValue() != Word)
3269       return error(Twine("expected '") + Word + "'");
3270     lex();
3271 
3272     if (parseMachinePointerInfo(Ptr))
3273       return true;
3274   }
3275   uint64_t BaseAlignment =
3276       (Size != MemoryLocation::UnknownSize ? PowerOf2Ceil(Size) : 1);
3277   AAMDNodes AAInfo;
3278   MDNode *Range = nullptr;
3279   while (consumeIfPresent(MIToken::comma)) {
3280     switch (Token.kind()) {
3281     case MIToken::kw_align: {
3282       // align is printed if it is different than size.
3283       uint64_t Alignment;
3284       if (parseAlignment(Alignment))
3285         return true;
3286       if (Ptr.Offset & (Alignment - 1)) {
3287         // MachineMemOperand::getAlign never returns a value greater than the
3288         // alignment of offset, so this just guards against hand-written MIR
3289         // that specifies a large "align" value when it should probably use
3290         // "basealign" instead.
3291         return error("specified alignment is more aligned than offset");
3292       }
3293       BaseAlignment = Alignment;
3294       break;
3295     }
3296     case MIToken::kw_basealign:
3297       // basealign is printed if it is different than align.
3298       if (parseAlignment(BaseAlignment))
3299         return true;
3300       break;
3301     case MIToken::kw_addrspace:
3302       if (parseAddrspace(Ptr.AddrSpace))
3303         return true;
3304       break;
3305     case MIToken::md_tbaa:
3306       lex();
3307       if (parseMDNode(AAInfo.TBAA))
3308         return true;
3309       break;
3310     case MIToken::md_alias_scope:
3311       lex();
3312       if (parseMDNode(AAInfo.Scope))
3313         return true;
3314       break;
3315     case MIToken::md_noalias:
3316       lex();
3317       if (parseMDNode(AAInfo.NoAlias))
3318         return true;
3319       break;
3320     case MIToken::md_range:
3321       lex();
3322       if (parseMDNode(Range))
3323         return true;
3324       break;
3325     // TODO: Report an error on duplicate metadata nodes.
3326     default:
3327       return error("expected 'align' or '!tbaa' or '!alias.scope' or "
3328                    "'!noalias' or '!range'");
3329     }
3330   }
3331   if (expectAndConsume(MIToken::rparen))
3332     return true;
3333   Dest = MF.getMachineMemOperand(Ptr, Flags, MemoryType, Align(BaseAlignment),
3334                                  AAInfo, Range, SSID, Order, FailureOrder);
3335   return false;
3336 }
3337 
3338 bool MIParser::parsePreOrPostInstrSymbol(MCSymbol *&Symbol) {
3339   assert((Token.is(MIToken::kw_pre_instr_symbol) ||
3340           Token.is(MIToken::kw_post_instr_symbol)) &&
3341          "Invalid token for a pre- post-instruction symbol!");
3342   lex();
3343   if (Token.isNot(MIToken::MCSymbol))
3344     return error("expected a symbol after 'pre-instr-symbol'");
3345   Symbol = getOrCreateMCSymbol(Token.stringValue());
3346   lex();
3347   if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) ||
3348       Token.is(MIToken::lbrace))
3349     return false;
3350   if (Token.isNot(MIToken::comma))
3351     return error("expected ',' before the next machine operand");
3352   lex();
3353   return false;
3354 }
3355 
3356 bool MIParser::parseHeapAllocMarker(MDNode *&Node) {
3357   assert(Token.is(MIToken::kw_heap_alloc_marker) &&
3358          "Invalid token for a heap alloc marker!");
3359   lex();
3360   parseMDNode(Node);
3361   if (!Node)
3362     return error("expected a MDNode after 'heap-alloc-marker'");
3363   if (Token.isNewlineOrEOF() || Token.is(MIToken::coloncolon) ||
3364       Token.is(MIToken::lbrace))
3365     return false;
3366   if (Token.isNot(MIToken::comma))
3367     return error("expected ',' before the next machine operand");
3368   lex();
3369   return false;
3370 }
3371 
3372 static void initSlots2BasicBlocks(
3373     const Function &F,
3374     DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) {
3375   ModuleSlotTracker MST(F.getParent(), /*ShouldInitializeAllMetadata=*/false);
3376   MST.incorporateFunction(F);
3377   for (auto &BB : F) {
3378     if (BB.hasName())
3379       continue;
3380     int Slot = MST.getLocalSlot(&BB);
3381     if (Slot == -1)
3382       continue;
3383     Slots2BasicBlocks.insert(std::make_pair(unsigned(Slot), &BB));
3384   }
3385 }
3386 
3387 static const BasicBlock *getIRBlockFromSlot(
3388     unsigned Slot,
3389     const DenseMap<unsigned, const BasicBlock *> &Slots2BasicBlocks) {
3390   return Slots2BasicBlocks.lookup(Slot);
3391 }
3392 
3393 const BasicBlock *MIParser::getIRBlock(unsigned Slot) {
3394   if (Slots2BasicBlocks.empty())
3395     initSlots2BasicBlocks(MF.getFunction(), Slots2BasicBlocks);
3396   return getIRBlockFromSlot(Slot, Slots2BasicBlocks);
3397 }
3398 
3399 const BasicBlock *MIParser::getIRBlock(unsigned Slot, const Function &F) {
3400   if (&F == &MF.getFunction())
3401     return getIRBlock(Slot);
3402   DenseMap<unsigned, const BasicBlock *> CustomSlots2BasicBlocks;
3403   initSlots2BasicBlocks(F, CustomSlots2BasicBlocks);
3404   return getIRBlockFromSlot(Slot, CustomSlots2BasicBlocks);
3405 }
3406 
3407 MCSymbol *MIParser::getOrCreateMCSymbol(StringRef Name) {
3408   // FIXME: Currently we can't recognize temporary or local symbols and call all
3409   // of the appropriate forms to create them. However, this handles basic cases
3410   // well as most of the special aspects are recognized by a prefix on their
3411   // name, and the input names should already be unique. For test cases, keeping
3412   // the symbol name out of the symbol table isn't terribly important.
3413   return MF.getContext().getOrCreateSymbol(Name);
3414 }
3415 
3416 bool MIParser::parseStringConstant(std::string &Result) {
3417   if (Token.isNot(MIToken::StringConstant))
3418     return error("expected string constant");
3419   Result = std::string(Token.stringValue());
3420   lex();
3421   return false;
3422 }
3423 
3424 bool llvm::parseMachineBasicBlockDefinitions(PerFunctionMIParsingState &PFS,
3425                                              StringRef Src,
3426                                              SMDiagnostic &Error) {
3427   return MIParser(PFS, Error, Src).parseBasicBlockDefinitions(PFS.MBBSlots);
3428 }
3429 
3430 bool llvm::parseMachineInstructions(PerFunctionMIParsingState &PFS,
3431                                     StringRef Src, SMDiagnostic &Error) {
3432   return MIParser(PFS, Error, Src).parseBasicBlocks();
3433 }
3434 
3435 bool llvm::parseMBBReference(PerFunctionMIParsingState &PFS,
3436                              MachineBasicBlock *&MBB, StringRef Src,
3437                              SMDiagnostic &Error) {
3438   return MIParser(PFS, Error, Src).parseStandaloneMBB(MBB);
3439 }
3440 
3441 bool llvm::parseRegisterReference(PerFunctionMIParsingState &PFS,
3442                                   Register &Reg, StringRef Src,
3443                                   SMDiagnostic &Error) {
3444   return MIParser(PFS, Error, Src).parseStandaloneRegister(Reg);
3445 }
3446 
3447 bool llvm::parseNamedRegisterReference(PerFunctionMIParsingState &PFS,
3448                                        Register &Reg, StringRef Src,
3449                                        SMDiagnostic &Error) {
3450   return MIParser(PFS, Error, Src).parseStandaloneNamedRegister(Reg);
3451 }
3452 
3453 bool llvm::parseVirtualRegisterReference(PerFunctionMIParsingState &PFS,
3454                                          VRegInfo *&Info, StringRef Src,
3455                                          SMDiagnostic &Error) {
3456   return MIParser(PFS, Error, Src).parseStandaloneVirtualRegister(Info);
3457 }
3458 
3459 bool llvm::parseStackObjectReference(PerFunctionMIParsingState &PFS,
3460                                      int &FI, StringRef Src,
3461                                      SMDiagnostic &Error) {
3462   return MIParser(PFS, Error, Src).parseStandaloneStackObject(FI);
3463 }
3464 
3465 bool llvm::parseMDNode(PerFunctionMIParsingState &PFS,
3466                        MDNode *&Node, StringRef Src, SMDiagnostic &Error) {
3467   return MIParser(PFS, Error, Src).parseStandaloneMDNode(Node);
3468 }
3469 
3470 bool llvm::parseMachineMetadata(PerFunctionMIParsingState &PFS, StringRef Src,
3471                                 SMRange SrcRange, SMDiagnostic &Error) {
3472   return MIParser(PFS, Error, Src, SrcRange).parseMachineMetadata();
3473 }
3474 
3475 bool MIRFormatter::parseIRValue(StringRef Src, MachineFunction &MF,
3476                                 PerFunctionMIParsingState &PFS, const Value *&V,
3477                                 ErrorCallbackType ErrorCallback) {
3478   MIToken Token;
3479   Src = lexMIToken(Src, Token, [&](StringRef::iterator Loc, const Twine &Msg) {
3480     ErrorCallback(Loc, Msg);
3481   });
3482   V = nullptr;
3483 
3484   return ::parseIRValue(Token, PFS, V, ErrorCallback);
3485 }
3486