mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 22:58:50 +00:00
a2f6e4d840
Summary: 1. Use stream 0 only for combined module. Previously if combined module was not processes ThinLTO used the stream for own output. However small changes in input, could trigger combined module and shuffle outputs making life of llvm::LTO harder. 2. Always process combined module and write output to stream 0. Processing empty combined module is cheap and allows llvm::LTO users to avoid implementing processing which is already done in llvm::LTO. Subscribers: mehdi_amini, inglorion, eraman, hiraditya Differential Revision: https://reviews.llvm.org/D41267 llvm-svn: 320905
80 lines
2.2 KiB
LLVM
80 lines
2.2 KiB
LLVM
; RUN: opt -module-summary %s -o %t1.bc
|
|
; RUN: opt -module-summary %S/Inputs/personality.ll -o %t2.bc
|
|
|
|
; RUN: llvm-lto2 run -o %t.o %t1.bc %t2.bc -save-temps \
|
|
; RUN: -r %t2.bc,bar,p \
|
|
; RUN: -r %t2.bc,personality_routine,p \
|
|
; RUN: -r %t2.bc,personality_routine2,p \
|
|
; RUN: -r %t2.bc,personality_routine3,p \
|
|
; RUN: -r %t1.bc,foo,p \
|
|
; RUN: -r %t1.bc,foo2,p \
|
|
; RUN: -r %t1.bc,foo3,p \
|
|
; RUN: -r %t1.bc,personality_routine,l \
|
|
; RUN: -r %t1.bc,personality_routine2,l \
|
|
; RUN: -r %t1.bc,personality_routine3,l \
|
|
; RUN: -r %t1.bc,main,xp \
|
|
; RUN: -r %t1.bc,bar,l
|
|
; RUN: llvm-readobj -t %t.o.2 | FileCheck %s --check-prefix=BINDING
|
|
|
|
; BINDING: Symbol {
|
|
; BINDING: Name: personality_routine
|
|
; BINDING-NEXT: Value:
|
|
; BINDING-NEXT: Size:
|
|
; BINDING-NEXT: Binding: Global
|
|
; BINDING-NEXT: Type: Function
|
|
; BINDING-NEXT: Other [
|
|
; BINDING-NEXT: STV_PROTECTED
|
|
; BINDING-NEXT: ]
|
|
; BINDING-NEXT: Section: .text
|
|
; BINDING-NEXT: }
|
|
|
|
; BINDING-NEXT: Symbol {
|
|
; BINDING-NEXT: Name: personality_routine2
|
|
; BINDING-NEXT: Value:
|
|
; BINDING-NEXT: Size:
|
|
; BINDING-NEXT: Binding: Global
|
|
; BINDING-NEXT: Type: Function
|
|
; BINDING-NEXT: Other [
|
|
; BINDING-NEXT: STV_PROTECTED
|
|
; BINDING-NEXT: ]
|
|
; BINDING-NEXT: Section: .text
|
|
; BINDING-NEXT: }
|
|
|
|
; BINDING-NOT: Name: personality_routine3
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-pc-linux-gnu"
|
|
|
|
declare protected i32 @personality_routine(i32, i32, i64, i8*, i8*)
|
|
declare protected i32 @personality_routine2(i32, i32, i64, i8*, i8*)
|
|
declare protected i32 @personality_routine3(i32, i32, i64, i8*, i8*)
|
|
declare void @bar()
|
|
|
|
define void @foo() personality i32 (i32, i32, i64, i8*, i8*)* @personality_routine {
|
|
ret void
|
|
}
|
|
|
|
define internal void @foo2b() personality i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @personality_routine2 to i8*) {
|
|
ret void
|
|
}
|
|
|
|
define internal void @foo2a() prologue void ()* @foo2b {
|
|
ret void
|
|
}
|
|
|
|
define void @foo2() prefix void ()* @foo2a {
|
|
ret void
|
|
}
|
|
|
|
define void @foo3() personality i8* bitcast (i32 (i32, i32, i64, i8*, i8*)* @personality_routine3 to i8*) {
|
|
ret void
|
|
}
|
|
|
|
define i32 @main() {
|
|
call void @foo()
|
|
call void @foo2()
|
|
call void @bar()
|
|
ret i32 0
|
|
}
|
|
|