131 lines · plain
1; RUN: llc <%s -mtriple=sparc-unknown-linux -relocation-model=static | FileCheck %s --check-prefix=v8abs2; RUN: llc <%s -mtriple=sparcv9-unknown-linux -relocation-model=static | FileCheck %s --check-prefix=v9abs3; RUN: llc <%s -mtriple=sparc-unknown-linux -relocation-model=pic | FileCheck %s --check-prefix=pic4; RUN: llc <%s -mtriple=sparcv9-unknown-linux -relocation-model=pic | FileCheck %s --check-prefix=pic5 6; RUN: llc <%s -mtriple=sparc-unknown-linux -relocation-model=static -filetype=obj | llvm-readobj -r --symbols - | FileCheck %s --check-prefix=v8abs-obj7; RUN: llc <%s -mtriple=sparcv9-unknown-linux -relocation-model=static -filetype=obj | llvm-readobj -r --symbols - | FileCheck %s --check-prefix=v9abs-obj8; RUN: llc <%s -mtriple=sparc-unknown-linux -relocation-model=pic -filetype=obj | llvm-readobj -r --symbols - | FileCheck %s --check-prefix=pic-obj9; RUN: llc <%s -mtriple=sparcv9-unknown-linux -relocation-model=pic -filetype=obj | llvm-readobj -r --symbols - | FileCheck %s --check-prefix=pic-obj10 11@local_symbol = internal thread_local global i32 012@extern_symbol = external thread_local global i3213 14; v8abs-LABEL: test_tls_local15; v8abs: sethi %tle_hix22(local_symbol), [[R0:%[goli][0-7]]]16; v8abs: xor [[R0]], %tle_lox10(local_symbol), [[R1:%[goli][0-7]]]17; v8abs: ld [%g7+[[R1]]]18 19; v9abs-LABEL: test_tls_local20; v9abs: sethi %tle_hix22(local_symbol), [[R0:%[goli][0-7]]]21; v9abs: xor [[R0]], %tle_lox10(local_symbol), [[R1:%[goli][0-7]]]22; v9abs: ld [%g7+[[R1]]]23 24; pic-LABEL: test_tls_local25; pic: or {{%[goli][0-7]}}, %lo(_GLOBAL_OFFSET_TABLE_+{{.+}}), [[PC:%[goli][0-7]]]26; pic: add [[PC]], %o7, [[GOTBASE:%[goli][0-7]]]27; pic-DAG: sethi %tldm_hi22(local_symbol), [[R0:%[goli][0-7]]]28; pic-DAG: add [[R0]], %tldm_lo10(local_symbol), [[R1:%[goli][0-7]]]29; pic-DAG: add [[GOTBASE]], [[R1]], %o0, %tldm_add(local_symbol)30; pic-DAG: call __tls_get_addr, %tldm_call(local_symbol)31; pic-DAG: sethi %tldo_hix22(local_symbol), [[R2:%[goli][0-7]]]32; pic-DAG: xor [[R2]], %tldo_lox10(local_symbol), [[R3:%[goli][0-7]]]33; pic: add %o0, [[R3]], {{.+}}, %tldo_add(local_symbol)34 35define i32 @test_tls_local() {36entry:37 %0 = load i32, ptr @local_symbol, align 438 %1 = add i32 %0, 139 store i32 %1, ptr @local_symbol, align 440 ret i32 %141}42 43 44; v8abs-LABEL: test_tls_extern45; v8abs: or {{%[goli][0-7]}}, %lo(_GLOBAL_OFFSET_TABLE_), %[[GOTBASE:[goli][0-7]]]46; v8abs: sethi %tie_hi22(extern_symbol), [[R1:%[goli][0-7]]]47; v8abs: add [[R1]], %tie_lo10(extern_symbol), %[[R2:[goli][0-7]]]48; v8abs: ld [%[[GOTBASE]]+%[[R2]]], [[R3:%[goli][0-7]]], %tie_ld(extern_symbol)49; v8abs: add %g7, [[R3]], %[[R4:[goli][0-7]]], %tie_add(extern_symbol)50; v8abs: ld [%[[R4]]]51 52; v9abs-LABEL: test_tls_extern53; v9abs: or {{%[goli][0-7]}}, %l44(_GLOBAL_OFFSET_TABLE_), %[[GOTBASE:[goli][0-7]]]54; v9abs: sethi %tie_hi22(extern_symbol), [[R1:%[goli][0-7]]]55; v9abs: add [[R1]], %tie_lo10(extern_symbol), %[[R2:[goli][0-7]]]56; v9abs: ldx [%[[GOTBASE]]+%[[R2]]], [[R3:%[goli][0-7]]], %tie_ldx(extern_symbol)57; v9abs: add %g7, [[R3]], %[[R4:[goli][0-7]]], %tie_add(extern_symbol)58; v9abs: ld [%[[R4]]]59 60; pic-LABEL: test_tls_extern61; pic: or {{%[goli][0-7]}}, %lo(_GLOBAL_OFFSET_TABLE_+{{.+}}), [[PC:%[goli][0-7]]]62; pic: add [[PC]], %o7, [[GOTBASE:%[goli][0-7]]]63; pic: sethi %tgd_hi22(extern_symbol), [[R0:%[goli][0-7]]]64; pic: add [[R0]], %tgd_lo10(extern_symbol), [[R1:%[goli][0-7]]]65; pic: add [[GOTBASE]], [[R1]], %o0, %tgd_add(extern_symbol)66; pic: call __tls_get_addr, %tgd_call(extern_symbol)67; pic-NEXT: nop68 69define i32 @test_tls_extern() {70entry:71 %0 = load i32, ptr @extern_symbol, align 472 %1 = add i32 %0, 173 store i32 %1, ptr @extern_symbol, align 474 ret i32 %175}76 77 78; v8abs-obj: Relocations [79; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 local_symbol 0x080; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 local_symbol 0x081; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_HI22 _GLOBAL_OFFSET_TABLE_ 0x082; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_LO10 _GLOBAL_OFFSET_TABLE_ 0x083; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_HI22 extern_symbol 0x084; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_LO10 extern_symbol 0x085; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_LD extern_symbol 0x086; v8abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_ADD extern_symbol 0x087; v8abs-obj: ]88 89; v9abs-obj: Relocations [90; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_HIX22 local_symbol 0x091; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LE_LOX10 local_symbol 0x092; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_H44 _GLOBAL_OFFSET_TABLE_ 0x093; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_M44 _GLOBAL_OFFSET_TABLE_ 0x094; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_L44 _GLOBAL_OFFSET_TABLE_ 0x095; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_HI22 extern_symbol 0x096; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_LO10 extern_symbol 0x097; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_LDX extern_symbol 0x098; v9abs-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_IE_ADD extern_symbol 0x099; v9abs-obj: ]100 101; pic-obj: Relocations [102; pic-obj: Section {{.*}} .rela.text {103; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_ 0x4104; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8105; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_HIX22 local_symbol 0x0106; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_HI22 local_symbol 0x0107; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_LO10 local_symbol 0x0108; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_ADD local_symbol 0x0109; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_LOX10 local_symbol 0x0110; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDM_CALL local_symbol 0x0111; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_LDO_ADD local_symbol 0x0112; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC22 _GLOBAL_OFFSET_TABLE_ 0x4113; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_PC10 _GLOBAL_OFFSET_TABLE_ 0x8114; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_GD_HI22 extern_symbol 0x0115; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_GD_LO10 extern_symbol 0x0116; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_GD_ADD extern_symbol 0x0117; pic-obj: 0x{{[0-9,A-F]+}} R_SPARC_TLS_GD_CALL extern_symbol 0x0118; pic-obj: ]119; pic-obj: Symbols [120; pic-obj: Symbol {121; pic-obj: Name: __tls_get_addr ({{[0-9]+}})122; pic-obj-NEXT: Value: 0x0123; pic-obj-NEXT: Size: 0124; pic-obj-NEXT: Binding: Global (0x1)125; pic-obj-NEXT: Type: None (0x0)126; pic-obj-NEXT: Other: 0127; pic-obj-NEXT: Section: Undefined (0x0)128; pic-obj-NEXT: }129; pic-obj: ]130 131