[llvm-branch-commits] [llvm-branch] r292505 - Merge r292420 in 4.0 Release: "[ThinLTO] Add a recursive step in Metadata lazy-loading"

Mehdi Amini via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Jan 19 10:48:32 PST 2017


Author: mehdi_amini
Date: Thu Jan 19 12:48:31 2017
New Revision: 292505

URL: http://llvm.org/viewvc/llvm-project?rev=292505&view=rev
Log:
Merge r292420 in 4.0 Release: "[ThinLTO] Add a recursive step in Metadata lazy-loading"



Modified:
    llvm/branches/release_40/lib/Bitcode/Reader/MetadataLoader.cpp
    llvm/branches/release_40/test/ThinLTO/X86/lazyload_metadata.ll

Modified: llvm/branches/release_40/lib/Bitcode/Reader/MetadataLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_40/lib/Bitcode/Reader/MetadataLoader.cpp?rev=292505&r1=292504&r2=292505&view=diff
==============================================================================
--- llvm/branches/release_40/lib/Bitcode/Reader/MetadataLoader.cpp (original)
+++ llvm/branches/release_40/lib/Bitcode/Reader/MetadataLoader.cpp Thu Jan 19 12:48:31 2017
@@ -768,13 +768,12 @@ void MetadataLoader::MetadataLoaderImpl:
     unsigned ID, PlaceholderQueue &Placeholders) {
   assert(ID < (MDStringRef.size()) + GlobalMetadataBitPosIndex.size());
   assert(ID >= MDStringRef.size() && "Unexpected lazy-loading of MDString");
-#ifndef NDEBUG
   // Lookup first if the metadata hasn't already been loaded.
   if (auto *MD = MetadataList.lookup(ID)) {
     auto *N = dyn_cast_or_null<MDNode>(MD);
-    assert(N && N->isTemporary() && "Lazy loading an already loaded metadata");
+    if (!N->isTemporary())
+      return;
   }
-#endif
   SmallVector<uint64_t, 64> Record;
   StringRef Blob;
   IndexCursor.JumpToBit(GlobalMetadataBitPosIndex[ID - MDStringRef.size()]);
@@ -827,8 +826,22 @@ Error MetadataLoader::MetadataLoaderImpl
   auto getMD = [&](unsigned ID) -> Metadata * {
     if (ID < MDStringRef.size())
       return lazyLoadOneMDString(ID);
-    if (!IsDistinct)
+    if (!IsDistinct) {
+      if (auto *MD = MetadataList.lookup(ID))
+        return MD;
+      // If lazy-loading is enabled, we try recursively to load the operand
+      // instead of creating a temporary.
+      if (ID < (MDStringRef.size() + GlobalMetadataBitPosIndex.size())) {
+        // Create a temporary for the node that is referencing the operand we
+        // will lazy-load. It is needed before recursing in case there are
+        // uniquing cycles.
+        MetadataList.getMetadataFwdRef(NextMetadataNo);
+        lazyLoadOneMetadata(ID, Placeholders);
+        return MetadataList.lookup(ID);
+      }
+      // Return a temporary.
       return MetadataList.getMetadataFwdRef(ID);
+    }
     if (auto *MD = MetadataList.getMetadataIfResolved(ID))
       return MD;
     return &Placeholders.getPlaceholderOp(ID);

Modified: llvm/branches/release_40/test/ThinLTO/X86/lazyload_metadata.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/release_40/test/ThinLTO/X86/lazyload_metadata.ll?rev=292505&r1=292504&r2=292505&view=diff
==============================================================================
--- llvm/branches/release_40/test/ThinLTO/X86/lazyload_metadata.ll (original)
+++ llvm/branches/release_40/test/ThinLTO/X86/lazyload_metadata.ll Thu Jan 19 12:48:31 2017
@@ -17,7 +17,7 @@
 ; RUN:          -o /dev/null -disable-ondemand-mds-loading -stats \
 ; RUN:  2>&1 | FileCheck %s -check-prefix=NOTLAZY
 ; NOTLAZY: 58 bitcode-reader  - Number of Metadata records loaded
-; NOTLAZY: 8 bitcode-reader  - Number of MDStrings loaded
+; NOTLAZY: 6 bitcode-reader  - Number of MDStrings loaded
 
 
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
@@ -48,7 +48,7 @@ define void @globalfunc3(i32 %arg) {
 !3 = !{!"3"}
 !4 = !{!"4"}
 !5 = !{!"5"}
-!6 = !{!"6"}
+!6 = !{!9}
 !7 = !{!"7"}
 !8 = !{!"8"}
-!9 = !{!"9"}
+!9 = !{!6}




More information about the llvm-branch-commits mailing list