
Auto-upgrade can be expensive, especially UpgradeDebugInfo() since it runs the verifier. With this patch, we can specify that the imported bitcode is built with the same revision of LLVM, meaning there's no need to run any auto-upgrading. For now, limit this to just debug info since projects like Rust want to support multiple versions of LLVM at the same time (at compiler build time, not at Rust source code build time) and run a subset of the autoupgrade functionality for simplicity. Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D143229
54 lines
2.3 KiB
LLVM
54 lines
2.3 KiB
LLVM
; RUN: llvm-as -disable-verify %s -o %t.bc
|
|
; ---- Full LTO ---------------------------------------------
|
|
; RUN: llvm-lto \
|
|
; RUN: -exported-symbol foo -exported-symbol _foo \
|
|
; RUN: -o %t.o %t.bc 2>&1 | \
|
|
; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-WARN
|
|
; RUN: llvm-nm %t.o | FileCheck %s
|
|
; ---- Thin LTO (codegen only) ------------------------------
|
|
; RUN: llvm-lto -thinlto -thinlto-action=codegen \
|
|
; RUN: %t.bc -disable-verify 2>&1 | \
|
|
; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-WARN
|
|
; ---- Thin LTO (optimize, strip main file) -----------------
|
|
; RUN: opt -disable-verify -disable-upgrade-debug-info -module-summary %s -o %t.bc
|
|
; RUN: opt -disable-verify -disable-upgrade-debug-info -module-summary %S/Inputs/strip-debug-info-bar.ll \
|
|
; RUN: -o %t2.bc
|
|
; RUN: llvm-lto -thinlto -thinlto-action=run \
|
|
; RUN: %t.bc -disable-verify 2>&1 | \
|
|
; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-WARN
|
|
; ---- Thin LTO (optimize, strip imported file) -------------
|
|
; RUN: opt -module-summary %t.bc -o %t-stripped.bc
|
|
; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t-stripped.bc %t2.bc
|
|
; RUN: llvm-lto -thinlto -thinlto-action=import \
|
|
; RUN: -thinlto-index=%t.index.bc \
|
|
; RUN: -exported-symbol foo -exported-symbol _foo \
|
|
; RUN: %t-stripped.bc -disable-verify 2>&1 | \
|
|
; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-WARN
|
|
; ---- Thin LTO (optimize, don't strip imported file)
|
|
; RUN: llvm-lto -thinlto-action=thinlink -o %t.index.bc %t-stripped.bc %t2.bc
|
|
; RUN: llvm-lto -thinlto -thinlto-action=import -disable-auto-upgrade-debug-info \
|
|
; RUN: -thinlto-index=%t.index.bc \
|
|
; RUN: -exported-symbol foo -exported-symbol _foo \
|
|
; RUN: %t-stripped.bc -disable-verify 2>&1 | \
|
|
; RUN: FileCheck %s -allow-empty -check-prefix=CHECK-NO-WARN
|
|
|
|
; CHECK-WARN: warning{{.*}} ignoring invalid debug info
|
|
; CHECK-WARN-NOT: Broken module found
|
|
; CHECK: foo
|
|
; CHECK-NO-WARN-NOT: ignoring invalid debug info
|
|
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx10.12"
|
|
|
|
declare void @bar()
|
|
|
|
define void @foo() {
|
|
call void @bar()
|
|
ret void
|
|
}
|
|
|
|
!llvm.module.flags = !{!0}
|
|
!llvm.dbg.cu = !{!1}
|
|
|
|
!0 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!1 = !DIFile(filename: "broken", directory: "")
|