xref: /llvm-project/llvm/test/CodeGen/RISCV/emutls.ll (revision eabaee0c59110d0e11b33a69db54ccda526b35fd)
1f5e63f8fSVitaly Cheptsov; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2f5e63f8fSVitaly Cheptsov; RUN: llc -mtriple=riscv32 -emulated-tls -relocation-model=pic < %s \
3f5e63f8fSVitaly Cheptsov; RUN:     | FileCheck -check-prefix=RV32 %s
4f5e63f8fSVitaly Cheptsov; RUN: llc -mtriple=riscv64 -emulated-tls -relocation-model=pic < %s \
5f5e63f8fSVitaly Cheptsov; RUN:     | FileCheck -check-prefix=RV64 %s
6f5e63f8fSVitaly Cheptsov
7f5e63f8fSVitaly Cheptsov@external_x = external thread_local global i32, align 8
8f5e63f8fSVitaly Cheptsov@y = thread_local global i8 7, align 2
9f5e63f8fSVitaly Cheptsov@internal_z = internal thread_local global i64 9, align 16
10f5e63f8fSVitaly Cheptsov
11f5e63f8fSVitaly Cheptsovdefine ptr @get_external_x() nounwind {
12f5e63f8fSVitaly Cheptsov; RV32-LABEL: get_external_x:
13f5e63f8fSVitaly Cheptsov; RV32:       # %bb.0: # %entry
14f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, -16
15f5e63f8fSVitaly Cheptsov; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
16f5e63f8fSVitaly Cheptsov; RV32-NEXT:  .Lpcrel_hi0:
17f5e63f8fSVitaly Cheptsov; RV32-NEXT:    auipc a0, %got_pcrel_hi(__emutls_v.external_x)
18f5e63f8fSVitaly Cheptsov; RV32-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi0)(a0)
19*eabaee0cSFangrui Song; RV32-NEXT:    call __emutls_get_address
20f5e63f8fSVitaly Cheptsov; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
21f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, 16
22f5e63f8fSVitaly Cheptsov; RV32-NEXT:    ret
23f5e63f8fSVitaly Cheptsov;
24f5e63f8fSVitaly Cheptsov; RV64-LABEL: get_external_x:
25f5e63f8fSVitaly Cheptsov; RV64:       # %bb.0: # %entry
26f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, -16
27f5e63f8fSVitaly Cheptsov; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
28f5e63f8fSVitaly Cheptsov; RV64-NEXT:  .Lpcrel_hi0:
29f5e63f8fSVitaly Cheptsov; RV64-NEXT:    auipc a0, %got_pcrel_hi(__emutls_v.external_x)
30f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi0)(a0)
31*eabaee0cSFangrui Song; RV64-NEXT:    call __emutls_get_address
32f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
33f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, 16
34f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ret
35f5e63f8fSVitaly Cheptsoventry:
36f5e63f8fSVitaly Cheptsov  ret ptr @external_x
37f5e63f8fSVitaly Cheptsov}
38f5e63f8fSVitaly Cheptsov
39f5e63f8fSVitaly Cheptsovdefine ptr @get_y() nounwind {
40f5e63f8fSVitaly Cheptsov; RV32-LABEL: get_y:
41f5e63f8fSVitaly Cheptsov; RV32:       # %bb.0: # %entry
42f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, -16
43f5e63f8fSVitaly Cheptsov; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
44f5e63f8fSVitaly Cheptsov; RV32-NEXT:  .Lpcrel_hi1:
45f5e63f8fSVitaly Cheptsov; RV32-NEXT:    auipc a0, %got_pcrel_hi(__emutls_v.y)
46f5e63f8fSVitaly Cheptsov; RV32-NEXT:    lw a0, %pcrel_lo(.Lpcrel_hi1)(a0)
47*eabaee0cSFangrui Song; RV32-NEXT:    call __emutls_get_address
48f5e63f8fSVitaly Cheptsov; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
49f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, 16
50f5e63f8fSVitaly Cheptsov; RV32-NEXT:    ret
51f5e63f8fSVitaly Cheptsov;
52f5e63f8fSVitaly Cheptsov; RV64-LABEL: get_y:
53f5e63f8fSVitaly Cheptsov; RV64:       # %bb.0: # %entry
54f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, -16
55f5e63f8fSVitaly Cheptsov; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
56f5e63f8fSVitaly Cheptsov; RV64-NEXT:  .Lpcrel_hi1:
57f5e63f8fSVitaly Cheptsov; RV64-NEXT:    auipc a0, %got_pcrel_hi(__emutls_v.y)
58f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ld a0, %pcrel_lo(.Lpcrel_hi1)(a0)
59*eabaee0cSFangrui Song; RV64-NEXT:    call __emutls_get_address
60f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
61f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, 16
62f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ret
63f5e63f8fSVitaly Cheptsoventry:
64f5e63f8fSVitaly Cheptsov  ret ptr @y
65f5e63f8fSVitaly Cheptsov}
66f5e63f8fSVitaly Cheptsov
67f5e63f8fSVitaly Cheptsovdefine ptr @get_internal_z() nounwind {
68f5e63f8fSVitaly Cheptsov; RV32-LABEL: get_internal_z:
69f5e63f8fSVitaly Cheptsov; RV32:       # %bb.0: # %entry
70f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, -16
71f5e63f8fSVitaly Cheptsov; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
72f5e63f8fSVitaly Cheptsov; RV32-NEXT:  .Lpcrel_hi2:
73f5e63f8fSVitaly Cheptsov; RV32-NEXT:    auipc a0, %pcrel_hi(__emutls_v.internal_z)
74f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi2)
75*eabaee0cSFangrui Song; RV32-NEXT:    call __emutls_get_address
76f5e63f8fSVitaly Cheptsov; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
77f5e63f8fSVitaly Cheptsov; RV32-NEXT:    addi sp, sp, 16
78f5e63f8fSVitaly Cheptsov; RV32-NEXT:    ret
79f5e63f8fSVitaly Cheptsov;
80f5e63f8fSVitaly Cheptsov; RV64-LABEL: get_internal_z:
81f5e63f8fSVitaly Cheptsov; RV64:       # %bb.0: # %entry
82f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, -16
83f5e63f8fSVitaly Cheptsov; RV64-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill
84f5e63f8fSVitaly Cheptsov; RV64-NEXT:  .Lpcrel_hi2:
85f5e63f8fSVitaly Cheptsov; RV64-NEXT:    auipc a0, %pcrel_hi(__emutls_v.internal_z)
86f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi a0, a0, %pcrel_lo(.Lpcrel_hi2)
87*eabaee0cSFangrui Song; RV64-NEXT:    call __emutls_get_address
88f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload
89f5e63f8fSVitaly Cheptsov; RV64-NEXT:    addi sp, sp, 16
90f5e63f8fSVitaly Cheptsov; RV64-NEXT:    ret
91f5e63f8fSVitaly Cheptsoventry:
92f5e63f8fSVitaly Cheptsov  ret ptr @internal_z
93f5e63f8fSVitaly Cheptsov}
94f5e63f8fSVitaly Cheptsov
95f5e63f8fSVitaly Cheptsov; UTC_ARGS: --disable
96f5e63f8fSVitaly Cheptsov
97f5e63f8fSVitaly Cheptsov; RV32:        .data
98f5e63f8fSVitaly Cheptsov; RV32:        .globl __emutls_v.y
99f5e63f8fSVitaly Cheptsov; RV32:        .p2align 2
100f5e63f8fSVitaly Cheptsov; RV32-LABEL:  __emutls_v.y:
101f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 1
102f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 2
103f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 0
104f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word __emutls_t.y
105f5e63f8fSVitaly Cheptsov; RV32:        .section .rodata,
106f5e63f8fSVitaly Cheptsov; RV32-LABEL:  __emutls_t.y:
107f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .byte 7
108f5e63f8fSVitaly Cheptsov; RV32:        .data
109f5e63f8fSVitaly Cheptsov; RV32:        .p2align 2
110f5e63f8fSVitaly Cheptsov; RV32-LABEL:  __emutls_v.internal_z:
111f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 8
112f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 16
113f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word 0
114f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .word __emutls_t.internal_z
115f5e63f8fSVitaly Cheptsov; RV32:        .section .rodata,
116f5e63f8fSVitaly Cheptsov; RV32-LABEL:  __emutls_t.internal_z:
117f5e63f8fSVitaly Cheptsov; RV32-NEXT:     .quad 9
118f5e63f8fSVitaly Cheptsov
119f5e63f8fSVitaly Cheptsov; RV64:        .data
120f5e63f8fSVitaly Cheptsov; RV64:        .globl __emutls_v.y
121f5e63f8fSVitaly Cheptsov; RV64:        .p2align 3
122f5e63f8fSVitaly Cheptsov; RV64-LABEL:  __emutls_v.y:
123f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 1
124f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 2
125f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 0
126f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad __emutls_t.y
127f5e63f8fSVitaly Cheptsov; RV64:        .section .rodata,
128f5e63f8fSVitaly Cheptsov; RV64-LABEL:  __emutls_t.y:
129f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .byte 7
130f5e63f8fSVitaly Cheptsov; RV64:        .data
131f5e63f8fSVitaly Cheptsov; RV64:        .p2align 3
132f5e63f8fSVitaly Cheptsov; RV64-LABEL:  __emutls_v.internal_z:
133f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 8
134f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 16
135f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 0
136f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad __emutls_t.internal_z
137f5e63f8fSVitaly Cheptsov; RV64:        .section .rodata,
138f5e63f8fSVitaly Cheptsov; RV64-LABEL:  __emutls_t.internal_z:
139f5e63f8fSVitaly Cheptsov; RV64-NEXT:     .quad 9
140