[llvm] r278610 - Fix bitcode auto-upgrade when using bitcode lazy loading

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Sat Aug 13 16:31:53 PDT 2016


Author: mehdi_amini
Date: Sat Aug 13 18:31:53 2016
New Revision: 278610

URL: http://llvm.org/viewvc/llvm-project?rev=278610&view=rev
Log:
Fix bitcode auto-upgrade when using bitcode lazy loading

The auto-upgrade path could be called before the VST (global
names) was fully parsed, and thus intrinsic names were not
available and the autoupgrade logic could not operate.

Fix link failures with ThinLTO.

Added:
    llvm/trunk/test/ThinLTO/X86/Inputs/autoupgrade.bc
    llvm/trunk/test/ThinLTO/X86/autoupgrade.ll
Modified:
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=278610&r1=278609&r2=278610&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Sat Aug 13 18:31:53 2016
@@ -3634,15 +3634,6 @@ std::error_code BitcodeReader::parseModu
           return EC;
         break;
       case bitc::FUNCTION_BLOCK_ID:
-        // If this is the first function body we've seen, reverse the
-        // FunctionsWithBodies list.
-        if (!SeenFirstFunctionBody) {
-          std::reverse(FunctionsWithBodies.begin(), FunctionsWithBodies.end());
-          if (std::error_code EC = globalCleanup())
-            return EC;
-          SeenFirstFunctionBody = true;
-        }
-
         if (VSTOffset > 0) {
           // If we have a VST forward declaration record, make sure we
           // parse the VST now if we haven't already. It is needed to
@@ -3669,6 +3660,15 @@ std::error_code BitcodeReader::parseModu
           }
         }
 
+        // If this is the first function body we've seen, reverse the
+        // FunctionsWithBodies list.
+        if (!SeenFirstFunctionBody) {
+          std::reverse(FunctionsWithBodies.begin(), FunctionsWithBodies.end());
+          if (std::error_code EC = globalCleanup())
+            return EC;
+          SeenFirstFunctionBody = true;
+        }
+
         // Support older bitcode files that did not have the function
         // index in the VST, nor a VST forward declaration record, as
         // well as anonymous functions that do not have VST entries.

Added: llvm/trunk/test/ThinLTO/X86/Inputs/autoupgrade.bc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/Inputs/autoupgrade.bc?rev=278610&view=auto
==============================================================================
Binary files llvm/trunk/test/ThinLTO/X86/Inputs/autoupgrade.bc (added) and llvm/trunk/test/ThinLTO/X86/Inputs/autoupgrade.bc Sat Aug 13 18:31:53 2016 differ

Added: llvm/trunk/test/ThinLTO/X86/autoupgrade.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/ThinLTO/X86/autoupgrade.ll?rev=278610&view=auto
==============================================================================
--- llvm/trunk/test/ThinLTO/X86/autoupgrade.ll (added)
+++ llvm/trunk/test/ThinLTO/X86/autoupgrade.ll Sat Aug 13 18:31:53 2016
@@ -0,0 +1,23 @@
+; Verify that auto-upgrading intrinsics works with Lazy loaded bitcode
+; Do setup work for all below tests: generate bitcode and combined index
+; RUN: opt -module-summary %s -o %t.bc
+; RUN: llvm-lto -thinlto-action=thinlink -o %t3.bc %t.bc %p/Inputs/autoupgrade.bc
+
+; RUN: llvm-lto -thinlto-action=import %t.bc -thinlto-index=%t3.bc -o - | llvm-bcanalyzer -dump | FileCheck %s
+
+; We can't use llvm-dis here, because it would do the autoupgrade itself.
+
+; CHECK-NOT: 'llvm.invariant.start'
+; CHECK: record string = 'llvm.invariant.start.p0i8'
+; CHECK-NOT: 'llvm.invariant.start'
+
+target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.11.0"
+
+define i32 @main() #0 {
+entry:
+  call void (...) @globalfunc1()
+  ret i32 0
+}
+
+declare void @globalfunc1(...) #1




More information about the llvm-commits mailing list