brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 795162f Raw
156 lines · plain
1; RUN: llc -mtriple=arm-linux-gnueabi < %s \2; RUN:     | FileCheck -check-prefix=CHECK-NONPIC -check-prefix=COMMON %s3; RUN: llc -mtriple=arm-linux-gnueabi -relocation-model=pic < %s \4; RUN:     | FileCheck -check-prefix=CHECK-PIC  -check-prefix=COMMON %s5; RUN: llc -emulated-tls -mtriple=arm-linux-gnueabi < %s \6; RUN:     | FileCheck -check-prefix=EMU -check-prefix=COMMON %s7; RUN: llc -emulated-tls -mtriple=arm-linux-gnueabi -relocation-model=pic < %s \8; RUN:     | FileCheck -check-prefix=EMU -check-prefix=COMMON %s9 10 11@external_gd = external thread_local global i3212@internal_gd = internal thread_local global i32 4213 14@external_ld = external thread_local(localdynamic) global i3215@internal_ld = internal thread_local(localdynamic) global i32 4216 17@external_ie = external thread_local(initialexec) global i3218@internal_ie = internal thread_local(initialexec) global i32 4219 20@external_le = external thread_local(localexec) global i3221@internal_le = internal thread_local(localexec) global i32 4222 23; ----- no model specified -----24 25define ptr @f1() {26entry:27  ret ptr @external_gd28 29  ; COMMON-LABEL:   f1:30  ; Non-PIC code can use initial-exec, PIC code has to use general dynamic.31  ; CHECK-NONPIC:   external_gd(GOTTPOFF)32  ; CHECK-PIC:      external_gd(TLSGD)33  ; EMU:            __emutls_get_address34}35 36define ptr @f2() {37entry:38  ret ptr @internal_gd39 40  ; COMMON-LABEL:   f2:41  ; Non-PIC code can use local exec, PIC code can use local dynamic,42  ; but that is not implemented, so falls back to general dynamic.43  ; CHECK-NONPIC:   internal_gd(TPOFF)44  ; CHECK-PIC:      internal_gd(TLSGD)45  ; EMU:            __emutls_get_address46}47 48 49; ----- localdynamic specified -----50 51define ptr @f3() {52entry:53  ret ptr @external_ld54 55  ; COMMON-LABEL:   f3:56  ; Non-PIC code can use initial exec, PIC should use local dynamic,57  ; but that is not implemented, so falls back to general dynamic.58  ; CHECK-NONPIC:   external_ld(GOTTPOFF)59  ; CHECK-PIC:      external_ld(TLSGD)60  ; EMU:            __emutls_get_address61}62 63define ptr @f4() {64entry:65  ret ptr @internal_ld66 67  ; COMMON-LABEL:   f4:68  ; Non-PIC code can use local exec, PIC code can use local dynamic,69  ; but that is not implemented, so it falls back to general dynamic.70  ; CHECK-NONPIC:   internal_ld(TPOFF)71  ; CHECK-PIC:      internal_ld(TLSGD)72  ; EMU:            __emutls_get_address73}74 75 76; ----- initialexec specified -----77 78define ptr @f5() {79entry:80  ret ptr @external_ie81 82  ; COMMON-LABEL:   f5:83  ; Non-PIC and PIC code will use initial exec as specified.84  ; CHECK-NONPIC:   external_ie(GOTTPOFF)85  ; CHECK-PIC:      external_ie(GOTTPOFF)86  ; EMU:            __emutls_get_address87}88 89define ptr @f6() {90entry:91  ret ptr @internal_ie92 93  ; COMMON-LABEL:   f6:94  ; Non-PIC code can use local exec, PIC code use initial exec as specified.95  ; CHECK-NONPIC:   internal_ie(TPOFF)96  ; CHECK-PIC:      internal_ie(GOTTPOFF)97  ; EMU:            __emutls_get_address98}99 100 101; ----- localexec specified -----102 103define ptr @f7() {104entry:105  ret ptr @external_le106 107  ; COMMON-LABEL:   f7:108  ; Non-PIC and PIC code will use local exec as specified.109  ; CHECK-NONPIC:   external_le(TPOFF)110  ; CHECK-PIC:      external_le(TPOFF)111  ; EMU:            __emutls_get_address112}113 114define ptr @f8() {115entry:116  ret ptr @internal_le117 118  ; COMMON-LABEL:   f8:119  ; Non-PIC and PIC code will use local exec as specified.120  ; CHECK-NONPIC:   internal_le(TPOFF)121  ; CHECK-PIC:      internal_le(TPOFF)122  ; EMU:            __emutls_get_address123}124 125 126; ----- emulated specified -----127 128; External declaration has no initializer.129; Internal definition has initializer.130 131; EMU-NOT:   __emutls_t.external_gd132; EMU-NOT:   __emutls_v.external_gd133; EMU:       .p2align 2134; EMU-LABEL: __emutls_v.internal_gd:135; EMU-NEXT:  .long 4136; EMU-NEXT:  .long 4137; EMU-NEXT:  .long 0138; EMU-NEXT:  .long __emutls_t.internal_gd139; EMU-LABEL: __emutls_t.internal_gd:140; EMU-NEXT:  .long 42141; EMU-NOT:   __emutls_t.external_gd142 143; __emutls_t and __emutls_v are the same for PIC and non-PIC modes.144 145; EMU-NOT:   __emutls_t.external_gd146; EMU-NOT:   __emutls_v.external_gd147; EMU:       .p2align 2148; EMU-LABEL: __emutls_v.internal_le:149; EMU-NEXT:  .long 4150; EMU-NEXT:  .long 4151; EMU-NEXT:  .long 0152; EMU-NEXT:  .long __emutls_t.internal_le153; EMU-LABEL: __emutls_t.internal_le:154; EMU-NEXT:  .long 42155; EMU-NOT:   __emutls_t.external_le156