144 lines
3.6 KiB
LLVM
144 lines
3.6 KiB
LLVM
; REQUIRES: x86
|
|
; RUN: rm -rf %t; split-file %s %t
|
|
; RUN: llc -filetype=obj %t/foo1.ll -o %t/foo1.o
|
|
; RUN: llc -filetype=obj %t/foo2.ll -o %t/foo2.o
|
|
; RUN: llvm-ar rcs %t/libfoo2.a %t/foo2.o
|
|
; RUN: llc -filetype=obj %t/foo3.ll -o %t/foo3.o
|
|
; RUN: llvm-ar rcs %t/libfoo3.a %t/foo3.o
|
|
|
|
; RUN: llc -filetype=obj %t/zoo2.ll -o %t/zoo2.o
|
|
; RUN: llvm-ar rcs %t/libzoo2.a %t/zoo2.o
|
|
; RUN: llc -filetype=obj %t/zoo3.ll -o %t/zoo3.o
|
|
; RUN: llvm-ar rcs %t/libzoo3.a %t/zoo3.o
|
|
|
|
; RUN: llc -filetype=obj %t/bar1.ll -o %t/bar1.o
|
|
; RUN: llc -filetype=obj %t/bar2.ll -o %t/bar2.o
|
|
; RUN: llvm-ar rcs %t/libbar2.a %t/bar2.o
|
|
; RUN: llc -filetype=obj %t/bar3.ll -o %t/bar3.o
|
|
; RUN: llvm-ar rcs %t/libbar3.a %t/bar3.o
|
|
|
|
; RUN: %lld -dylib -lSystem -L%t %t/foo1.o %t/bar1.o -o %t/order.out
|
|
; RUN: llvm-objdump --no-leading-addr --no-show-raw-insn -d %t/order.out | FileCheck %s
|
|
|
|
; We want to process input object files first
|
|
; before any lc-linker options are actually resolved.
|
|
; The lc-linker options are recursively processed.
|
|
|
|
; The following shows a chain of auto linker options,
|
|
; starting with foo1.o and bar1.o:
|
|
;
|
|
; foo1.o -> libfoo2.a(foo2.o) -> libfoo3.a(foo3.o)
|
|
; \
|
|
; -> libzoo2.a(zoo2.o) -> libzoo3.a(zoo3.o)
|
|
; bar1.o -> libbar2.a(bar2.o) -> libbar3.a(bar3.o)
|
|
|
|
; CHECK: <_foo1>:
|
|
; CHECK: <_bar1>:
|
|
; CHECK: <_foo2>:
|
|
; CHECK: <_zoo2>:
|
|
; CHECK: <_bar2>:
|
|
; CHECK: <_foo3>:
|
|
; CHECK: <_zoo3>:
|
|
; CHECK: <_bar3>:
|
|
|
|
;--- foo1.ll
|
|
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.15.0"
|
|
|
|
!0 = !{!"-lfoo2"}
|
|
!1 = !{!"-lzoo2"}
|
|
!llvm.linker.options = !{!0, !1}
|
|
|
|
define i32 @foo1() {
|
|
%call = call i32 @foo2()
|
|
%call2 = call i32 @zoo2()
|
|
%add = add nsw i32 %call, %call2
|
|
ret i32 %add
|
|
}
|
|
|
|
declare i32 @foo2()
|
|
declare i32 @zoo2()
|
|
|
|
;--- foo2.ll
|
|
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.15.0"
|
|
|
|
!0 = !{!"-lfoo3"}
|
|
!llvm.linker.options = !{!0}
|
|
|
|
define i32 @foo2() {
|
|
%call = call i32 @foo3()
|
|
%add = add nsw i32 %call, 2
|
|
ret i32 %add
|
|
}
|
|
|
|
declare i32 @foo3()
|
|
|
|
;--- foo3.ll
|
|
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.15.0"
|
|
|
|
define i32 @foo3() {
|
|
ret i32 3
|
|
}
|
|
|
|
;--- zoo2.ll
|
|
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.15.0"
|
|
|
|
!0 = !{!"-lzoo3"}
|
|
!llvm.linker.options = !{!0}
|
|
|
|
define i32 @zoo2() {
|
|
%call = call i32 @zoo3()
|
|
%add = add nsw i32 %call, 2
|
|
ret i32 %add
|
|
}
|
|
|
|
declare i32 @zoo3()
|
|
|
|
;--- zoo3.ll
|
|
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.15.0"
|
|
|
|
define i32 @zoo3() {
|
|
ret i32 30
|
|
}
|
|
|
|
;--- bar1.ll
|
|
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.15.0"
|
|
|
|
!0 = !{!"-lbar2"}
|
|
!llvm.linker.options = !{!0}
|
|
|
|
define i32 @bar1() {
|
|
%call = call i32 @bar2()
|
|
%add = add nsw i32 %call, 10
|
|
ret i32 %add
|
|
}
|
|
|
|
declare i32 @bar2()
|
|
|
|
;--- bar2.ll
|
|
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.15.0"
|
|
|
|
!0 = !{!"-lbar3"}
|
|
!llvm.linker.options = !{!0}
|
|
|
|
define i32 @bar2() {
|
|
%call = call i32 @bar3()
|
|
%add = add nsw i32 %call, 200
|
|
ret i32 %add
|
|
}
|
|
|
|
declare i32 @bar3()
|
|
|
|
;--- bar3.ll
|
|
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.15.0"
|
|
|
|
define i32 @bar3() {
|
|
ret i32 300
|
|
}
|