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