mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 15:33:33 +00:00
Duplicate a testcase.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@180744 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e78d832097
commit
ad96c64355
89
test/CodeGen/X86/tls-init-funcs.ll
Normal file
89
test/CodeGen/X86/tls-init-funcs.ll
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
; RUN: llc < %s -mtriple x86_64-apple-macosx10 | FileCheck %s
|
||||||
|
|
||||||
|
; CHECK: .section __DATA,__thread_init,thread_local_init_function_pointers
|
||||||
|
; CHECK: .align 3
|
||||||
|
; CHECK: .quad ___tls_init
|
||||||
|
|
||||||
|
%struct.A = type { i8 }
|
||||||
|
%struct.B = type { i32 }
|
||||||
|
|
||||||
|
@i = thread_local global i32 37, align 4
|
||||||
|
@a = thread_local global %struct.A zeroinitializer, align 1
|
||||||
|
@b = thread_local global %struct.B zeroinitializer, align 4
|
||||||
|
@z = global %struct.A zeroinitializer, align 1
|
||||||
|
@y = global %struct.B zeroinitializer, align 4
|
||||||
|
@__tls_guard = internal thread_local unnamed_addr global i1 false
|
||||||
|
@llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
|
||||||
|
@llvm.tls_init_funcs = appending global [1 x void ()*] [void ()* @__tls_init]
|
||||||
|
|
||||||
|
@_ZTH1i = alias void ()* @__tls_init
|
||||||
|
@_ZTH1a = alias void ()* @__tls_init
|
||||||
|
@_ZTH1b = alias void ()* @__tls_init
|
||||||
|
|
||||||
|
declare void @_ZN1AC1Ev(%struct.A*)
|
||||||
|
|
||||||
|
declare void @_ZN1BC1Ei(%struct.B*, i32)
|
||||||
|
|
||||||
|
define internal void @_GLOBAL__I_a() section "__TEXT,__StaticInit,regular,pure_instructions" {
|
||||||
|
entry:
|
||||||
|
tail call void @_ZN1AC1Ev(%struct.A* @z)
|
||||||
|
tail call void @_ZN1BC1Ei(%struct.B* @y, i32 42)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define internal void @__tls_init() {
|
||||||
|
entry:
|
||||||
|
%.b = load i1* @__tls_guard, align 1
|
||||||
|
store i1 true, i1* @__tls_guard, align 1
|
||||||
|
br i1 %.b, label %exit, label %init
|
||||||
|
|
||||||
|
init: ; preds = %entry
|
||||||
|
tail call void @_ZN1AC1Ev(%struct.A* @a)
|
||||||
|
tail call void @_ZN1BC1Ei(%struct.B* @b, i32 927)
|
||||||
|
br label %exit
|
||||||
|
|
||||||
|
exit: ; preds = %entry, %init
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
|
||||||
|
define weak_odr hidden i32* @_ZTW1i() {
|
||||||
|
%.b.i = load i1* @__tls_guard, align 1
|
||||||
|
store i1 true, i1* @__tls_guard, align 1
|
||||||
|
br i1 %.b.i, label %__tls_init.exit, label %init.i
|
||||||
|
|
||||||
|
init.i: ; preds = %0
|
||||||
|
tail call void @_ZN1AC1Ev(%struct.A* @a)
|
||||||
|
tail call void @_ZN1BC1Ei(%struct.B* @b, i32 927)
|
||||||
|
br label %__tls_init.exit
|
||||||
|
|
||||||
|
__tls_init.exit: ; preds = %0, %init.i
|
||||||
|
ret i32* @i
|
||||||
|
}
|
||||||
|
|
||||||
|
define weak_odr hidden %struct.A* @_ZTW1a() {
|
||||||
|
%.b.i = load i1* @__tls_guard, align 1
|
||||||
|
store i1 true, i1* @__tls_guard, align 1
|
||||||
|
br i1 %.b.i, label %__tls_init.exit, label %init.i
|
||||||
|
|
||||||
|
init.i: ; preds = %0
|
||||||
|
tail call void @_ZN1AC1Ev(%struct.A* @a)
|
||||||
|
tail call void @_ZN1BC1Ei(%struct.B* @b, i32 927)
|
||||||
|
br label %__tls_init.exit
|
||||||
|
|
||||||
|
__tls_init.exit: ; preds = %0, %init.i
|
||||||
|
ret %struct.A* @a
|
||||||
|
}
|
||||||
|
|
||||||
|
define weak_odr hidden %struct.B* @_ZTW1b() {
|
||||||
|
%.b.i = load i1* @__tls_guard, align 1
|
||||||
|
store i1 true, i1* @__tls_guard, align 1
|
||||||
|
br i1 %.b.i, label %__tls_init.exit, label %init.i
|
||||||
|
|
||||||
|
init.i: ; preds = %0
|
||||||
|
tail call void @_ZN1AC1Ev(%struct.A* @a)
|
||||||
|
tail call void @_ZN1BC1Ei(%struct.B* @b, i32 927)
|
||||||
|
br label %__tls_init.exit
|
||||||
|
|
||||||
|
__tls_init.exit: ; preds = %0, %init.i
|
||||||
|
ret %struct.B* @b
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user