MIParser.cpp 99 KB

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