[llvm] r180744 - Duplicate a testcase.

Bill Wendling isanbard at gmail.com
Mon Apr 29 15:42:47 PDT 2013


Author: void
Date: Mon Apr 29 17:42:47 2013
New Revision: 180744

URL: http://llvm.org/viewvc/llvm-project?rev=180744&view=rev
Log:
Duplicate a testcase.

Added:
    llvm/trunk/test/CodeGen/X86/tls-init-funcs.ll

Added: llvm/trunk/test/CodeGen/X86/tls-init-funcs.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/tls-init-funcs.ll?rev=180744&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/tls-init-funcs.ll (added)
+++ llvm/trunk/test/CodeGen/X86/tls-init-funcs.ll Mon Apr 29 17:42:47 2013
@@ -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 }
+
+ at i = thread_local global i32 37, align 4
+ at a = thread_local global %struct.A zeroinitializer, align 1
+ at b = thread_local global %struct.B zeroinitializer, align 4
+ at z = global %struct.A zeroinitializer, align 1
+ at y = global %struct.B zeroinitializer, align 4
+ at __tls_guard = internal thread_local unnamed_addr global i1 false
+ at llvm.global_ctors = appending global [1 x { i32, void ()* }] [{ i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_a }]
+ at llvm.tls_init_funcs = appending global [1 x void ()*] [void ()* @__tls_init]
+
+ at _ZTH1i = alias void ()* @__tls_init
+ at _ZTH1a = alias void ()* @__tls_init
+ at _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
+}





More information about the llvm-commits mailing list