OLD | NEW |
(Empty) | |
| 1 ; RUN: opt < %s -nacl-expand-tls -S | FileCheck %s |
| 2 |
| 3 target datalayout = "p:32:32:32" |
| 4 |
| 5 |
| 6 @var = global i32 123 |
| 7 |
| 8 ; Put this first to check that the pass handles BSS variables last. |
| 9 @bss_tvar_aligned = thread_local global i32 0, align 64 |
| 10 |
| 11 @tvar1 = thread_local global i16 234 |
| 12 ; Test a pointer to check we are getting the right pointer size. |
| 13 @tvar2 = thread_local global i32* @var |
| 14 @tvar_aligned = thread_local global i8 99, align 32 |
| 15 |
| 16 |
| 17 ; CHECK: %tls_init_template = type <{ i16, [2 x i8], i32*, [24 x i8], i8 }> |
| 18 ; CHECK: %tls_struct = type <{ %tls_init_template, %tls_bss_template }> |
| 19 |
| 20 ; This struct type must be "packed" because the 31 byte padding here |
| 21 ; is followed by an i32. |
| 22 ; CHECK: %tls_bss_template = type <{ [31 x i8], i32, [60 x i8] }> |
| 23 |
| 24 ; CHECK: @__tls_template_start = internal constant %tls_init_template <{ i16 234
, [2 x i8] zeroinitializer, i32* @var, [24 x i8] zeroinitializer, i8 99 }> |
| 25 |
| 26 ; CHECK: @__tls_template_alignment = internal constant i32 64 |
| 27 |
| 28 |
| 29 ; Create references to __tls_template_* to keep these live, otherwise |
| 30 ; the definition of %tls_struct (which we check for above) is removed |
| 31 ; from the output. |
| 32 |
| 33 @__tls_template_tdata_end = external global i8 |
| 34 @__tls_template_end = external global i8 |
| 35 |
| 36 define i8* @get_tls_template_tdata_end() { |
| 37 ret i8* @__tls_template_tdata_end |
| 38 } |
| 39 |
| 40 define i8* @get_tls_template_end() { |
| 41 ret i8* @__tls_template_end |
| 42 } |
OLD | NEW |