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