1; RUN: llc -mtriple=mipsel-- -relocation-model=pic < %s | FileCheck -check-prefix=CHECK-PIC %s 2; RUN: llc -mtriple=mipsel-- -relocation-model=static < %s | FileCheck -check-prefix=CHECK-NONPIC %s 3 4@external_gd = external thread_local global i32 5@internal_gd = internal thread_local global i32 42 6 7@external_ld = external thread_local(localdynamic) global i32 8@internal_ld = internal thread_local(localdynamic) global i32 42 9 10@external_ie = external thread_local(initialexec) global i32 11@internal_ie = internal thread_local(initialexec) global i32 42 12 13@external_le = external thread_local(localexec) global i32 14@internal_le = internal thread_local(localexec) global i32 42 15 16; ----- no model specified ----- 17 18define i32* @f1() { 19entry: 20 ret i32* @external_gd 21 22 ; Non-PIC code can use initial-exec, PIC code has to use general dynamic. 23 ; CHECK-NONPIC-LABEL: f1: 24 ; CHECK-NONPIC: %gottprel 25 ; CHECK-PIC-LABEL: f1: 26 ; CHECK-PIC: %tlsgd 27} 28 29define i32* @f2() { 30entry: 31 ret i32* @internal_gd 32 33 ; Non-PIC code can use local exec, PIC code can use local dynamic. 34 ; CHECK-NONPIC-LABEL: f2: 35 ; CHECK-NONPIC: %tprel_hi 36 ; CHECK-PIC-LABEL: f2: 37 ; CHECK-PIC: %tlsldm 38} 39 40 41; ----- localdynamic specified ----- 42 43define i32* @f3() { 44entry: 45 ret i32* @external_ld 46 47 ; Non-PIC code can use initial exec, PIC should use local dynamic. 48 ; CHECK-NONPIC-LABEL: f3: 49 ; CHECK-NONPIC: %gottprel 50 ; CHECK-PIC-LABEL: f3: 51 ; CHECK-PIC: %tlsldm 52} 53 54define i32* @f4() { 55entry: 56 ret i32* @internal_ld 57 58 ; Non-PIC code can use local exec, PIC code can use local dynamic. 59 ; CHECK-NONPIC-LABEL: f4: 60 ; CHECK-NONPIC: %tprel_hi 61 ; CHECK-PIC-LABEL: f4: 62 ; CHECK-PIC: %tlsldm 63} 64 65 66; ----- initialexec specified ----- 67 68define i32* @f5() { 69entry: 70 ret i32* @external_ie 71 72 ; Non-PIC and PIC code will use initial exec as specified. 73 ; CHECK-NONPIC-LABEL: f5: 74 ; CHECK-NONPIC: %gottprel 75 ; CHECK-PIC-LABEL: f5: 76 ; CHECK-PIC: %gottprel 77} 78 79define i32* @f6() { 80entry: 81 ret i32* @internal_ie 82 83 ; Non-PIC code can use local exec, PIC code use initial exec as specified. 84 ; CHECK-NONPIC-LABEL: f6: 85 ; CHECK-NONPIC: %tprel_hi 86 ; CHECK-PIC-LABEL: f6: 87 ; CHECK-PIC: %gottprel 88} 89 90 91; ----- localexec specified ----- 92 93define i32* @f7() { 94entry: 95 ret i32* @external_le 96 97 ; Non-PIC and PIC code will use local exec as specified. 98 ; CHECK-NONPIC-LABEL: f7: 99 ; CHECK-NONPIC: %tprel_hi 100 ; CHECK-PIC-LABEL: f7: 101 ; CHECK-PIC: %tprel_hi 102} 103 104define i32* @f8() { 105entry: 106 ret i32* @internal_le 107 108 ; Non-PIC and PIC code will use local exec as specified. 109 ; CHECK-NONPIC-LABEL: f8: 110 ; CHECK-NONPIC: %tprel_hi 111 ; CHECK-PIC-LABEL: f8: 112 ; CHECK-PIC: %tprel_hi 113} 114