MetadataLoader.cpp 71 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048
  1. //===- MetadataLoader.cpp - Internal BitcodeReader implementation ---------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "MetadataLoader.h"
  10. #include "ValueList.h"
  11. #include "llvm/ADT/APFloat.h"
  12. #include "llvm/ADT/APInt.h"
  13. #include "llvm/ADT/ArrayRef.h"
  14. #include "llvm/ADT/DenseMap.h"
  15. #include "llvm/ADT/DenseSet.h"
  16. #include "llvm/ADT/None.h"
  17. #include "llvm/ADT/STLExtras.h"
  18. #include "llvm/ADT/SmallString.h"
  19. #include "llvm/ADT/SmallVector.h"
  20. #include "llvm/ADT/Statistic.h"
  21. #include "llvm/ADT/StringRef.h"
  22. #include "llvm/ADT/Twine.h"
  23. #include "llvm/Bitcode/BitcodeReader.h"
  24. #include "llvm/Bitcode/BitstreamReader.h"
  25. #include "llvm/Bitcode/LLVMBitCodes.h"
  26. #include "llvm/IR/Argument.h"
  27. #include "llvm/IR/Attributes.h"
  28. #include "llvm/IR/AutoUpgrade.h"
  29. #include "llvm/IR/BasicBlock.h"
  30. #include "llvm/IR/CallingConv.h"
  31. #include "llvm/IR/Comdat.h"
  32. #include "llvm/IR/Constant.h"
  33. #include "llvm/IR/Constants.h"
  34. #include "llvm/IR/DebugInfo.h"
  35. #include "llvm/IR/DebugInfoMetadata.h"
  36. #include "llvm/IR/DebugLoc.h"
  37. #include "llvm/IR/DerivedTypes.h"
  38. #include "llvm/IR/DiagnosticPrinter.h"
  39. #include "llvm/IR/Function.h"
  40. #include "llvm/IR/GVMaterializer.h"
  41. #include "llvm/IR/GlobalAlias.h"
  42. #include "llvm/IR/GlobalIFunc.h"
  43. #include "llvm/IR/GlobalIndirectSymbol.h"
  44. #include "llvm/IR/GlobalObject.h"
  45. #include "llvm/IR/GlobalValue.h"
  46. #include "llvm/IR/GlobalVariable.h"
  47. #include "llvm/IR/InlineAsm.h"
  48. #include "llvm/IR/InstrTypes.h"
  49. #include "llvm/IR/Instruction.h"
  50. #include "llvm/IR/Instructions.h"
  51. #include "llvm/IR/IntrinsicInst.h"
  52. #include "llvm/IR/Intrinsics.h"
  53. #include "llvm/IR/LLVMContext.h"
  54. #include "llvm/IR/Module.h"
  55. #include "llvm/IR/ModuleSummaryIndex.h"
  56. #include "llvm/IR/OperandTraits.h"
  57. #include "llvm/IR/TrackingMDRef.h"
  58. #include "llvm/IR/Type.h"
  59. #include "llvm/IR/ValueHandle.h"
  60. #include "llvm/Support/AtomicOrdering.h"
  61. #include "llvm/Support/Casting.h"
  62. #include "llvm/Support/CommandLine.h"
  63. #include "llvm/Support/Compiler.h"
  64. #include "llvm/Support/Debug.h"
  65. #include "llvm/Support/Error.h"
  66. #include "llvm/Support/ErrorHandling.h"
  67. #include "llvm/Support/ManagedStatic.h"
  68. #include "llvm/Support/MemoryBuffer.h"
  69. #include "llvm/Support/raw_ostream.h"
  70. #include <algorithm>
  71. #include <cassert>
  72. #include <cstddef>
  73. #include <cstdint>
  74. #include <deque>
  75. #include <limits>
  76. #include <map>
  77. #include <memory>
  78. #include <string>
  79. #include <system_error>
  80. #include <tuple>
  81. #include <utility>
  82. #include <vector>
  83. using namespace llvm;
  84. #define DEBUG_TYPE "bitcode-reader"
  85. STATISTIC(NumMDStringLoaded, "Number of MDStrings loaded");
  86. STATISTIC(NumMDNodeTemporary, "Number of MDNode::Temporary created");
  87. STATISTIC(NumMDRecordLoaded, "Number of Metadata records loaded");
  88. /// Flag whether we need to import full type definitions for ThinLTO.
  89. /// Currently needed for Darwin and LLDB.
  90. static cl::opt<bool> ImportFullTypeDefinitions(
  91. "import-full-type-definitions", cl::init(false), cl::Hidden,
  92. cl::desc("Import full type definitions for ThinLTO."));
  93. static cl::opt<bool> DisableLazyLoading(
  94. "disable-ondemand-mds-loading", cl::init(false), cl::Hidden,
  95. cl::desc("Force disable the lazy-loading on-demand of metadata when "
  96. "loading bitcode for importing."));
  97. namespace {
  98. static int64_t unrotateSign(uint64_t U) { return U & 1 ? ~(U >> 1) : U >> 1; }
  99. class BitcodeReaderMetadataList {
  100. /// Array of metadata references.
  101. ///
  102. /// Don't use std::vector here. Some versions of libc++ copy (instead of
  103. /// move) on resize, and TrackingMDRef is very expensive to copy.
  104. SmallVector<TrackingMDRef, 1> MetadataPtrs;
  105. /// The set of indices in MetadataPtrs above of forward references that were
  106. /// generated.
  107. SmallDenseSet<unsigned, 1> ForwardReference;
  108. /// The set of indices in MetadataPtrs above of Metadata that need to be
  109. /// resolved.
  110. SmallDenseSet<unsigned, 1> UnresolvedNodes;
  111. /// Structures for resolving old type refs.
  112. struct {
  113. SmallDenseMap<MDString *, TempMDTuple, 1> Unknown;
  114. SmallDenseMap<MDString *, DICompositeType *, 1> Final;
  115. SmallDenseMap<MDString *, DICompositeType *, 1> FwdDecls;
  116. SmallVector<std::pair<TrackingMDRef, TempMDTuple>, 1> Arrays;
  117. } OldTypeRefs;
  118. LLVMContext &Context;
  119. public:
  120. BitcodeReaderMetadataList(LLVMContext &C) : Context(C) {}
  121. // vector compatibility methods
  122. unsigned size() const { return MetadataPtrs.size(); }
  123. void resize(unsigned N) { MetadataPtrs.resize(N); }
  124. void push_back(Metadata *MD) { MetadataPtrs.emplace_back(MD); }
  125. void clear() { MetadataPtrs.clear(); }
  126. Metadata *back() const { return MetadataPtrs.back(); }
  127. void pop_back() { MetadataPtrs.pop_back(); }
  128. bool empty() const { return MetadataPtrs.empty(); }
  129. Metadata *operator[](unsigned i) const {
  130. assert(i < MetadataPtrs.size());
  131. return MetadataPtrs[i];
  132. }
  133. Metadata *lookup(unsigned I) const {
  134. if (I < MetadataPtrs.size())
  135. return MetadataPtrs[I];
  136. return nullptr;
  137. }
  138. void shrinkTo(unsigned N) {
  139. assert(N <= size() && "Invalid shrinkTo request!");
  140. assert(ForwardReference.empty() && "Unexpected forward refs");
  141. assert(UnresolvedNodes.empty() && "Unexpected unresolved node");
  142. MetadataPtrs.resize(N);
  143. }
  144. /// Return the given metadata, creating a replaceable forward reference if
  145. /// necessary.
  146. Metadata *getMetadataFwdRef(unsigned Idx);
  147. /// Return the given metadata only if it is fully resolved.
  148. ///
  149. /// Gives the same result as \a lookup(), unless \a MDNode::isResolved()
  150. /// would give \c false.
  151. Metadata *getMetadataIfResolved(unsigned Idx);
  152. MDNode *getMDNodeFwdRefOrNull(unsigned Idx);
  153. void assignValue(Metadata *MD, unsigned Idx);
  154. void tryToResolveCycles();
  155. bool hasFwdRefs() const { return !ForwardReference.empty(); }
  156. int getNextFwdRef() {
  157. assert(hasFwdRefs());
  158. return *ForwardReference.begin();
  159. }
  160. /// Upgrade a type that had an MDString reference.
  161. void addTypeRef(MDString &UUID, DICompositeType &CT);
  162. /// Upgrade a type that had an MDString reference.
  163. Metadata *upgradeTypeRef(Metadata *MaybeUUID);
  164. /// Upgrade a type ref array that may have MDString references.
  165. Metadata *upgradeTypeRefArray(Metadata *MaybeTuple);
  166. private:
  167. Metadata *resolveTypeRefArray(Metadata *MaybeTuple);
  168. };
  169. void BitcodeReaderMetadataList::assignValue(Metadata *MD, unsigned Idx) {
  170. if (auto *MDN = dyn_cast<MDNode>(MD))
  171. if (!MDN->isResolved())
  172. UnresolvedNodes.insert(Idx);
  173. if (Idx == size()) {
  174. push_back(MD);
  175. return;
  176. }
  177. if (Idx >= size())
  178. resize(Idx + 1);
  179. TrackingMDRef &OldMD = MetadataPtrs[Idx];
  180. if (!OldMD) {
  181. OldMD.reset(MD);
  182. return;
  183. }
  184. // If there was a forward reference to this value, replace it.
  185. TempMDTuple PrevMD(cast<MDTuple>(OldMD.get()));
  186. PrevMD->replaceAllUsesWith(MD);
  187. ForwardReference.erase(Idx);
  188. }
  189. Metadata *BitcodeReaderMetadataList::getMetadataFwdRef(unsigned Idx) {
  190. if (Idx >= size())
  191. resize(Idx + 1);
  192. if (Metadata *MD = MetadataPtrs[Idx])
  193. return MD;
  194. // Track forward refs to be resolved later.
  195. ForwardReference.insert(Idx);
  196. // Create and return a placeholder, which will later be RAUW'd.
  197. ++NumMDNodeTemporary;
  198. Metadata *MD = MDNode::getTemporary(Context, None).release();
  199. MetadataPtrs[Idx].reset(MD);
  200. return MD;
  201. }
  202. Metadata *BitcodeReaderMetadataList::getMetadataIfResolved(unsigned Idx) {
  203. Metadata *MD = lookup(Idx);
  204. if (auto *N = dyn_cast_or_null<MDNode>(MD))
  205. if (!N->isResolved())
  206. return nullptr;
  207. return MD;
  208. }
  209. MDNode *BitcodeReaderMetadataList::getMDNodeFwdRefOrNull(unsigned Idx) {
  210. return dyn_cast_or_null<MDNode>(getMetadataFwdRef(Idx));
  211. }
  212. void BitcodeReaderMetadataList::tryToResolveCycles() {
  213. if (!ForwardReference.empty())
  214. // Still forward references... can't resolve cycles.
  215. return;
  216. // Give up on finding a full definition for any forward decls that remain.
  217. for (const auto &Ref : OldTypeRefs.FwdDecls)
  218. OldTypeRefs.Final.insert(Ref);
  219. OldTypeRefs.FwdDecls.clear();
  220. // Upgrade from old type ref arrays. In strange cases, this could add to
  221. // OldTypeRefs.Unknown.
  222. for (const auto &Array : OldTypeRefs.Arrays)
  223. Array.second->replaceAllUsesWith(resolveTypeRefArray(Array.first.get()));
  224. OldTypeRefs.Arrays.clear();
  225. // Replace old string-based type refs with the resolved node, if possible.
  226. // If we haven't seen the node, leave it to the verifier to complain about
  227. // the invalid string reference.
  228. for (const auto &Ref : OldTypeRefs.Unknown) {
  229. if (DICompositeType *CT = OldTypeRefs.Final.lookup(Ref.first))
  230. Ref.second->replaceAllUsesWith(CT);
  231. else
  232. Ref.second->replaceAllUsesWith(Ref.first);
  233. }
  234. OldTypeRefs.Unknown.clear();
  235. if (UnresolvedNodes.empty())
  236. // Nothing to do.
  237. return;
  238. // Resolve any cycles.
  239. for (unsigned I : UnresolvedNodes) {
  240. auto &MD = MetadataPtrs[I];
  241. auto *N = dyn_cast_or_null<MDNode>(MD);
  242. if (!N)
  243. continue;
  244. assert(!N->isTemporary() && "Unexpected forward reference");
  245. N->resolveCycles();
  246. }
  247. // Make sure we return early again until there's another unresolved ref.
  248. UnresolvedNodes.clear();
  249. }
  250. void BitcodeReaderMetadataList::addTypeRef(MDString &UUID,
  251. DICompositeType &CT) {
  252. assert(CT.getRawIdentifier() == &UUID && "Mismatched UUID");
  253. if (CT.isForwardDecl())
  254. OldTypeRefs.FwdDecls.insert(std::make_pair(&UUID, &CT));
  255. else
  256. OldTypeRefs.Final.insert(std::make_pair(&UUID, &CT));
  257. }
  258. Metadata *BitcodeReaderMetadataList::upgradeTypeRef(Metadata *MaybeUUID) {
  259. auto *UUID = dyn_cast_or_null<MDString>(MaybeUUID);
  260. if (LLVM_LIKELY(!UUID))
  261. return MaybeUUID;
  262. if (auto *CT = OldTypeRefs.Final.lookup(UUID))
  263. return CT;
  264. auto &Ref = OldTypeRefs.Unknown[UUID];
  265. if (!Ref)
  266. Ref = MDNode::getTemporary(Context, None);
  267. return Ref.get();
  268. }
  269. Metadata *BitcodeReaderMetadataList::upgradeTypeRefArray(Metadata *MaybeTuple) {
  270. auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
  271. if (!Tuple || Tuple->isDistinct())
  272. return MaybeTuple;
  273. // Look through the array immediately if possible.
  274. if (!Tuple->isTemporary())
  275. return resolveTypeRefArray(Tuple);
  276. // Create and return a placeholder to use for now. Eventually
  277. // resolveTypeRefArrays() will be resolve this forward reference.
  278. OldTypeRefs.Arrays.emplace_back(
  279. std::piecewise_construct, std::forward_as_tuple(Tuple),
  280. std::forward_as_tuple(MDTuple::getTemporary(Context, None)));
  281. return OldTypeRefs.Arrays.back().second.get();
  282. }
  283. Metadata *BitcodeReaderMetadataList::resolveTypeRefArray(Metadata *MaybeTuple) {
  284. auto *Tuple = dyn_cast_or_null<MDTuple>(MaybeTuple);
  285. if (!Tuple || Tuple->isDistinct())
  286. return MaybeTuple;
  287. // Look through the DITypeRefArray, upgrading each DITypeRef.
  288. SmallVector<Metadata *, 32> Ops;
  289. Ops.reserve(Tuple->getNumOperands());
  290. for (Metadata *MD : Tuple->operands())
  291. Ops.push_back(upgradeTypeRef(MD));
  292. return MDTuple::get(Context, Ops);
  293. }
  294. namespace {
  295. class PlaceholderQueue {
  296. // Placeholders would thrash around when moved, so store in a std::deque
  297. // instead of some sort of vector.
  298. std::deque<DistinctMDOperandPlaceholder> PHs;
  299. public:
  300. ~PlaceholderQueue() {
  301. assert(empty() && "PlaceholderQueue hasn't been flushed before being destroyed");
  302. }
  303. bool empty() { return PHs.empty(); }
  304. DistinctMDOperandPlaceholder &getPlaceholderOp(unsigned ID);
  305. void flush(BitcodeReaderMetadataList &MetadataList);
  306. /// Return the list of temporaries nodes in the queue, these need to be
  307. /// loaded before we can flush the queue.
  308. void getTemporaries(BitcodeReaderMetadataList &MetadataList,
  309. DenseSet<unsigned> &Temporaries) {
  310. for (auto &PH : PHs) {
  311. auto ID = PH.getID();
  312. auto *MD = MetadataList.lookup(ID);
  313. if (!MD) {
  314. Temporaries.insert(ID);
  315. continue;
  316. }
  317. auto *N = dyn_cast_or_null<MDNode>(MD);
  318. if (N && N->isTemporary())
  319. Temporaries.insert(ID);
  320. }
  321. }
  322. };
  323. } // end anonymous namespace
  324. DistinctMDOperandPlaceholder &PlaceholderQueue::getPlaceholderOp(unsigned ID) {
  325. PHs.emplace_back(ID);
  326. return PHs.back();
  327. }
  328. void PlaceholderQueue::flush(BitcodeReaderMetadataList &MetadataList) {
  329. while (!PHs.empty()) {
  330. auto *MD = MetadataList.lookup(PHs.front().getID());
  331. assert(MD && "Flushing placeholder on unassigned MD");
  332. #ifndef NDEBUG
  333. if (auto *MDN = dyn_cast<MDNode>(MD))
  334. assert(MDN->isResolved() &&
  335. "Flushing Placeholder while cycles aren't resolved");
  336. #endif
  337. PHs.front().replaceUseWith(MD);
  338. PHs.pop_front();
  339. }
  340. }
  341. } // anonynous namespace
  342. static Error error(const Twine &Message) {
  343. return make_error<StringError>(
  344. Message, make_error_code(BitcodeError::CorruptedBitcode));
  345. }
  346. class MetadataLoader::MetadataLoaderImpl {
  347. BitcodeReaderMetadataList MetadataList;
  348. BitcodeReaderValueList &ValueList;
  349. BitstreamCursor &Stream;
  350. LLVMContext &Context;
  351. Module &TheModule;
  352. std::function<Type *(unsigned)> getTypeByID;
  353. /// Cursor associated with the lazy-loading of Metadata. This is the easy way
  354. /// to keep around the right "context" (Abbrev list) to be able to jump in
  355. /// the middle of the metadata block and load any record.
  356. BitstreamCursor IndexCursor;
  357. /// Index that keeps track of MDString values.
  358. std::vector<StringRef> MDStringRef;
  359. /// On-demand loading of a single MDString. Requires the index above to be
  360. /// populated.
  361. MDString *lazyLoadOneMDString(unsigned Idx);
  362. /// Index that keeps track of where to find a metadata record in the stream.
  363. std::vector<uint64_t> GlobalMetadataBitPosIndex;
  364. /// Populate the index above to enable lazily loading of metadata, and load
  365. /// the named metadata as well as the transitively referenced global
  366. /// Metadata.
  367. Expected<bool> lazyLoadModuleMetadataBlock();
  368. /// On-demand loading of a single metadata. Requires the index above to be
  369. /// populated.
  370. void lazyLoadOneMetadata(unsigned Idx, PlaceholderQueue &Placeholders);
  371. // Keep mapping of seens pair of old-style CU <-> SP, and update pointers to
  372. // point from SP to CU after a block is completly parsed.
  373. std::vector<std::pair<DICompileUnit *, Metadata *>> CUSubprograms;
  374. /// Functions that need to be matched with subprograms when upgrading old
  375. /// metadata.
  376. SmallDenseMap<Function *, DISubprogram *, 16> FunctionsWithSPs;
  377. // Map the bitcode's custom MDKind ID to the Module's MDKind ID.
  378. DenseMap<unsigned, unsigned> MDKindMap;
  379. bool StripTBAA = false;
  380. bool HasSeenOldLoopTags = false;
  381. bool NeedUpgradeToDIGlobalVariableExpression = false;
  382. bool NeedDeclareExpressionUpgrade = false;
  383. /// True if metadata is being parsed for a module being ThinLTO imported.
  384. bool IsImporting = false;
  385. Error parseOneMetadata(SmallVectorImpl<uint64_t> &Record, unsigned Code,
  386. PlaceholderQueue &Placeholders, StringRef Blob,
  387. unsigned &NextMetadataNo);
  388. Error parseMetadataStrings(ArrayRef<uint64_t> Record, StringRef Blob,
  389. function_ref<void(StringRef)> CallBack);
  390. Error parseGlobalObjectAttachment(GlobalObject &GO,
  391. ArrayRef<uint64_t> Record);
  392. Error parseMetadataKindRecord(SmallVectorImpl<uint64_t> &Record);
  393. void resolveForwardRefsAndPlaceholders(PlaceholderQueue &Placeholders);
  394. /// Upgrade old-style CU <-> SP pointers to point from SP to CU.
  395. void upgradeCUSubprograms() {
  396. for (auto CU_SP : CUSubprograms)
  397. if (auto *SPs = dyn_cast_or_null<MDTuple>(CU_SP.second))
  398. for (auto &Op : SPs->operands())
  399. if (auto *SP = dyn_cast_or_null<DISubprogram>(Op))
  400. SP->replaceUnit(CU_SP.first);
  401. CUSubprograms.clear();
  402. }
  403. /// Upgrade old-style bare DIGlobalVariables to DIGlobalVariableExpressions.
  404. void upgradeCUVariables() {
  405. if (!NeedUpgradeToDIGlobalVariableExpression)
  406. return;
  407. // Upgrade list of variables attached to the CUs.
  408. if (NamedMDNode *CUNodes = TheModule.getNamedMetadata("llvm.dbg.cu"))
  409. for (unsigned I = 0, E = CUNodes->getNumOperands(); I != E; ++I) {
  410. auto *CU = cast<DICompileUnit>(CUNodes->getOperand(I));
  411. if (auto *GVs = dyn_cast_or_null<MDTuple>(CU->getRawGlobalVariables()))
  412. for (unsigned I = 0; I < GVs->getNumOperands(); I++)
  413. if (auto *GV =
  414. dyn_cast_or_null<DIGlobalVariable>(GVs->getOperand(I))) {
  415. auto *DGVE = DIGlobalVariableExpression::getDistinct(
  416. Context, GV, DIExpression::get(Context, {}));
  417. GVs->replaceOperandWith(I, DGVE);
  418. }
  419. }
  420. // Upgrade variables attached to globals.
  421. for (auto &GV : TheModule.globals()) {
  422. SmallVector<MDNode *, 1> MDs;
  423. GV.getMetadata(LLVMContext::MD_dbg, MDs);
  424. GV.eraseMetadata(LLVMContext::MD_dbg);
  425. for (auto *MD : MDs)
  426. if (auto *DGV = dyn_cast_or_null<DIGlobalVariable>(MD)) {
  427. auto *DGVE = DIGlobalVariableExpression::getDistinct(
  428. Context, DGV, DIExpression::get(Context, {}));
  429. GV.addMetadata(LLVMContext::MD_dbg, *DGVE);
  430. } else
  431. GV.addMetadata(LLVMContext::MD_dbg, *MD);
  432. }
  433. }
  434. /// Remove a leading DW_OP_deref from DIExpressions in a dbg.declare that
  435. /// describes a function argument.
  436. void upgradeDeclareExpressions(Function &F) {
  437. if (!NeedDeclareExpressionUpgrade)
  438. return;
  439. for (auto &BB : F)
  440. for (auto &I : BB)
  441. if (auto *DDI = dyn_cast<DbgDeclareInst>(&I))
  442. if (auto *DIExpr = DDI->getExpression())
  443. if (DIExpr->startsWithDeref() &&
  444. dyn_cast_or_null<Argument>(DDI->getAddress())) {
  445. SmallVector<uint64_t, 8> Ops;
  446. Ops.append(std::next(DIExpr->elements_begin()),
  447. DIExpr->elements_end());
  448. auto *E = DIExpression::get(Context, Ops);
  449. DDI->setOperand(2, MetadataAsValue::get(Context, E));
  450. }
  451. }
  452. /// Upgrade the expression from previous versions.
  453. Error upgradeDIExpression(uint64_t FromVersion,
  454. MutableArrayRef<uint64_t> &Expr,
  455. SmallVectorImpl<uint64_t> &Buffer) {
  456. auto N = Expr.size();
  457. switch (FromVersion) {
  458. default:
  459. return error("Invalid record");
  460. case 0:
  461. if (N >= 3 && Expr[N - 3] == dwarf::DW_OP_bit_piece)
  462. Expr[N - 3] = dwarf::DW_OP_LLVM_fragment;
  463. LLVM_FALLTHROUGH;
  464. case 1:
  465. // Move DW_OP_deref to the end.
  466. if (N && Expr[0] == dwarf::DW_OP_deref) {
  467. auto End = Expr.end();
  468. if (Expr.size() >= 3 &&
  469. *std::prev(End, 3) == dwarf::DW_OP_LLVM_fragment)
  470. End = std::prev(End, 3);
  471. std::move(std::next(Expr.begin()), End, Expr.begin());
  472. *std::prev(End) = dwarf::DW_OP_deref;
  473. }
  474. NeedDeclareExpressionUpgrade = true;
  475. LLVM_FALLTHROUGH;
  476. case 2: {
  477. // Change DW_OP_plus to DW_OP_plus_uconst.
  478. // Change DW_OP_minus to DW_OP_uconst, DW_OP_minus
  479. auto SubExpr = ArrayRef<uint64_t>(Expr);
  480. while (!SubExpr.empty()) {
  481. // Skip past other operators with their operands
  482. // for this version of the IR, obtained from
  483. // from historic DIExpression::ExprOperand::getSize().
  484. size_t HistoricSize;
  485. switch (SubExpr.front()) {
  486. default:
  487. HistoricSize = 1;
  488. break;
  489. case dwarf::DW_OP_constu:
  490. case dwarf::DW_OP_minus:
  491. case dwarf::DW_OP_plus:
  492. HistoricSize = 2;
  493. break;
  494. case dwarf::DW_OP_LLVM_fragment:
  495. HistoricSize = 3;
  496. break;
  497. }
  498. // If the expression is malformed, make sure we don't
  499. // copy more elements than we should.
  500. HistoricSize = std::min(SubExpr.size(), HistoricSize);
  501. ArrayRef<uint64_t> Args = SubExpr.slice(1, HistoricSize-1);
  502. switch (SubExpr.front()) {
  503. case dwarf::DW_OP_plus:
  504. Buffer.push_back(dwarf::DW_OP_plus_uconst);
  505. Buffer.append(Args.begin(), Args.end());
  506. break;
  507. case dwarf::DW_OP_minus:
  508. Buffer.push_back(dwarf::DW_OP_constu);
  509. Buffer.append(Args.begin(), Args.end());
  510. Buffer.push_back(dwarf::DW_OP_minus);
  511. break;
  512. default:
  513. Buffer.push_back(*SubExpr.begin());
  514. Buffer.append(Args.begin(), Args.end());
  515. break;
  516. }
  517. // Continue with remaining elements.
  518. SubExpr = SubExpr.slice(HistoricSize);
  519. }
  520. Expr = MutableArrayRef<uint64_t>(Buffer);
  521. LLVM_FALLTHROUGH;
  522. }
  523. case 3:
  524. // Up-to-date!
  525. break;
  526. }
  527. return Error::success();
  528. }
  529. void upgradeDebugInfo() {
  530. upgradeCUSubprograms();
  531. upgradeCUVariables();
  532. }
  533. public:
  534. MetadataLoaderImpl(BitstreamCursor &Stream, Module &TheModule,
  535. BitcodeReaderValueList &ValueList,
  536. std::function<Type *(unsigned)> getTypeByID,
  537. bool IsImporting)
  538. : MetadataList(TheModule.getContext()), ValueList(ValueList),
  539. Stream(Stream), Context(TheModule.getContext()), TheModule(TheModule),
  540. getTypeByID(std::move(getTypeByID)), IsImporting(IsImporting) {}
  541. Error parseMetadata(bool ModuleLevel);
  542. bool hasFwdRefs() const { return MetadataList.hasFwdRefs(); }
  543. Metadata *getMetadataFwdRefOrLoad(unsigned ID) {
  544. if (ID < MDStringRef.size())
  545. return lazyLoadOneMDString(ID);
  546. if (auto *MD = MetadataList.lookup(ID))
  547. return MD;
  548. // If lazy-loading is enabled, we try recursively to load the operand
  549. // instead of creating a temporary.
  550. if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size())) {
  551. PlaceholderQueue Placeholders;
  552. lazyLoadOneMetadata(ID, Placeholders);
  553. resolveForwardRefsAndPlaceholders(Placeholders);
  554. return MetadataList.lookup(ID);
  555. }
  556. return MetadataList.getMetadataFwdRef(ID);
  557. }
  558. DISubprogram *lookupSubprogramForFunction(Function *F) {
  559. return FunctionsWithSPs.lookup(F);
  560. }
  561. bool hasSeenOldLoopTags() { return HasSeenOldLoopTags; }
  562. Error parseMetadataAttachment(
  563. Function &F, const SmallVectorImpl<Instruction *> &InstructionList);
  564. Error parseMetadataKinds();
  565. void setStripTBAA(bool Value) { StripTBAA = Value; }
  566. bool isStrippingTBAA() { return StripTBAA; }
  567. unsigned size() const { return MetadataList.size(); }
  568. void shrinkTo(unsigned N) { MetadataList.shrinkTo(N); }
  569. void upgradeDebugIntrinsics(Function &F) { upgradeDeclareExpressions(F); }
  570. };
  571. Expected<bool>
  572. MetadataLoader::MetadataLoaderImpl::lazyLoadModuleMetadataBlock() {
  573. IndexCursor = Stream;
  574. SmallVector<uint64_t, 64> Record;
  575. // Get the abbrevs, and preload record positions to make them lazy-loadable.
  576. while (true) {
  577. BitstreamEntry Entry = IndexCursor.advanceSkippingSubblocks(
  578. BitstreamCursor::AF_DontPopBlockAtEnd);
  579. switch (Entry.Kind) {
  580. case BitstreamEntry::SubBlock: // Handled for us already.
  581. case BitstreamEntry::Error:
  582. return error("Malformed block");
  583. case BitstreamEntry::EndBlock: {
  584. return true;
  585. }
  586. case BitstreamEntry::Record: {
  587. // The interesting case.
  588. ++NumMDRecordLoaded;
  589. uint64_t CurrentPos = IndexCursor.GetCurrentBitNo();
  590. auto Code = IndexCursor.skipRecord(Entry.ID);
  591. switch (Code) {
  592. case bitc::METADATA_STRINGS: {
  593. // Rewind and parse the strings.
  594. IndexCursor.JumpToBit(CurrentPos);
  595. StringRef Blob;
  596. Record.clear();
  597. IndexCursor.readRecord(Entry.ID, Record, &Blob);
  598. unsigned NumStrings = Record[0];
  599. MDStringRef.reserve(NumStrings);
  600. auto IndexNextMDString = [&](StringRef Str) {
  601. MDStringRef.push_back(Str);
  602. };
  603. if (auto Err = parseMetadataStrings(Record, Blob, IndexNextMDString))
  604. return std::move(Err);
  605. break;
  606. }
  607. case bitc::METADATA_INDEX_OFFSET: {
  608. // This is the offset to the index, when we see this we skip all the
  609. // records and load only an index to these.
  610. IndexCursor.JumpToBit(CurrentPos);
  611. Record.clear();
  612. IndexCursor.readRecord(Entry.ID, Record);
  613. if (Record.size() != 2)
  614. return error("Invalid record");
  615. auto Offset = Record[0] + (Record[1] << 32);
  616. auto BeginPos = IndexCursor.GetCurrentBitNo();
  617. IndexCursor.JumpToBit(BeginPos + Offset);
  618. Entry = IndexCursor.advanceSkippingSubblocks(
  619. BitstreamCursor::AF_DontPopBlockAtEnd);
  620. assert(Entry.Kind == BitstreamEntry::Record &&
  621. "Corrupted bitcode: Expected `Record` when trying to find the "
  622. "Metadata index");
  623. Record.clear();
  624. auto Code = IndexCursor.readRecord(Entry.ID, Record);
  625. (void)Code;
  626. assert(Code == bitc::METADATA_INDEX && "Corrupted bitcode: Expected "
  627. "`METADATA_INDEX` when trying "
  628. "to find the Metadata index");
  629. // Delta unpack
  630. auto CurrentValue = BeginPos;
  631. GlobalMetadataBitPosIndex.reserve(Record.size());
  632. for (auto &Elt : Record) {
  633. CurrentValue += Elt;
  634. GlobalMetadataBitPosIndex.push_back(CurrentValue);
  635. }
  636. break;
  637. }
  638. case bitc::METADATA_INDEX:
  639. // We don't expect to get there, the Index is loaded when we encounter
  640. // the offset.
  641. return error("Corrupted Metadata block");
  642. case bitc::METADATA_NAME: {
  643. // Named metadata need to be materialized now and aren't deferred.
  644. IndexCursor.JumpToBit(CurrentPos);
  645. Record.clear();
  646. unsigned Code = IndexCursor.readRecord(Entry.ID, Record);
  647. assert(Code == bitc::METADATA_NAME);
  648. // Read name of the named metadata.
  649. SmallString<8> Name(Record.begin(), Record.end());
  650. Code = IndexCursor.ReadCode();
  651. // Named Metadata comes in two parts, we expect the name to be followed
  652. // by the node
  653. Record.clear();
  654. unsigned NextBitCode = IndexCursor.readRecord(Code, Record);
  655. assert(NextBitCode == bitc::METADATA_NAMED_NODE);
  656. (void)NextBitCode;
  657. // Read named metadata elements.
  658. unsigned Size = Record.size();
  659. NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
  660. for (unsigned i = 0; i != Size; ++i) {
  661. // FIXME: We could use a placeholder here, however NamedMDNode are
  662. // taking MDNode as operand and not using the Metadata infrastructure.
  663. // It is acknowledged by 'TODO: Inherit from Metadata' in the
  664. // NamedMDNode class definition.
  665. MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
  666. assert(MD && "Invalid metadata: expect fwd ref to MDNode");
  667. NMD->addOperand(MD);
  668. }
  669. break;
  670. }
  671. case bitc::METADATA_GLOBAL_DECL_ATTACHMENT: {
  672. // FIXME: we need to do this early because we don't materialize global
  673. // value explicitly.
  674. IndexCursor.JumpToBit(CurrentPos);
  675. Record.clear();
  676. IndexCursor.readRecord(Entry.ID, Record);
  677. if (Record.size() % 2 == 0)
  678. return error("Invalid record");
  679. unsigned ValueID = Record[0];
  680. if (ValueID >= ValueList.size())
  681. return error("Invalid record");
  682. if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID]))
  683. if (Error Err = parseGlobalObjectAttachment(
  684. *GO, ArrayRef<uint64_t>(Record).slice(1)))
  685. return std::move(Err);
  686. break;
  687. }
  688. case bitc::METADATA_KIND:
  689. case bitc::METADATA_STRING_OLD:
  690. case bitc::METADATA_OLD_FN_NODE:
  691. case bitc::METADATA_OLD_NODE:
  692. case bitc::METADATA_VALUE:
  693. case bitc::METADATA_DISTINCT_NODE:
  694. case bitc::METADATA_NODE:
  695. case bitc::METADATA_LOCATION:
  696. case bitc::METADATA_GENERIC_DEBUG:
  697. case bitc::METADATA_SUBRANGE:
  698. case bitc::METADATA_ENUMERATOR:
  699. case bitc::METADATA_BASIC_TYPE:
  700. case bitc::METADATA_DERIVED_TYPE:
  701. case bitc::METADATA_COMPOSITE_TYPE:
  702. case bitc::METADATA_SUBROUTINE_TYPE:
  703. case bitc::METADATA_MODULE:
  704. case bitc::METADATA_FILE:
  705. case bitc::METADATA_COMPILE_UNIT:
  706. case bitc::METADATA_SUBPROGRAM:
  707. case bitc::METADATA_LEXICAL_BLOCK:
  708. case bitc::METADATA_LEXICAL_BLOCK_FILE:
  709. case bitc::METADATA_NAMESPACE:
  710. case bitc::METADATA_MACRO:
  711. case bitc::METADATA_MACRO_FILE:
  712. case bitc::METADATA_TEMPLATE_TYPE:
  713. case bitc::METADATA_TEMPLATE_VALUE:
  714. case bitc::METADATA_GLOBAL_VAR:
  715. case bitc::METADATA_LOCAL_VAR:
  716. case bitc::METADATA_LABEL:
  717. case bitc::METADATA_EXPRESSION:
  718. case bitc::METADATA_OBJC_PROPERTY:
  719. case bitc::METADATA_IMPORTED_ENTITY:
  720. case bitc::METADATA_GLOBAL_VAR_EXPR:
  721. // We don't expect to see any of these, if we see one, give up on
  722. // lazy-loading and fallback.
  723. MDStringRef.clear();
  724. GlobalMetadataBitPosIndex.clear();
  725. return false;
  726. }
  727. break;
  728. }
  729. }
  730. }
  731. }
  732. /// Parse a METADATA_BLOCK. If ModuleLevel is true then we are parsing
  733. /// module level metadata.
  734. Error MetadataLoader::MetadataLoaderImpl::parseMetadata(bool ModuleLevel) {
  735. if (!ModuleLevel && MetadataList.hasFwdRefs())
  736. return error("Invalid metadata: fwd refs into function blocks");
  737. // Record the entry position so that we can jump back here and efficiently
  738. // skip the whole block in case we lazy-load.
  739. auto EntryPos = Stream.GetCurrentBitNo();
  740. if (Stream.EnterSubBlock(bitc::METADATA_BLOCK_ID))
  741. return error("Invalid record");
  742. SmallVector<uint64_t, 64> Record;
  743. PlaceholderQueue Placeholders;
  744. // We lazy-load module-level metadata: we build an index for each record, and
  745. // then load individual record as needed, starting with the named metadata.
  746. if (ModuleLevel && IsImporting && MetadataList.empty() &&
  747. !DisableLazyLoading) {
  748. auto SuccessOrErr = lazyLoadModuleMetadataBlock();
  749. if (!SuccessOrErr)
  750. return SuccessOrErr.takeError();
  751. if (SuccessOrErr.get()) {
  752. // An index was successfully created and we will be able to load metadata
  753. // on-demand.
  754. MetadataList.resize(MDStringRef.size() +
  755. GlobalMetadataBitPosIndex.size());
  756. // Reading the named metadata created forward references and/or
  757. // placeholders, that we flush here.
  758. resolveForwardRefsAndPlaceholders(Placeholders);
  759. upgradeDebugInfo();
  760. // Return at the beginning of the block, since it is easy to skip it
  761. // entirely from there.
  762. Stream.ReadBlockEnd(); // Pop the abbrev block context.
  763. Stream.JumpToBit(EntryPos);
  764. if (Stream.SkipBlock())
  765. return error("Invalid record");
  766. return Error::success();
  767. }
  768. // Couldn't load an index, fallback to loading all the block "old-style".
  769. }
  770. unsigned NextMetadataNo = MetadataList.size();
  771. // Read all the records.
  772. while (true) {
  773. BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
  774. switch (Entry.Kind) {
  775. case BitstreamEntry::SubBlock: // Handled for us already.
  776. case BitstreamEntry::Error:
  777. return error("Malformed block");
  778. case BitstreamEntry::EndBlock:
  779. resolveForwardRefsAndPlaceholders(Placeholders);
  780. upgradeDebugInfo();
  781. return Error::success();
  782. case BitstreamEntry::Record:
  783. // The interesting case.
  784. break;
  785. }
  786. // Read a record.
  787. Record.clear();
  788. StringRef Blob;
  789. ++NumMDRecordLoaded;
  790. unsigned Code = Stream.readRecord(Entry.ID, Record, &Blob);
  791. if (Error Err =
  792. parseOneMetadata(Record, Code, Placeholders, Blob, NextMetadataNo))
  793. return Err;
  794. }
  795. }
  796. MDString *MetadataLoader::MetadataLoaderImpl::lazyLoadOneMDString(unsigned ID) {
  797. ++NumMDStringLoaded;
  798. if (Metadata *MD = MetadataList.lookup(ID))
  799. return cast<MDString>(MD);
  800. auto MDS = MDString::get(Context, MDStringRef[ID]);
  801. MetadataList.assignValue(MDS, ID);
  802. return MDS;
  803. }
  804. void MetadataLoader::MetadataLoaderImpl::lazyLoadOneMetadata(
  805. unsigned ID, PlaceholderQueue &Placeholders) {
  806. assert(ID < (MDStringRef.size()) + GlobalMetadataBitPosIndex.size());
  807. assert(ID >= MDStringRef.size() && "Unexpected lazy-loading of MDString");
  808. // Lookup first if the metadata hasn't already been loaded.
  809. if (auto *MD = MetadataList.lookup(ID)) {
  810. auto *N = dyn_cast_or_null<MDNode>(MD);
  811. if (!N->isTemporary())
  812. return;
  813. }
  814. SmallVector<uint64_t, 64> Record;
  815. StringRef Blob;
  816. IndexCursor.JumpToBit(GlobalMetadataBitPosIndex[ID - MDStringRef.size()]);
  817. auto Entry = IndexCursor.advanceSkippingSubblocks();
  818. ++NumMDRecordLoaded;
  819. unsigned Code = IndexCursor.readRecord(Entry.ID, Record, &Blob);
  820. if (Error Err = parseOneMetadata(Record, Code, Placeholders, Blob, ID))
  821. report_fatal_error("Can't lazyload MD");
  822. }
  823. /// Ensure that all forward-references and placeholders are resolved.
  824. /// Iteratively lazy-loading metadata on-demand if needed.
  825. void MetadataLoader::MetadataLoaderImpl::resolveForwardRefsAndPlaceholders(
  826. PlaceholderQueue &Placeholders) {
  827. DenseSet<unsigned> Temporaries;
  828. while (1) {
  829. // Populate Temporaries with the placeholders that haven't been loaded yet.
  830. Placeholders.getTemporaries(MetadataList, Temporaries);
  831. // If we don't have any temporary, or FwdReference, we're done!
  832. if (Temporaries.empty() && !MetadataList.hasFwdRefs())
  833. break;
  834. // First, load all the temporaries. This can add new placeholders or
  835. // forward references.
  836. for (auto ID : Temporaries)
  837. lazyLoadOneMetadata(ID, Placeholders);
  838. Temporaries.clear();
  839. // Second, load the forward-references. This can also add new placeholders
  840. // or forward references.
  841. while (MetadataList.hasFwdRefs())
  842. lazyLoadOneMetadata(MetadataList.getNextFwdRef(), Placeholders);
  843. }
  844. // At this point we don't have any forward reference remaining, or temporary
  845. // that haven't been loaded. We can safely drop RAUW support and mark cycles
  846. // as resolved.
  847. MetadataList.tryToResolveCycles();
  848. // Finally, everything is in place, we can replace the placeholders operands
  849. // with the final node they refer to.
  850. Placeholders.flush(MetadataList);
  851. }
  852. Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata(
  853. SmallVectorImpl<uint64_t> &Record, unsigned Code,
  854. PlaceholderQueue &Placeholders, StringRef Blob, unsigned &NextMetadataNo) {
  855. bool IsDistinct = false;
  856. auto getMD = [&](unsigned ID) -> Metadata * {
  857. if (ID < MDStringRef.size())
  858. return lazyLoadOneMDString(ID);
  859. if (!IsDistinct) {
  860. if (auto *MD = MetadataList.lookup(ID))
  861. return MD;
  862. // If lazy-loading is enabled, we try recursively to load the operand
  863. // instead of creating a temporary.
  864. if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size())) {
  865. // Create a temporary for the node that is referencing the operand we
  866. // will lazy-load. It is needed before recursing in case there are
  867. // uniquing cycles.
  868. MetadataList.getMetadataFwdRef(NextMetadataNo);
  869. lazyLoadOneMetadata(ID, Placeholders);
  870. return MetadataList.lookup(ID);
  871. }
  872. // Return a temporary.
  873. return MetadataList.getMetadataFwdRef(ID);
  874. }
  875. if (auto *MD = MetadataList.getMetadataIfResolved(ID))
  876. return MD;
  877. return &Placeholders.getPlaceholderOp(ID);
  878. };
  879. auto getMDOrNull = [&](unsigned ID) -> Metadata * {
  880. if (ID)
  881. return getMD(ID - 1);
  882. return nullptr;
  883. };
  884. auto getMDOrNullWithoutPlaceholders = [&](unsigned ID) -> Metadata * {
  885. if (ID)
  886. return MetadataList.getMetadataFwdRef(ID - 1);
  887. return nullptr;
  888. };
  889. auto getMDString = [&](unsigned ID) -> MDString * {
  890. // This requires that the ID is not really a forward reference. In
  891. // particular, the MDString must already have been resolved.
  892. auto MDS = getMDOrNull(ID);
  893. return cast_or_null<MDString>(MDS);
  894. };
  895. // Support for old type refs.
  896. auto getDITypeRefOrNull = [&](unsigned ID) {
  897. return MetadataList.upgradeTypeRef(getMDOrNull(ID));
  898. };
  899. #define GET_OR_DISTINCT(CLASS, ARGS) \
  900. (IsDistinct ? CLASS::getDistinct ARGS : CLASS::get ARGS)
  901. switch (Code) {
  902. default: // Default behavior: ignore.
  903. break;
  904. case bitc::METADATA_NAME: {
  905. // Read name of the named metadata.
  906. SmallString<8> Name(Record.begin(), Record.end());
  907. Record.clear();
  908. Code = Stream.ReadCode();
  909. ++NumMDRecordLoaded;
  910. unsigned NextBitCode = Stream.readRecord(Code, Record);
  911. if (NextBitCode != bitc::METADATA_NAMED_NODE)
  912. return error("METADATA_NAME not followed by METADATA_NAMED_NODE");
  913. // Read named metadata elements.
  914. unsigned Size = Record.size();
  915. NamedMDNode *NMD = TheModule.getOrInsertNamedMetadata(Name);
  916. for (unsigned i = 0; i != Size; ++i) {
  917. MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[i]);
  918. if (!MD)
  919. return error("Invalid named metadata: expect fwd ref to MDNode");
  920. NMD->addOperand(MD);
  921. }
  922. break;
  923. }
  924. case bitc::METADATA_OLD_FN_NODE: {
  925. // FIXME: Remove in 4.0.
  926. // This is a LocalAsMetadata record, the only type of function-local
  927. // metadata.
  928. if (Record.size() % 2 == 1)
  929. return error("Invalid record");
  930. // If this isn't a LocalAsMetadata record, we're dropping it. This used
  931. // to be legal, but there's no upgrade path.
  932. auto dropRecord = [&] {
  933. MetadataList.assignValue(MDNode::get(Context, None), NextMetadataNo);
  934. NextMetadataNo++;
  935. };
  936. if (Record.size() != 2) {
  937. dropRecord();
  938. break;
  939. }
  940. Type *Ty = getTypeByID(Record[0]);
  941. if (Ty->isMetadataTy() || Ty->isVoidTy()) {
  942. dropRecord();
  943. break;
  944. }
  945. MetadataList.assignValue(
  946. LocalAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
  947. NextMetadataNo);
  948. NextMetadataNo++;
  949. break;
  950. }
  951. case bitc::METADATA_OLD_NODE: {
  952. // FIXME: Remove in 4.0.
  953. if (Record.size() % 2 == 1)
  954. return error("Invalid record");
  955. unsigned Size = Record.size();
  956. SmallVector<Metadata *, 8> Elts;
  957. for (unsigned i = 0; i != Size; i += 2) {
  958. Type *Ty = getTypeByID(Record[i]);
  959. if (!Ty)
  960. return error("Invalid record");
  961. if (Ty->isMetadataTy())
  962. Elts.push_back(getMD(Record[i + 1]));
  963. else if (!Ty->isVoidTy()) {
  964. auto *MD =
  965. ValueAsMetadata::get(ValueList.getValueFwdRef(Record[i + 1], Ty));
  966. assert(isa<ConstantAsMetadata>(MD) &&
  967. "Expected non-function-local metadata");
  968. Elts.push_back(MD);
  969. } else
  970. Elts.push_back(nullptr);
  971. }
  972. MetadataList.assignValue(MDNode::get(Context, Elts), NextMetadataNo);
  973. NextMetadataNo++;
  974. break;
  975. }
  976. case bitc::METADATA_VALUE: {
  977. if (Record.size() != 2)
  978. return error("Invalid record");
  979. Type *Ty = getTypeByID(Record[0]);
  980. if (Ty->isMetadataTy() || Ty->isVoidTy())
  981. return error("Invalid record");
  982. MetadataList.assignValue(
  983. ValueAsMetadata::get(ValueList.getValueFwdRef(Record[1], Ty)),
  984. NextMetadataNo);
  985. NextMetadataNo++;
  986. break;
  987. }
  988. case bitc::METADATA_DISTINCT_NODE:
  989. IsDistinct = true;
  990. LLVM_FALLTHROUGH;
  991. case bitc::METADATA_NODE: {
  992. SmallVector<Metadata *, 8> Elts;
  993. Elts.reserve(Record.size());
  994. for (unsigned ID : Record)
  995. Elts.push_back(getMDOrNull(ID));
  996. MetadataList.assignValue(IsDistinct ? MDNode::getDistinct(Context, Elts)
  997. : MDNode::get(Context, Elts),
  998. NextMetadataNo);
  999. NextMetadataNo++;
  1000. break;
  1001. }
  1002. case bitc::METADATA_LOCATION: {
  1003. if (Record.size() != 5 && Record.size() != 6)
  1004. return error("Invalid record");
  1005. IsDistinct = Record[0];
  1006. unsigned Line = Record[1];
  1007. unsigned Column = Record[2];
  1008. Metadata *Scope = getMD(Record[3]);
  1009. Metadata *InlinedAt = getMDOrNull(Record[4]);
  1010. bool ImplicitCode = Record.size() == 6 && Record[5];
  1011. MetadataList.assignValue(
  1012. GET_OR_DISTINCT(DILocation, (Context, Line, Column, Scope, InlinedAt,
  1013. ImplicitCode)),
  1014. NextMetadataNo);
  1015. NextMetadataNo++;
  1016. break;
  1017. }
  1018. case bitc::METADATA_GENERIC_DEBUG: {
  1019. if (Record.size() < 4)
  1020. return error("Invalid record");
  1021. IsDistinct = Record[0];
  1022. unsigned Tag = Record[1];
  1023. unsigned Version = Record[2];
  1024. if (Tag >= 1u << 16 || Version != 0)
  1025. return error("Invalid record");
  1026. auto *Header = getMDString(Record[3]);
  1027. SmallVector<Metadata *, 8> DwarfOps;
  1028. for (unsigned I = 4, E = Record.size(); I != E; ++I)
  1029. DwarfOps.push_back(getMDOrNull(Record[I]));
  1030. MetadataList.assignValue(
  1031. GET_OR_DISTINCT(GenericDINode, (Context, Tag, Header, DwarfOps)),
  1032. NextMetadataNo);
  1033. NextMetadataNo++;
  1034. break;
  1035. }
  1036. case bitc::METADATA_SUBRANGE: {
  1037. Metadata *Val = nullptr;
  1038. // Operand 'count' is interpreted as:
  1039. // - Signed integer (version 0)
  1040. // - Metadata node (version 1)
  1041. switch (Record[0] >> 1) {
  1042. case 0:
  1043. Val = GET_OR_DISTINCT(DISubrange,
  1044. (Context, Record[1], unrotateSign(Record.back())));
  1045. break;
  1046. case 1:
  1047. Val = GET_OR_DISTINCT(DISubrange, (Context, getMDOrNull(Record[1]),
  1048. unrotateSign(Record.back())));
  1049. break;
  1050. default:
  1051. return error("Invalid record: Unsupported version of DISubrange");
  1052. }
  1053. MetadataList.assignValue(Val, NextMetadataNo);
  1054. IsDistinct = Record[0] & 1;
  1055. NextMetadataNo++;
  1056. break;
  1057. }
  1058. case bitc::METADATA_ENUMERATOR: {
  1059. if (Record.size() != 3)
  1060. return error("Invalid record");
  1061. IsDistinct = Record[0] & 1;
  1062. bool IsUnsigned = Record[0] & 2;
  1063. MetadataList.assignValue(
  1064. GET_OR_DISTINCT(DIEnumerator, (Context, unrotateSign(Record[1]),
  1065. IsUnsigned, getMDString(Record[2]))),
  1066. NextMetadataNo);
  1067. NextMetadataNo++;
  1068. break;
  1069. }
  1070. case bitc::METADATA_BASIC_TYPE: {
  1071. if (Record.size() < 6 || Record.size() > 7)
  1072. return error("Invalid record");
  1073. IsDistinct = Record[0];
  1074. DINode::DIFlags Flags = (Record.size() > 6) ?
  1075. static_cast<DINode::DIFlags>(Record[6]) : DINode::FlagZero;
  1076. MetadataList.assignValue(
  1077. GET_OR_DISTINCT(DIBasicType,
  1078. (Context, Record[1], getMDString(Record[2]), Record[3],
  1079. Record[4], Record[5], Flags)),
  1080. NextMetadataNo);
  1081. NextMetadataNo++;
  1082. break;
  1083. }
  1084. case bitc::METADATA_DERIVED_TYPE: {
  1085. if (Record.size() < 12 || Record.size() > 13)
  1086. return error("Invalid record");
  1087. // DWARF address space is encoded as N->getDWARFAddressSpace() + 1. 0 means
  1088. // that there is no DWARF address space associated with DIDerivedType.
  1089. Optional<unsigned> DWARFAddressSpace;
  1090. if (Record.size() > 12 && Record[12])
  1091. DWARFAddressSpace = Record[12] - 1;
  1092. IsDistinct = Record[0];
  1093. DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
  1094. MetadataList.assignValue(
  1095. GET_OR_DISTINCT(DIDerivedType,
  1096. (Context, Record[1], getMDString(Record[2]),
  1097. getMDOrNull(Record[3]), Record[4],
  1098. getDITypeRefOrNull(Record[5]),
  1099. getDITypeRefOrNull(Record[6]), Record[7], Record[8],
  1100. Record[9], DWARFAddressSpace, Flags,
  1101. getDITypeRefOrNull(Record[11]))),
  1102. NextMetadataNo);
  1103. NextMetadataNo++;
  1104. break;
  1105. }
  1106. case bitc::METADATA_COMPOSITE_TYPE: {
  1107. if (Record.size() < 16 || Record.size() > 17)
  1108. return error("Invalid record");
  1109. // If we have a UUID and this is not a forward declaration, lookup the
  1110. // mapping.
  1111. IsDistinct = Record[0] & 0x1;
  1112. bool IsNotUsedInTypeRef = Record[0] >= 2;
  1113. unsigned Tag = Record[1];
  1114. MDString *Name = getMDString(Record[2]);
  1115. Metadata *File = getMDOrNull(Record[3]);
  1116. unsigned Line = Record[4];
  1117. Metadata *Scope = getDITypeRefOrNull(Record[5]);
  1118. Metadata *BaseType = nullptr;
  1119. uint64_t SizeInBits = Record[7];
  1120. if (Record[8] > (uint64_t)std::numeric_limits<uint32_t>::max())
  1121. return error("Alignment value is too large");
  1122. uint32_t AlignInBits = Record[8];
  1123. uint64_t OffsetInBits = 0;
  1124. DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[10]);
  1125. Metadata *Elements = nullptr;
  1126. unsigned RuntimeLang = Record[12];
  1127. Metadata *VTableHolder = nullptr;
  1128. Metadata *TemplateParams = nullptr;
  1129. Metadata *Discriminator = nullptr;
  1130. auto *Identifier = getMDString(Record[15]);
  1131. // If this module is being parsed so that it can be ThinLTO imported
  1132. // into another module, composite types only need to be imported
  1133. // as type declarations (unless full type definitions requested).
  1134. // Create type declarations up front to save memory. Also, buildODRType
  1135. // handles the case where this is type ODRed with a definition needed
  1136. // by the importing module, in which case the existing definition is
  1137. // used.
  1138. if (IsImporting && !ImportFullTypeDefinitions && Identifier &&
  1139. (Tag == dwarf::DW_TAG_enumeration_type ||
  1140. Tag == dwarf::DW_TAG_class_type ||
  1141. Tag == dwarf::DW_TAG_structure_type ||
  1142. Tag == dwarf::DW_TAG_union_type)) {
  1143. Flags = Flags | DINode::FlagFwdDecl;
  1144. } else {
  1145. BaseType = getDITypeRefOrNull(Record[6]);
  1146. OffsetInBits = Record[9];
  1147. Elements = getMDOrNull(Record[11]);
  1148. VTableHolder = getDITypeRefOrNull(Record[13]);
  1149. TemplateParams = getMDOrNull(Record[14]);
  1150. if (Record.size() > 16)
  1151. Discriminator = getMDOrNull(Record[16]);
  1152. }
  1153. DICompositeType *CT = nullptr;
  1154. if (Identifier)
  1155. CT = DICompositeType::buildODRType(
  1156. Context, *Identifier, Tag, Name, File, Line, Scope, BaseType,
  1157. SizeInBits, AlignInBits, OffsetInBits, Flags, Elements, RuntimeLang,
  1158. VTableHolder, TemplateParams, Discriminator);
  1159. // Create a node if we didn't get a lazy ODR type.
  1160. if (!CT)
  1161. CT = GET_OR_DISTINCT(DICompositeType,
  1162. (Context, Tag, Name, File, Line, Scope, BaseType,
  1163. SizeInBits, AlignInBits, OffsetInBits, Flags,
  1164. Elements, RuntimeLang, VTableHolder, TemplateParams,
  1165. Identifier, Discriminator));
  1166. if (!IsNotUsedInTypeRef && Identifier)
  1167. MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
  1168. MetadataList.assignValue(CT, NextMetadataNo);
  1169. NextMetadataNo++;
  1170. break;
  1171. }
  1172. case bitc::METADATA_SUBROUTINE_TYPE: {
  1173. if (Record.size() < 3 || Record.size() > 4)
  1174. return error("Invalid record");
  1175. bool IsOldTypeRefArray = Record[0] < 2;
  1176. unsigned CC = (Record.size() > 3) ? Record[3] : 0;
  1177. IsDistinct = Record[0] & 0x1;
  1178. DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[1]);
  1179. Metadata *Types = getMDOrNull(Record[2]);
  1180. if (LLVM_UNLIKELY(IsOldTypeRefArray))
  1181. Types = MetadataList.upgradeTypeRefArray(Types);
  1182. MetadataList.assignValue(
  1183. GET_OR_DISTINCT(DISubroutineType, (Context, Flags, CC, Types)),
  1184. NextMetadataNo);
  1185. NextMetadataNo++;
  1186. break;
  1187. }
  1188. case bitc::METADATA_MODULE: {
  1189. if (Record.size() != 6)
  1190. return error("Invalid record");
  1191. IsDistinct = Record[0];
  1192. MetadataList.assignValue(
  1193. GET_OR_DISTINCT(DIModule,
  1194. (Context, getMDOrNull(Record[1]),
  1195. getMDString(Record[2]), getMDString(Record[3]),
  1196. getMDString(Record[4]), getMDString(Record[5]))),
  1197. NextMetadataNo);
  1198. NextMetadataNo++;
  1199. break;
  1200. }
  1201. case bitc::METADATA_FILE: {
  1202. if (Record.size() != 3 && Record.size() != 5 && Record.size() != 6)
  1203. return error("Invalid record");
  1204. IsDistinct = Record[0];
  1205. Optional<DIFile::ChecksumInfo<MDString *>> Checksum;
  1206. // The BitcodeWriter writes null bytes into Record[3:4] when the Checksum
  1207. // is not present. This matches up with the old internal representation,
  1208. // and the old encoding for CSK_None in the ChecksumKind. The new
  1209. // representation reserves the value 0 in the ChecksumKind to continue to
  1210. // encode None in a backwards-compatible way.
  1211. if (Record.size() > 4 && Record[3] && Record[4])
  1212. Checksum.emplace(static_cast<DIFile::ChecksumKind>(Record[3]),
  1213. getMDString(Record[4]));
  1214. MetadataList.assignValue(
  1215. GET_OR_DISTINCT(
  1216. DIFile,
  1217. (Context, getMDString(Record[1]), getMDString(Record[2]), Checksum,
  1218. Record.size() > 5 ? Optional<MDString *>(getMDString(Record[5]))
  1219. : None)),
  1220. NextMetadataNo);
  1221. NextMetadataNo++;
  1222. break;
  1223. }
  1224. case bitc::METADATA_COMPILE_UNIT: {
  1225. if (Record.size() < 14 || Record.size() > 19)
  1226. return error("Invalid record");
  1227. // Ignore Record[0], which indicates whether this compile unit is
  1228. // distinct. It's always distinct.
  1229. IsDistinct = true;
  1230. auto *CU = DICompileUnit::getDistinct(
  1231. Context, Record[1], getMDOrNull(Record[2]), getMDString(Record[3]),
  1232. Record[4], getMDString(Record[5]), Record[6], getMDString(Record[7]),
  1233. Record[8], getMDOrNull(Record[9]), getMDOrNull(Record[10]),
  1234. getMDOrNull(Record[12]), getMDOrNull(Record[13]),
  1235. Record.size() <= 15 ? nullptr : getMDOrNull(Record[15]),
  1236. Record.size() <= 14 ? 0 : Record[14],
  1237. Record.size() <= 16 ? true : Record[16],
  1238. Record.size() <= 17 ? false : Record[17],
  1239. Record.size() <= 18 ? 0 : Record[18],
  1240. Record.size() <= 19 ? 0 : Record[19]);
  1241. MetadataList.assignValue(CU, NextMetadataNo);
  1242. NextMetadataNo++;
  1243. // Move the Upgrade the list of subprograms.
  1244. if (Metadata *SPs = getMDOrNullWithoutPlaceholders(Record[11]))
  1245. CUSubprograms.push_back({CU, SPs});
  1246. break;
  1247. }
  1248. case bitc::METADATA_SUBPROGRAM: {
  1249. if (Record.size() < 18 || Record.size() > 21)
  1250. return error("Invalid record");
  1251. bool HasSPFlags = Record[0] & 4;
  1252. DISubprogram::DISPFlags SPFlags =
  1253. HasSPFlags
  1254. ? static_cast<DISubprogram::DISPFlags>(Record[9])
  1255. : DISubprogram::toSPFlags(
  1256. /*IsLocalToUnit=*/Record[7], /*IsDefinition=*/Record[8],
  1257. /*IsOptimized=*/Record[14], /*Virtuality=*/Record[11]);
  1258. // All definitions should be distinct.
  1259. IsDistinct = (Record[0] & 1) || (SPFlags & DISubprogram::SPFlagDefinition);
  1260. // Version 1 has a Function as Record[15].
  1261. // Version 2 has removed Record[15].
  1262. // Version 3 has the Unit as Record[15].
  1263. // Version 4 added thisAdjustment.
  1264. // Version 5 repacked flags into DISPFlags, changing many element numbers.
  1265. bool HasUnit = Record[0] & 2;
  1266. if (!HasSPFlags && HasUnit && Record.size() < 19)
  1267. return error("Invalid record");
  1268. if (HasSPFlags && !HasUnit)
  1269. return error("Invalid record");
  1270. // Accommodate older formats.
  1271. bool HasFn = false;
  1272. bool HasThisAdj = true;
  1273. bool HasThrownTypes = true;
  1274. unsigned OffsetA = 0;
  1275. unsigned OffsetB = 0;
  1276. if (!HasSPFlags) {
  1277. OffsetA = 2;
  1278. OffsetB = 2;
  1279. if (Record.size() >= 19) {
  1280. HasFn = !HasUnit;
  1281. OffsetB++;
  1282. }
  1283. HasThisAdj = Record.size() >= 20;
  1284. HasThrownTypes = Record.size() >= 21;
  1285. }
  1286. Metadata *CUorFn = getMDOrNull(Record[12 + OffsetB]);
  1287. DISubprogram *SP = GET_OR_DISTINCT(
  1288. DISubprogram,
  1289. (Context,
  1290. getDITypeRefOrNull(Record[1]), // scope
  1291. getMDString(Record[2]), // name
  1292. getMDString(Record[3]), // linkageName
  1293. getMDOrNull(Record[4]), // file
  1294. Record[5], // line
  1295. getMDOrNull(Record[6]), // type
  1296. Record[7 + OffsetA], // scopeLine
  1297. getDITypeRefOrNull(Record[8 + OffsetA]), // containingType
  1298. Record[10 + OffsetA], // virtualIndex
  1299. HasThisAdj ? Record[16 + OffsetB] : 0, // thisAdjustment
  1300. static_cast<DINode::DIFlags>(Record[11 + OffsetA]),// flags
  1301. SPFlags, // SPFlags
  1302. HasUnit ? CUorFn : nullptr, // unit
  1303. getMDOrNull(Record[13 + OffsetB]), // templateParams
  1304. getMDOrNull(Record[14 + OffsetB]), // declaration
  1305. getMDOrNull(Record[15 + OffsetB]), // retainedNodes
  1306. HasThrownTypes ? getMDOrNull(Record[17 + OffsetB])
  1307. : nullptr // thrownTypes
  1308. ));
  1309. MetadataList.assignValue(SP, NextMetadataNo);
  1310. NextMetadataNo++;
  1311. // Upgrade sp->function mapping to function->sp mapping.
  1312. if (HasFn) {
  1313. if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(CUorFn))
  1314. if (auto *F = dyn_cast<Function>(CMD->getValue())) {
  1315. if (F->isMaterializable())
  1316. // Defer until materialized; unmaterialized functions may not have
  1317. // metadata.
  1318. FunctionsWithSPs[F] = SP;
  1319. else if (!F->empty())
  1320. F->setSubprogram(SP);
  1321. }
  1322. }
  1323. break;
  1324. }
  1325. case bitc::METADATA_LEXICAL_BLOCK: {
  1326. if (Record.size() != 5)
  1327. return error("Invalid record");
  1328. IsDistinct = Record[0];
  1329. MetadataList.assignValue(
  1330. GET_OR_DISTINCT(DILexicalBlock,
  1331. (Context, getMDOrNull(Record[1]),
  1332. getMDOrNull(Record[2]), Record[3], Record[4])),
  1333. NextMetadataNo);
  1334. NextMetadataNo++;
  1335. break;
  1336. }
  1337. case bitc::METADATA_LEXICAL_BLOCK_FILE: {
  1338. if (Record.size() != 4)
  1339. return error("Invalid record");
  1340. IsDistinct = Record[0];
  1341. MetadataList.assignValue(
  1342. GET_OR_DISTINCT(DILexicalBlockFile,
  1343. (Context, getMDOrNull(Record[1]),
  1344. getMDOrNull(Record[2]), Record[3])),
  1345. NextMetadataNo);
  1346. NextMetadataNo++;
  1347. break;
  1348. }
  1349. case bitc::METADATA_NAMESPACE: {
  1350. // Newer versions of DINamespace dropped file and line.
  1351. MDString *Name;
  1352. if (Record.size() == 3)
  1353. Name = getMDString(Record[2]);
  1354. else if (Record.size() == 5)
  1355. Name = getMDString(Record[3]);
  1356. else
  1357. return error("Invalid record");
  1358. IsDistinct = Record[0] & 1;
  1359. bool ExportSymbols = Record[0] & 2;
  1360. MetadataList.assignValue(
  1361. GET_OR_DISTINCT(DINamespace,
  1362. (Context, getMDOrNull(Record[1]), Name, ExportSymbols)),
  1363. NextMetadataNo);
  1364. NextMetadataNo++;
  1365. break;
  1366. }
  1367. case bitc::METADATA_MACRO: {
  1368. if (Record.size() != 5)
  1369. return error("Invalid record");
  1370. IsDistinct = Record[0];
  1371. MetadataList.assignValue(
  1372. GET_OR_DISTINCT(DIMacro,
  1373. (Context, Record[1], Record[2], getMDString(Record[3]),
  1374. getMDString(Record[4]))),
  1375. NextMetadataNo);
  1376. NextMetadataNo++;
  1377. break;
  1378. }
  1379. case bitc::METADATA_MACRO_FILE: {
  1380. if (Record.size() != 5)
  1381. return error("Invalid record");
  1382. IsDistinct = Record[0];
  1383. MetadataList.assignValue(
  1384. GET_OR_DISTINCT(DIMacroFile,
  1385. (Context, Record[1], Record[2], getMDOrNull(Record[3]),
  1386. getMDOrNull(Record[4]))),
  1387. NextMetadataNo);
  1388. NextMetadataNo++;
  1389. break;
  1390. }
  1391. case bitc::METADATA_TEMPLATE_TYPE: {
  1392. if (Record.size() != 3)
  1393. return error("Invalid record");
  1394. IsDistinct = Record[0];
  1395. MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter,
  1396. (Context, getMDString(Record[1]),
  1397. getDITypeRefOrNull(Record[2]))),
  1398. NextMetadataNo);
  1399. NextMetadataNo++;
  1400. break;
  1401. }
  1402. case bitc::METADATA_TEMPLATE_VALUE: {
  1403. if (Record.size() != 5)
  1404. return error("Invalid record");
  1405. IsDistinct = Record[0];
  1406. MetadataList.assignValue(
  1407. GET_OR_DISTINCT(DITemplateValueParameter,
  1408. (Context, Record[1], getMDString(Record[2]),
  1409. getDITypeRefOrNull(Record[3]),
  1410. getMDOrNull(Record[4]))),
  1411. NextMetadataNo);
  1412. NextMetadataNo++;
  1413. break;
  1414. }
  1415. case bitc::METADATA_GLOBAL_VAR: {
  1416. if (Record.size() < 11 || Record.size() > 13)
  1417. return error("Invalid record");
  1418. IsDistinct = Record[0] & 1;
  1419. unsigned Version = Record[0] >> 1;
  1420. if (Version == 2) {
  1421. MetadataList.assignValue(
  1422. GET_OR_DISTINCT(
  1423. DIGlobalVariable,
  1424. (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
  1425. getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
  1426. getDITypeRefOrNull(Record[6]), Record[7], Record[8],
  1427. getMDOrNull(Record[9]), getMDOrNull(Record[10]), Record[11])),
  1428. NextMetadataNo);
  1429. NextMetadataNo++;
  1430. } else if (Version == 1) {
  1431. // No upgrade necessary. A null field will be introduced to indicate
  1432. // that no parameter information is available.
  1433. MetadataList.assignValue(
  1434. GET_OR_DISTINCT(DIGlobalVariable,
  1435. (Context, getMDOrNull(Record[1]),
  1436. getMDString(Record[2]), getMDString(Record[3]),
  1437. getMDOrNull(Record[4]), Record[5],
  1438. getDITypeRefOrNull(Record[6]), Record[7], Record[8],
  1439. getMDOrNull(Record[10]), nullptr, Record[11])),
  1440. NextMetadataNo);
  1441. NextMetadataNo++;
  1442. } else if (Version == 0) {
  1443. // Upgrade old metadata, which stored a global variable reference or a
  1444. // ConstantInt here.
  1445. NeedUpgradeToDIGlobalVariableExpression = true;
  1446. Metadata *Expr = getMDOrNull(Record[9]);
  1447. uint32_t AlignInBits = 0;
  1448. if (Record.size() > 11) {
  1449. if (Record[11] > (uint64_t)std::numeric_limits<uint32_t>::max())
  1450. return error("Alignment value is too large");
  1451. AlignInBits = Record[11];
  1452. }
  1453. GlobalVariable *Attach = nullptr;
  1454. if (auto *CMD = dyn_cast_or_null<ConstantAsMetadata>(Expr)) {
  1455. if (auto *GV = dyn_cast<GlobalVariable>(CMD->getValue())) {
  1456. Attach = GV;
  1457. Expr = nullptr;
  1458. } else if (auto *CI = dyn_cast<ConstantInt>(CMD->getValue())) {
  1459. Expr = DIExpression::get(Context,
  1460. {dwarf::DW_OP_constu, CI->getZExtValue(),
  1461. dwarf::DW_OP_stack_value});
  1462. } else {
  1463. Expr = nullptr;
  1464. }
  1465. }
  1466. DIGlobalVariable *DGV = GET_OR_DISTINCT(
  1467. DIGlobalVariable,
  1468. (Context, getMDOrNull(Record[1]), getMDString(Record[2]),
  1469. getMDString(Record[3]), getMDOrNull(Record[4]), Record[5],
  1470. getDITypeRefOrNull(Record[6]), Record[7], Record[8],
  1471. getMDOrNull(Record[10]), nullptr, AlignInBits));
  1472. DIGlobalVariableExpression *DGVE = nullptr;
  1473. if (Attach || Expr)
  1474. DGVE = DIGlobalVariableExpression::getDistinct(
  1475. Context, DGV, Expr ? Expr : DIExpression::get(Context, {}));
  1476. if (Attach)
  1477. Attach->addDebugInfo(DGVE);
  1478. auto *MDNode = Expr ? cast<Metadata>(DGVE) : cast<Metadata>(DGV);
  1479. MetadataList.assignValue(MDNode, NextMetadataNo);
  1480. NextMetadataNo++;
  1481. } else
  1482. return error("Invalid record");
  1483. break;
  1484. }
  1485. case bitc::METADATA_LOCAL_VAR: {
  1486. // 10th field is for the obseleted 'inlinedAt:' field.
  1487. if (Record.size() < 8 || Record.size() > 10)
  1488. return error("Invalid record");
  1489. IsDistinct = Record[0] & 1;
  1490. bool HasAlignment = Record[0] & 2;
  1491. // 2nd field used to be an artificial tag, either DW_TAG_auto_variable or
  1492. // DW_TAG_arg_variable, if we have alignment flag encoded it means, that
  1493. // this is newer version of record which doesn't have artificial tag.
  1494. bool HasTag = !HasAlignment && Record.size() > 8;
  1495. DINode::DIFlags Flags = static_cast<DINode::DIFlags>(Record[7 + HasTag]);
  1496. uint32_t AlignInBits = 0;
  1497. if (HasAlignment) {
  1498. if (Record[8 + HasTag] > (uint64_t)std::numeric_limits<uint32_t>::max())
  1499. return error("Alignment value is too large");
  1500. AlignInBits = Record[8 + HasTag];
  1501. }
  1502. MetadataList.assignValue(
  1503. GET_OR_DISTINCT(DILocalVariable,
  1504. (Context, getMDOrNull(Record[1 + HasTag]),
  1505. getMDString(Record[2 + HasTag]),
  1506. getMDOrNull(Record[3 + HasTag]), Record[4 + HasTag],
  1507. getDITypeRefOrNull(Record[5 + HasTag]),
  1508. Record[6 + HasTag], Flags, AlignInBits)),
  1509. NextMetadataNo);
  1510. NextMetadataNo++;
  1511. break;
  1512. }
  1513. case bitc::METADATA_LABEL: {
  1514. if (Record.size() != 5)
  1515. return error("Invalid record");
  1516. IsDistinct = Record[0] & 1;
  1517. MetadataList.assignValue(
  1518. GET_OR_DISTINCT(DILabel,
  1519. (Context, getMDOrNull(Record[1]),
  1520. getMDString(Record[2]),
  1521. getMDOrNull(Record[3]), Record[4])),
  1522. NextMetadataNo);
  1523. NextMetadataNo++;
  1524. break;
  1525. }
  1526. case bitc::METADATA_EXPRESSION: {
  1527. if (Record.size() < 1)
  1528. return error("Invalid record");
  1529. IsDistinct = Record[0] & 1;
  1530. uint64_t Version = Record[0] >> 1;
  1531. auto Elts = MutableArrayRef<uint64_t>(Record).slice(1);
  1532. SmallVector<uint64_t, 6> Buffer;
  1533. if (Error Err = upgradeDIExpression(Version, Elts, Buffer))
  1534. return Err;
  1535. MetadataList.assignValue(
  1536. GET_OR_DISTINCT(DIExpression, (Context, Elts)), NextMetadataNo);
  1537. NextMetadataNo++;
  1538. break;
  1539. }
  1540. case bitc::METADATA_GLOBAL_VAR_EXPR: {
  1541. if (Record.size() != 3)
  1542. return error("Invalid record");
  1543. IsDistinct = Record[0];
  1544. Metadata *Expr = getMDOrNull(Record[2]);
  1545. if (!Expr)
  1546. Expr = DIExpression::get(Context, {});
  1547. MetadataList.assignValue(
  1548. GET_OR_DISTINCT(DIGlobalVariableExpression,
  1549. (Context, getMDOrNull(Record[1]), Expr)),
  1550. NextMetadataNo);
  1551. NextMetadataNo++;
  1552. break;
  1553. }
  1554. case bitc::METADATA_OBJC_PROPERTY: {
  1555. if (Record.size() != 8)
  1556. return error("Invalid record");
  1557. IsDistinct = Record[0];
  1558. MetadataList.assignValue(
  1559. GET_OR_DISTINCT(DIObjCProperty,
  1560. (Context, getMDString(Record[1]),
  1561. getMDOrNull(Record[2]), Record[3],
  1562. getMDString(Record[4]), getMDString(Record[5]),
  1563. Record[6], getDITypeRefOrNull(Record[7]))),
  1564. NextMetadataNo);
  1565. NextMetadataNo++;
  1566. break;
  1567. }
  1568. case bitc::METADATA_IMPORTED_ENTITY: {
  1569. if (Record.size() != 6 && Record.size() != 7)
  1570. return error("Invalid record");
  1571. IsDistinct = Record[0];
  1572. bool HasFile = (Record.size() == 7);
  1573. MetadataList.assignValue(
  1574. GET_OR_DISTINCT(DIImportedEntity,
  1575. (Context, Record[1], getMDOrNull(Record[2]),
  1576. getDITypeRefOrNull(Record[3]),
  1577. HasFile ? getMDOrNull(Record[6]) : nullptr,
  1578. HasFile ? Record[4] : 0, getMDString(Record[5]))),
  1579. NextMetadataNo);
  1580. NextMetadataNo++;
  1581. break;
  1582. }
  1583. case bitc::METADATA_STRING_OLD: {
  1584. std::string String(Record.begin(), Record.end());
  1585. // Test for upgrading !llvm.loop.
  1586. HasSeenOldLoopTags |= mayBeOldLoopAttachmentTag(String);
  1587. ++NumMDStringLoaded;
  1588. Metadata *MD = MDString::get(Context, String);
  1589. MetadataList.assignValue(MD, NextMetadataNo);
  1590. NextMetadataNo++;
  1591. break;
  1592. }
  1593. case bitc::METADATA_STRINGS: {
  1594. auto CreateNextMDString = [&](StringRef Str) {
  1595. ++NumMDStringLoaded;
  1596. MetadataList.assignValue(MDString::get(Context, Str), NextMetadataNo);
  1597. NextMetadataNo++;
  1598. };
  1599. if (Error Err = parseMetadataStrings(Record, Blob, CreateNextMDString))
  1600. return Err;
  1601. break;
  1602. }
  1603. case bitc::METADATA_GLOBAL_DECL_ATTACHMENT: {
  1604. if (Record.size() % 2 == 0)
  1605. return error("Invalid record");
  1606. unsigned ValueID = Record[0];
  1607. if (ValueID >= ValueList.size())
  1608. return error("Invalid record");
  1609. if (auto *GO = dyn_cast<GlobalObject>(ValueList[ValueID]))
  1610. if (Error Err = parseGlobalObjectAttachment(
  1611. *GO, ArrayRef<uint64_t>(Record).slice(1)))
  1612. return Err;
  1613. break;
  1614. }
  1615. case bitc::METADATA_KIND: {
  1616. // Support older bitcode files that had METADATA_KIND records in a
  1617. // block with METADATA_BLOCK_ID.
  1618. if (Error Err = parseMetadataKindRecord(Record))
  1619. return Err;
  1620. break;
  1621. }
  1622. }
  1623. return Error::success();
  1624. #undef GET_OR_DISTINCT
  1625. }
  1626. Error MetadataLoader::MetadataLoaderImpl::parseMetadataStrings(
  1627. ArrayRef<uint64_t> Record, StringRef Blob,
  1628. function_ref<void(StringRef)> CallBack) {
  1629. // All the MDStrings in the block are emitted together in a single
  1630. // record. The strings are concatenated and stored in a blob along with
  1631. // their sizes.
  1632. if (Record.size() != 2)
  1633. return error("Invalid record: metadata strings layout");
  1634. unsigned NumStrings = Record[0];
  1635. unsigned StringsOffset = Record[1];
  1636. if (!NumStrings)
  1637. return error("Invalid record: metadata strings with no strings");
  1638. if (StringsOffset > Blob.size())
  1639. return error("Invalid record: metadata strings corrupt offset");
  1640. StringRef Lengths = Blob.slice(0, StringsOffset);
  1641. SimpleBitstreamCursor R(Lengths);
  1642. StringRef Strings = Blob.drop_front(StringsOffset);
  1643. do {
  1644. if (R.AtEndOfStream())
  1645. return error("Invalid record: metadata strings bad length");
  1646. unsigned Size = R.ReadVBR(6);
  1647. if (Strings.size() < Size)
  1648. return error("Invalid record: metadata strings truncated chars");
  1649. CallBack(Strings.slice(0, Size));
  1650. Strings = Strings.drop_front(Size);
  1651. } while (--NumStrings);
  1652. return Error::success();
  1653. }
  1654. Error MetadataLoader::MetadataLoaderImpl::parseGlobalObjectAttachment(
  1655. GlobalObject &GO, ArrayRef<uint64_t> Record) {
  1656. assert(Record.size() % 2 == 0);
  1657. for (unsigned I = 0, E = Record.size(); I != E; I += 2) {
  1658. auto K = MDKindMap.find(Record[I]);
  1659. if (K == MDKindMap.end())
  1660. return error("Invalid ID");
  1661. MDNode *MD = MetadataList.getMDNodeFwdRefOrNull(Record[I + 1]);
  1662. if (!MD)
  1663. return error("Invalid metadata attachment: expect fwd ref to MDNode");
  1664. GO.addMetadata(K->second, *MD);
  1665. }
  1666. return Error::success();
  1667. }
  1668. /// Parse metadata attachments.
  1669. Error MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(
  1670. Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
  1671. if (Stream.EnterSubBlock(bitc::METADATA_ATTACHMENT_ID))
  1672. return error("Invalid record");
  1673. SmallVector<uint64_t, 64> Record;
  1674. PlaceholderQueue Placeholders;
  1675. while (true) {
  1676. BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
  1677. switch (Entry.Kind) {
  1678. case BitstreamEntry::SubBlock: // Handled for us already.
  1679. case BitstreamEntry::Error:
  1680. return error("Malformed block");
  1681. case BitstreamEntry::EndBlock:
  1682. resolveForwardRefsAndPlaceholders(Placeholders);
  1683. return Error::success();
  1684. case BitstreamEntry::Record:
  1685. // The interesting case.
  1686. break;
  1687. }
  1688. // Read a metadata attachment record.
  1689. Record.clear();
  1690. ++NumMDRecordLoaded;
  1691. switch (Stream.readRecord(Entry.ID, Record)) {
  1692. default: // Default behavior: ignore.
  1693. break;
  1694. case bitc::METADATA_ATTACHMENT: {
  1695. unsigned RecordLength = Record.size();
  1696. if (Record.empty())
  1697. return error("Invalid record");
  1698. if (RecordLength % 2 == 0) {
  1699. // A function attachment.
  1700. if (Error Err = parseGlobalObjectAttachment(F, Record))
  1701. return Err;
  1702. continue;
  1703. }
  1704. // An instruction attachment.
  1705. Instruction *Inst = InstructionList[Record[0]];
  1706. for (unsigned i = 1; i != RecordLength; i = i + 2) {
  1707. unsigned Kind = Record[i];
  1708. DenseMap<unsigned, unsigned>::iterator I = MDKindMap.find(Kind);
  1709. if (I == MDKindMap.end())
  1710. return error("Invalid ID");
  1711. if (I->second == LLVMContext::MD_tbaa && StripTBAA)
  1712. continue;
  1713. auto Idx = Record[i + 1];
  1714. if (Idx < (MDStringRef.size() + GlobalMetadataBitPosIndex.size()) &&
  1715. !MetadataList.lookup(Idx)) {
  1716. // Load the attachment if it is in the lazy-loadable range and hasn't
  1717. // been loaded yet.
  1718. lazyLoadOneMetadata(Idx, Placeholders);
  1719. resolveForwardRefsAndPlaceholders(Placeholders);
  1720. }
  1721. Metadata *Node = MetadataList.getMetadataFwdRef(Idx);
  1722. if (isa<LocalAsMetadata>(Node))
  1723. // Drop the attachment. This used to be legal, but there's no
  1724. // upgrade path.
  1725. break;
  1726. MDNode *MD = dyn_cast_or_null<MDNode>(Node);
  1727. if (!MD)
  1728. return error("Invalid metadata attachment");
  1729. if (HasSeenOldLoopTags && I->second == LLVMContext::MD_loop)
  1730. MD = upgradeInstructionLoopAttachment(*MD);
  1731. if (I->second == LLVMContext::MD_tbaa) {
  1732. assert(!MD->isTemporary() && "should load MDs before attachments");
  1733. MD = UpgradeTBAANode(*MD);
  1734. }
  1735. Inst->setMetadata(I->second, MD);
  1736. }
  1737. break;
  1738. }
  1739. }
  1740. }
  1741. }
  1742. /// Parse a single METADATA_KIND record, inserting result in MDKindMap.
  1743. Error MetadataLoader::MetadataLoaderImpl::parseMetadataKindRecord(
  1744. SmallVectorImpl<uint64_t> &Record) {
  1745. if (Record.size() < 2)
  1746. return error("Invalid record");
  1747. unsigned Kind = Record[0];
  1748. SmallString<8> Name(Record.begin() + 1, Record.end());
  1749. unsigned NewKind = TheModule.getMDKindID(Name.str());
  1750. if (!MDKindMap.insert(std::make_pair(Kind, NewKind)).second)
  1751. return error("Conflicting METADATA_KIND records");
  1752. return Error::success();
  1753. }
  1754. /// Parse the metadata kinds out of the METADATA_KIND_BLOCK.
  1755. Error MetadataLoader::MetadataLoaderImpl::parseMetadataKinds() {
  1756. if (Stream.EnterSubBlock(bitc::METADATA_KIND_BLOCK_ID))
  1757. return error("Invalid record");
  1758. SmallVector<uint64_t, 64> Record;
  1759. // Read all the records.
  1760. while (true) {
  1761. BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
  1762. switch (Entry.Kind) {
  1763. case BitstreamEntry::SubBlock: // Handled for us already.
  1764. case BitstreamEntry::Error:
  1765. return error("Malformed block");
  1766. case BitstreamEntry::EndBlock:
  1767. return Error::success();
  1768. case BitstreamEntry::Record:
  1769. // The interesting case.
  1770. break;
  1771. }
  1772. // Read a record.
  1773. Record.clear();
  1774. ++NumMDRecordLoaded;
  1775. unsigned Code = Stream.readRecord(Entry.ID, Record);
  1776. switch (Code) {
  1777. default: // Default behavior: ignore.
  1778. break;
  1779. case bitc::METADATA_KIND: {
  1780. if (Error Err = parseMetadataKindRecord(Record))
  1781. return Err;
  1782. break;
  1783. }
  1784. }
  1785. }
  1786. }
  1787. MetadataLoader &MetadataLoader::operator=(MetadataLoader &&RHS) {
  1788. Pimpl = std::move(RHS.Pimpl);
  1789. return *this;
  1790. }
  1791. MetadataLoader::MetadataLoader(MetadataLoader &&RHS)
  1792. : Pimpl(std::move(RHS.Pimpl)) {}
  1793. MetadataLoader::~MetadataLoader() = default;
  1794. MetadataLoader::MetadataLoader(BitstreamCursor &Stream, Module &TheModule,
  1795. BitcodeReaderValueList &ValueList,
  1796. bool IsImporting,
  1797. std::function<Type *(unsigned)> getTypeByID)
  1798. : Pimpl(llvm::make_unique<MetadataLoaderImpl>(
  1799. Stream, TheModule, ValueList, std::move(getTypeByID), IsImporting)) {}
  1800. Error MetadataLoader::parseMetadata(bool ModuleLevel) {
  1801. return Pimpl->parseMetadata(ModuleLevel);
  1802. }
  1803. bool MetadataLoader::hasFwdRefs() const { return Pimpl->hasFwdRefs(); }
  1804. /// Return the given metadata, creating a replaceable forward reference if
  1805. /// necessary.
  1806. Metadata *MetadataLoader::getMetadataFwdRefOrLoad(unsigned Idx) {
  1807. return Pimpl->getMetadataFwdRefOrLoad(Idx);
  1808. }
  1809. DISubprogram *MetadataLoader::lookupSubprogramForFunction(Function *F) {
  1810. return Pimpl->lookupSubprogramForFunction(F);
  1811. }
  1812. Error MetadataLoader::parseMetadataAttachment(
  1813. Function &F, const SmallVectorImpl<Instruction *> &InstructionList) {
  1814. return Pimpl->parseMetadataAttachment(F, InstructionList);
  1815. }
  1816. Error MetadataLoader::parseMetadataKinds() {
  1817. return Pimpl->parseMetadataKinds();
  1818. }
  1819. void MetadataLoader::setStripTBAA(bool StripTBAA) {
  1820. return Pimpl->setStripTBAA(StripTBAA);
  1821. }
  1822. bool MetadataLoader::isStrippingTBAA() { return Pimpl->isStrippingTBAA(); }
  1823. unsigned MetadataLoader::size() const { return Pimpl->size(); }
  1824. void MetadataLoader::shrinkTo(unsigned N) { return Pimpl->shrinkTo(N); }
  1825. void MetadataLoader::upgradeDebugIntrinsics(Function &F) {
  1826. return Pimpl->upgradeDebugIntrinsics(F);
  1827. }