<p dir="ltr">I am not sure this is better than just forcing the client to be non-lazy.</p>
<p dir="ltr">Cheers,<br>
Rafael</p>
<div class="gmail_quote">On Mar 9, 2016 10:30 AM, "Teresa Johnson" <<a href="mailto:tejohnson@google.com">tejohnson@google.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">tejohnson created this revision.<br>
tejohnson added a reviewer: rafael.<br>
tejohnson added subscribers: llvm-commits, silvas.<br>
<br>
Unless we plan to do later postpass metadata linking (ThinLTO special mode),<br>
always invoke metadata materialization at the start of IRLinker::run().<br>
This avoids the need for clients who use lazy metadata loading to<br>
explicitly invoke materializeMetadata before the IRMover, which in<br>
turn invokes IRLinker::run and needs materialized metadata for mapping.<br>
<br>
Came up in the context of an LLD issue (D17982).<br>
<br>
<a href="http://reviews.llvm.org/D17992" rel="noreferrer" target="_blank">http://reviews.llvm.org/D17992</a><br>
<br>
Files:<br>
  lib/Linker/IRMover.cpp<br>
<br>
Index: lib/Linker/IRMover.cpp<br>
===================================================================<br>
--- lib/Linker/IRMover.cpp<br>
+++ lib/Linker/IRMover.cpp<br>
@@ -1492,6 +1492,11 @@<br>
 }<br>
<br>
 bool IRLinker::run() {<br>
+  // Ensure metadata materialized before value mapping.<br>
+  if (shouldLinkMetadata() && SrcM->getMaterializer())<br>
+    if (SrcM->getMaterializer()->materializeMetadata())<br>
+      return true;<br>
+<br>
   // Inherit the target data from the source module if the destination module<br>
   // doesn't have one already.<br>
   if (DstM.getDataLayout().isDefault())<br>
@@ -1559,13 +1564,9 @@<br>
     // Even if just linking metadata we should link decls above in case<br>
     // any are referenced by metadata. IRLinker::shouldLink ensures that<br>
     // we don't actually link anything from source.<br>
-    if (IsMetadataLinkingPostpass) {<br>
-      // Ensure metadata materialized<br>
-      if (SrcM->getMaterializer()->materializeMetadata())<br>
-        return true;<br>
+    if (IsMetadataLinkingPostpass)<br>
       SrcM->getMaterializer()->saveMetadataList(MetadataToIDs,<br>
                                                 /* OnlyTempMD = */ false);<br>
-    }<br>
<br>
     linkNamedMDNodes();<br>
<br>
<br>
<br>
</blockquote></div>