MIParser.cpp 100 KB

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