xref: /llvm-project/llvm/test/CodeGen/LoongArch/tls-models.ll (revision b53866fec80d8676705409140b8ed2147ec44fad)
1d1b526fbSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
29d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA32PIC
39d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64PIC
49d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic < %s | FileCheck %s --check-prefix=LA64LARGEPIC
59d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32NOPIC
69d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64NOPIC
79d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large < %s | FileCheck %s --check-prefix=LA64LARGENOPIC
89d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \
9eb148aecSwanglei; RUN:     | FileCheck %s --check-prefix=LA32DESC
109d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc < %s \
11eb148aecSwanglei; RUN:     | FileCheck %s --check-prefix=LA64DESC
129d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --relocation-model=pic --enable-tlsdesc \
13eb148aecSwanglei; RUN:     --code-model=large < %s | FileCheck %s --check-prefix=DESC64
14d1b526fbSwanglei
15d1b526fbSwanglei;; Check that TLS symbols are lowered correctly based on the specified
16d1b526fbSwanglei;; model. Make sure they're external to avoid them all being optimised to Local
17d1b526fbSwanglei;; Exec for the executable.
18d1b526fbSwanglei
19d1b526fbSwanglei@unspecified = external thread_local global i32
20d1b526fbSwanglei@ld = external thread_local(localdynamic) global i32
21d1b526fbSwanglei@ie = external thread_local(initialexec) global i32
22d1b526fbSwanglei@le = external thread_local(localexec) global i32
23d1b526fbSwanglei
24d1b526fbSwanglei;; No model specified (global dynamic)
25d1b526fbSwanglei
26d1b526fbSwangleidefine ptr @f1() nounwind {
27d1b526fbSwanglei; LA32PIC-LABEL: f1:
28d1b526fbSwanglei; LA32PIC:       # %bb.0: # %entry
29d1b526fbSwanglei; LA32PIC-NEXT:    addi.w $sp, $sp, -16
30d1b526fbSwanglei; LA32PIC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
31d1b526fbSwanglei; LA32PIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
32506e9368Swanglei; LA32PIC-NEXT:    addi.w $a0, $a0, %got_pc_lo12(unspecified)
33d1b526fbSwanglei; LA32PIC-NEXT:    bl %plt(__tls_get_addr)
34d1b526fbSwanglei; LA32PIC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
35d1b526fbSwanglei; LA32PIC-NEXT:    addi.w $sp, $sp, 16
36d1b526fbSwanglei; LA32PIC-NEXT:    ret
37d1b526fbSwanglei;
38d1b526fbSwanglei; LA64PIC-LABEL: f1:
39d1b526fbSwanglei; LA64PIC:       # %bb.0: # %entry
40d1b526fbSwanglei; LA64PIC-NEXT:    addi.d $sp, $sp, -16
41d1b526fbSwanglei; LA64PIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
42d1b526fbSwanglei; LA64PIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
43506e9368Swanglei; LA64PIC-NEXT:    addi.d $a0, $a0, %got_pc_lo12(unspecified)
44d1b526fbSwanglei; LA64PIC-NEXT:    bl %plt(__tls_get_addr)
45d1b526fbSwanglei; LA64PIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
46d1b526fbSwanglei; LA64PIC-NEXT:    addi.d $sp, $sp, 16
47d1b526fbSwanglei; LA64PIC-NEXT:    ret
48d1b526fbSwanglei;
4900786d3aSWANG Xuerui; LA64LARGEPIC-LABEL: f1:
5000786d3aSWANG Xuerui; LA64LARGEPIC:       # %bb.0: # %entry
5100786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, -16
5200786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
5300786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    pcalau12i $a0, %gd_pc_hi20(unspecified)
540e6f64cdShev; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %got_pc_lo12(unspecified)
550e6f64cdShev; LA64LARGEPIC-NEXT:    lu32i.d $a1, %got64_pc_lo20(unspecified)
560e6f64cdShev; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(unspecified)
570e6f64cdShev; LA64LARGEPIC-NEXT:    add.d $a0, $a1, $a0
586377ae46Swanglei; LA64LARGEPIC-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)
596377ae46Swanglei; LA64LARGEPIC-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)
606377ae46Swanglei; LA64LARGEPIC-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)
616377ae46Swanglei; LA64LARGEPIC-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)
626377ae46Swanglei; LA64LARGEPIC-NEXT:    ldx.d $ra, $ra, $a1
6300786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    jirl $ra, $ra, 0
6400786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
6500786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, 16
6600786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ret
6700786d3aSWANG Xuerui;
68d1b526fbSwanglei; LA32NOPIC-LABEL: f1:
69d1b526fbSwanglei; LA32NOPIC:       # %bb.0: # %entry
70d1b526fbSwanglei; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
71d1b526fbSwanglei; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(unspecified)
72d1b526fbSwanglei; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
73d1b526fbSwanglei; LA32NOPIC-NEXT:    ret
74d1b526fbSwanglei;
75d1b526fbSwanglei; LA64NOPIC-LABEL: f1:
76d1b526fbSwanglei; LA64NOPIC:       # %bb.0: # %entry
77d1b526fbSwanglei; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
78d1b526fbSwanglei; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(unspecified)
79d1b526fbSwanglei; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
80d1b526fbSwanglei; LA64NOPIC-NEXT:    ret
8100786d3aSWANG Xuerui;
8200786d3aSWANG Xuerui; LA64LARGENOPIC-LABEL: f1:
8300786d3aSWANG Xuerui; LA64LARGENOPIC:       # %bb.0: # %entry
8400786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(unspecified)
850e6f64cdShev; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(unspecified)
860e6f64cdShev; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(unspecified)
870e6f64cdShev; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(unspecified)
880e6f64cdShev; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
8900786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
9000786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    ret
91eb148aecSwanglei;
92eb148aecSwanglei; LA32DESC-LABEL: f1:
93eb148aecSwanglei; LA32DESC:       # %bb.0: # %entry
94eb148aecSwanglei; LA32DESC-NEXT:    addi.w $sp, $sp, -16
95eb148aecSwanglei; LA32DESC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
96eb148aecSwanglei; LA32DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
97eb148aecSwanglei; LA32DESC-NEXT:    addi.w $a0, $a0, %desc_pc_lo12(unspecified)
98eb148aecSwanglei; LA32DESC-NEXT:    ld.w $ra, $a0, %desc_ld(unspecified)
99eb148aecSwanglei; LA32DESC-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
100eb148aecSwanglei; LA32DESC-NEXT:    add.w $a0, $a0, $tp
101eb148aecSwanglei; LA32DESC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
102eb148aecSwanglei; LA32DESC-NEXT:    addi.w $sp, $sp, 16
103eb148aecSwanglei; LA32DESC-NEXT:    ret
104eb148aecSwanglei;
105eb148aecSwanglei; LA64DESC-LABEL: f1:
106eb148aecSwanglei; LA64DESC:       # %bb.0: # %entry
107eb148aecSwanglei; LA64DESC-NEXT:    addi.d $sp, $sp, -16
108eb148aecSwanglei; LA64DESC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
109eb148aecSwanglei; LA64DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
110eb148aecSwanglei; LA64DESC-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(unspecified)
111eb148aecSwanglei; LA64DESC-NEXT:    ld.d $ra, $a0, %desc_ld(unspecified)
112eb148aecSwanglei; LA64DESC-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
113eb148aecSwanglei; LA64DESC-NEXT:    add.d $a0, $a0, $tp
114eb148aecSwanglei; LA64DESC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
115eb148aecSwanglei; LA64DESC-NEXT:    addi.d $sp, $sp, 16
116eb148aecSwanglei; LA64DESC-NEXT:    ret
117eb148aecSwanglei;
118eb148aecSwanglei; DESC64-LABEL: f1:
119eb148aecSwanglei; DESC64:       # %bb.0: # %entry
120eb148aecSwanglei; DESC64-NEXT:    addi.d $sp, $sp, -16
121eb148aecSwanglei; DESC64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
122eb148aecSwanglei; DESC64-NEXT:    pcalau12i $a0, %desc_pc_hi20(unspecified)
1230e6f64cdShev; DESC64-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(unspecified)
1240e6f64cdShev; DESC64-NEXT:    lu32i.d $a1, %desc64_pc_lo20(unspecified)
1250e6f64cdShev; DESC64-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(unspecified)
1260e6f64cdShev; DESC64-NEXT:    add.d $a0, $a0, $a1
127eb148aecSwanglei; DESC64-NEXT:    ld.d $ra, $a0, %desc_ld(unspecified)
128eb148aecSwanglei; DESC64-NEXT:    jirl $ra, $ra, %desc_call(unspecified)
1290e6f64cdShev; DESC64-NEXT:    add.d $a0, $a0, $tp
130eb148aecSwanglei; DESC64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
131eb148aecSwanglei; DESC64-NEXT:    addi.d $sp, $sp, 16
132eb148aecSwanglei; DESC64-NEXT:    ret
133d1b526fbSwangleientry:
134d1b526fbSwanglei  ret ptr @unspecified
135d1b526fbSwanglei}
136d1b526fbSwanglei
137d1b526fbSwanglei;; localdynamic specified
138d1b526fbSwanglei
139d1b526fbSwangleidefine ptr @f2() nounwind {
140d1b526fbSwanglei; LA32PIC-LABEL: f2:
141d1b526fbSwanglei; LA32PIC:       # %bb.0: # %entry
142d1b526fbSwanglei; LA32PIC-NEXT:    addi.w $sp, $sp, -16
143d1b526fbSwanglei; LA32PIC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
144d1b526fbSwanglei; LA32PIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
145506e9368Swanglei; LA32PIC-NEXT:    addi.w $a0, $a0, %got_pc_lo12(ld)
146d1b526fbSwanglei; LA32PIC-NEXT:    bl %plt(__tls_get_addr)
147d1b526fbSwanglei; LA32PIC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
148d1b526fbSwanglei; LA32PIC-NEXT:    addi.w $sp, $sp, 16
149d1b526fbSwanglei; LA32PIC-NEXT:    ret
150d1b526fbSwanglei;
151d1b526fbSwanglei; LA64PIC-LABEL: f2:
152d1b526fbSwanglei; LA64PIC:       # %bb.0: # %entry
153d1b526fbSwanglei; LA64PIC-NEXT:    addi.d $sp, $sp, -16
154d1b526fbSwanglei; LA64PIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
155d1b526fbSwanglei; LA64PIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
156506e9368Swanglei; LA64PIC-NEXT:    addi.d $a0, $a0, %got_pc_lo12(ld)
157d1b526fbSwanglei; LA64PIC-NEXT:    bl %plt(__tls_get_addr)
158d1b526fbSwanglei; LA64PIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
159d1b526fbSwanglei; LA64PIC-NEXT:    addi.d $sp, $sp, 16
160d1b526fbSwanglei; LA64PIC-NEXT:    ret
161d1b526fbSwanglei;
16200786d3aSWANG Xuerui; LA64LARGEPIC-LABEL: f2:
16300786d3aSWANG Xuerui; LA64LARGEPIC:       # %bb.0: # %entry
16400786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, -16
16500786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
16600786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    pcalau12i $a0, %ld_pc_hi20(ld)
1670e6f64cdShev; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %got_pc_lo12(ld)
1680e6f64cdShev; LA64LARGEPIC-NEXT:    lu32i.d $a1, %got64_pc_lo20(ld)
1690e6f64cdShev; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %got64_pc_hi12(ld)
1700e6f64cdShev; LA64LARGEPIC-NEXT:    add.d $a0, $a1, $a0
1716377ae46Swanglei; LA64LARGEPIC-NEXT:    pcalau12i $a1, %got_pc_hi20(__tls_get_addr)
1726377ae46Swanglei; LA64LARGEPIC-NEXT:    addi.d $ra, $zero, %got_pc_lo12(__tls_get_addr)
1736377ae46Swanglei; LA64LARGEPIC-NEXT:    lu32i.d $ra, %got64_pc_lo20(__tls_get_addr)
1746377ae46Swanglei; LA64LARGEPIC-NEXT:    lu52i.d $ra, $ra, %got64_pc_hi12(__tls_get_addr)
1756377ae46Swanglei; LA64LARGEPIC-NEXT:    ldx.d $ra, $ra, $a1
17600786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    jirl $ra, $ra, 0
17700786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
17800786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    addi.d $sp, $sp, 16
17900786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ret
18000786d3aSWANG Xuerui;
181d1b526fbSwanglei; LA32NOPIC-LABEL: f2:
182d1b526fbSwanglei; LA32NOPIC:       # %bb.0: # %entry
183d1b526fbSwanglei; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
184d1b526fbSwanglei; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ld)
185d1b526fbSwanglei; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
186d1b526fbSwanglei; LA32NOPIC-NEXT:    ret
187d1b526fbSwanglei;
188d1b526fbSwanglei; LA64NOPIC-LABEL: f2:
189d1b526fbSwanglei; LA64NOPIC:       # %bb.0: # %entry
190d1b526fbSwanglei; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
191d1b526fbSwanglei; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ld)
192d1b526fbSwanglei; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
193d1b526fbSwanglei; LA64NOPIC-NEXT:    ret
19400786d3aSWANG Xuerui;
19500786d3aSWANG Xuerui; LA64LARGENOPIC-LABEL: f2:
19600786d3aSWANG Xuerui; LA64LARGENOPIC:       # %bb.0: # %entry
19700786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ld)
1980e6f64cdShev; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ld)
1990e6f64cdShev; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ld)
2000e6f64cdShev; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ld)
2010e6f64cdShev; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
20200786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
20300786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    ret
204eb148aecSwanglei;
205eb148aecSwanglei; LA32DESC-LABEL: f2:
206eb148aecSwanglei; LA32DESC:       # %bb.0: # %entry
207eb148aecSwanglei; LA32DESC-NEXT:    addi.w $sp, $sp, -16
208eb148aecSwanglei; LA32DESC-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
209eb148aecSwanglei; LA32DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
210eb148aecSwanglei; LA32DESC-NEXT:    addi.w $a0, $a0, %desc_pc_lo12(ld)
211eb148aecSwanglei; LA32DESC-NEXT:    ld.w $ra, $a0, %desc_ld(ld)
212eb148aecSwanglei; LA32DESC-NEXT:    jirl $ra, $ra, %desc_call(ld)
213eb148aecSwanglei; LA32DESC-NEXT:    add.w $a0, $a0, $tp
214eb148aecSwanglei; LA32DESC-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
215eb148aecSwanglei; LA32DESC-NEXT:    addi.w $sp, $sp, 16
216eb148aecSwanglei; LA32DESC-NEXT:    ret
217eb148aecSwanglei;
218eb148aecSwanglei; LA64DESC-LABEL: f2:
219eb148aecSwanglei; LA64DESC:       # %bb.0: # %entry
220eb148aecSwanglei; LA64DESC-NEXT:    addi.d $sp, $sp, -16
221eb148aecSwanglei; LA64DESC-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
222eb148aecSwanglei; LA64DESC-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
223eb148aecSwanglei; LA64DESC-NEXT:    addi.d $a0, $a0, %desc_pc_lo12(ld)
224eb148aecSwanglei; LA64DESC-NEXT:    ld.d $ra, $a0, %desc_ld(ld)
225eb148aecSwanglei; LA64DESC-NEXT:    jirl $ra, $ra, %desc_call(ld)
226eb148aecSwanglei; LA64DESC-NEXT:    add.d $a0, $a0, $tp
227eb148aecSwanglei; LA64DESC-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
228eb148aecSwanglei; LA64DESC-NEXT:    addi.d $sp, $sp, 16
229eb148aecSwanglei; LA64DESC-NEXT:    ret
230eb148aecSwanglei;
231eb148aecSwanglei; DESC64-LABEL: f2:
232eb148aecSwanglei; DESC64:       # %bb.0: # %entry
233eb148aecSwanglei; DESC64-NEXT:    addi.d $sp, $sp, -16
234eb148aecSwanglei; DESC64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
235eb148aecSwanglei; DESC64-NEXT:    pcalau12i $a0, %desc_pc_hi20(ld)
2360e6f64cdShev; DESC64-NEXT:    addi.d $a1, $zero, %desc_pc_lo12(ld)
2370e6f64cdShev; DESC64-NEXT:    lu32i.d $a1, %desc64_pc_lo20(ld)
2380e6f64cdShev; DESC64-NEXT:    lu52i.d $a1, $a1, %desc64_pc_hi12(ld)
2390e6f64cdShev; DESC64-NEXT:    add.d $a0, $a0, $a1
240eb148aecSwanglei; DESC64-NEXT:    ld.d $ra, $a0, %desc_ld(ld)
241eb148aecSwanglei; DESC64-NEXT:    jirl $ra, $ra, %desc_call(ld)
2420e6f64cdShev; DESC64-NEXT:    add.d $a0, $a0, $tp
243eb148aecSwanglei; DESC64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
244eb148aecSwanglei; DESC64-NEXT:    addi.d $sp, $sp, 16
245eb148aecSwanglei; DESC64-NEXT:    ret
246d1b526fbSwangleientry:
247d1b526fbSwanglei  ret ptr @ld
248d1b526fbSwanglei}
249d1b526fbSwanglei
250d1b526fbSwanglei;; initialexec specified
251d1b526fbSwanglei
252d1b526fbSwangleidefine ptr @f3() nounwind {
253d1b526fbSwanglei; LA32PIC-LABEL: f3:
254d1b526fbSwanglei; LA32PIC:       # %bb.0: # %entry
255d1b526fbSwanglei; LA32PIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
256d1b526fbSwanglei; LA32PIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
257d1b526fbSwanglei; LA32PIC-NEXT:    add.w $a0, $a0, $tp
258d1b526fbSwanglei; LA32PIC-NEXT:    ret
259d1b526fbSwanglei;
260d1b526fbSwanglei; LA64PIC-LABEL: f3:
261d1b526fbSwanglei; LA64PIC:       # %bb.0: # %entry
262d1b526fbSwanglei; LA64PIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
263d1b526fbSwanglei; LA64PIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
264d1b526fbSwanglei; LA64PIC-NEXT:    add.d $a0, $a0, $tp
265d1b526fbSwanglei; LA64PIC-NEXT:    ret
266d1b526fbSwanglei;
26700786d3aSWANG Xuerui; LA64LARGEPIC-LABEL: f3:
26800786d3aSWANG Xuerui; LA64LARGEPIC:       # %bb.0: # %entry
26900786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
2700e6f64cdShev; LA64LARGEPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
2710e6f64cdShev; LA64LARGEPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
2720e6f64cdShev; LA64LARGEPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
2730e6f64cdShev; LA64LARGEPIC-NEXT:    ldx.d $a0, $a1, $a0
27400786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    add.d $a0, $a0, $tp
27500786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ret
27600786d3aSWANG Xuerui;
277d1b526fbSwanglei; LA32NOPIC-LABEL: f3:
278d1b526fbSwanglei; LA32NOPIC:       # %bb.0: # %entry
279d1b526fbSwanglei; LA32NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
280d1b526fbSwanglei; LA32NOPIC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
281d1b526fbSwanglei; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp
282d1b526fbSwanglei; LA32NOPIC-NEXT:    ret
283d1b526fbSwanglei;
284d1b526fbSwanglei; LA64NOPIC-LABEL: f3:
285d1b526fbSwanglei; LA64NOPIC:       # %bb.0: # %entry
286d1b526fbSwanglei; LA64NOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
287d1b526fbSwanglei; LA64NOPIC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
288d1b526fbSwanglei; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp
289d1b526fbSwanglei; LA64NOPIC-NEXT:    ret
29000786d3aSWANG Xuerui;
29100786d3aSWANG Xuerui; LA64LARGENOPIC-LABEL: f3:
29200786d3aSWANG Xuerui; LA64LARGENOPIC:       # %bb.0: # %entry
29300786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
2940e6f64cdShev; LA64LARGENOPIC-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
2950e6f64cdShev; LA64LARGENOPIC-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
2960e6f64cdShev; LA64LARGENOPIC-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
2970e6f64cdShev; LA64LARGENOPIC-NEXT:    ldx.d $a0, $a1, $a0
29800786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
29900786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    ret
300eb148aecSwanglei;
301eb148aecSwanglei; LA32DESC-LABEL: f3:
302eb148aecSwanglei; LA32DESC:       # %bb.0: # %entry
303eb148aecSwanglei; LA32DESC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
304eb148aecSwanglei; LA32DESC-NEXT:    ld.w $a0, $a0, %ie_pc_lo12(ie)
305eb148aecSwanglei; LA32DESC-NEXT:    add.w $a0, $a0, $tp
306eb148aecSwanglei; LA32DESC-NEXT:    ret
307eb148aecSwanglei;
308eb148aecSwanglei; LA64DESC-LABEL: f3:
309eb148aecSwanglei; LA64DESC:       # %bb.0: # %entry
310eb148aecSwanglei; LA64DESC-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
311eb148aecSwanglei; LA64DESC-NEXT:    ld.d $a0, $a0, %ie_pc_lo12(ie)
312eb148aecSwanglei; LA64DESC-NEXT:    add.d $a0, $a0, $tp
313eb148aecSwanglei; LA64DESC-NEXT:    ret
314eb148aecSwanglei;
315eb148aecSwanglei; DESC64-LABEL: f3:
316eb148aecSwanglei; DESC64:       # %bb.0: # %entry
317eb148aecSwanglei; DESC64-NEXT:    pcalau12i $a0, %ie_pc_hi20(ie)
3180e6f64cdShev; DESC64-NEXT:    addi.d $a1, $zero, %ie_pc_lo12(ie)
3190e6f64cdShev; DESC64-NEXT:    lu32i.d $a1, %ie64_pc_lo20(ie)
3200e6f64cdShev; DESC64-NEXT:    lu52i.d $a1, $a1, %ie64_pc_hi12(ie)
3210e6f64cdShev; DESC64-NEXT:    ldx.d $a0, $a1, $a0
322eb148aecSwanglei; DESC64-NEXT:    add.d $a0, $a0, $tp
323eb148aecSwanglei; DESC64-NEXT:    ret
324d1b526fbSwangleientry:
325d1b526fbSwanglei  ret ptr @ie
326d1b526fbSwanglei}
327d1b526fbSwanglei
328d1b526fbSwanglei;; localexec specified
329d1b526fbSwanglei
330d1b526fbSwangleidefine ptr @f4() nounwind {
331d1b526fbSwanglei; LA32PIC-LABEL: f4:
332d1b526fbSwanglei; LA32PIC:       # %bb.0: # %entry
333*b53866feSZhaoQi; LA32PIC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
334*b53866feSZhaoQi; LA32PIC-NEXT:    add.w $a0, $a0, $tp, %le_add_r(le)
335*b53866feSZhaoQi; LA32PIC-NEXT:    addi.w $a0, $a0, %le_lo12_r(le)
336d1b526fbSwanglei; LA32PIC-NEXT:    ret
337d1b526fbSwanglei;
338d1b526fbSwanglei; LA64PIC-LABEL: f4:
339d1b526fbSwanglei; LA64PIC:       # %bb.0: # %entry
340*b53866feSZhaoQi; LA64PIC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
341*b53866feSZhaoQi; LA64PIC-NEXT:    add.d $a0, $a0, $tp, %le_add_r(le)
342*b53866feSZhaoQi; LA64PIC-NEXT:    addi.d $a0, $a0, %le_lo12_r(le)
343d1b526fbSwanglei; LA64PIC-NEXT:    ret
344d1b526fbSwanglei;
34500786d3aSWANG Xuerui; LA64LARGEPIC-LABEL: f4:
34600786d3aSWANG Xuerui; LA64LARGEPIC:       # %bb.0: # %entry
34700786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
34800786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
34900786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    lu32i.d $a0, %le64_lo20(le)
35000786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
35100786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    add.d $a0, $a0, $tp
35200786d3aSWANG Xuerui; LA64LARGEPIC-NEXT:    ret
35300786d3aSWANG Xuerui;
354d1b526fbSwanglei; LA32NOPIC-LABEL: f4:
355d1b526fbSwanglei; LA32NOPIC:       # %bb.0: # %entry
356*b53866feSZhaoQi; LA32NOPIC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
357*b53866feSZhaoQi; LA32NOPIC-NEXT:    add.w $a0, $a0, $tp, %le_add_r(le)
358*b53866feSZhaoQi; LA32NOPIC-NEXT:    addi.w $a0, $a0, %le_lo12_r(le)
359d1b526fbSwanglei; LA32NOPIC-NEXT:    ret
360d1b526fbSwanglei;
361d1b526fbSwanglei; LA64NOPIC-LABEL: f4:
362d1b526fbSwanglei; LA64NOPIC:       # %bb.0: # %entry
363*b53866feSZhaoQi; LA64NOPIC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
364*b53866feSZhaoQi; LA64NOPIC-NEXT:    add.d $a0, $a0, $tp, %le_add_r(le)
365*b53866feSZhaoQi; LA64NOPIC-NEXT:    addi.d $a0, $a0, %le_lo12_r(le)
366d1b526fbSwanglei; LA64NOPIC-NEXT:    ret
36700786d3aSWANG Xuerui;
36800786d3aSWANG Xuerui; LA64LARGENOPIC-LABEL: f4:
36900786d3aSWANG Xuerui; LA64LARGENOPIC:       # %bb.0: # %entry
37000786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    lu12i.w $a0, %le_hi20(le)
37100786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    ori $a0, $a0, %le_lo12(le)
37200786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    lu32i.d $a0, %le64_lo20(le)
37300786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
37400786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    add.d $a0, $a0, $tp
37500786d3aSWANG Xuerui; LA64LARGENOPIC-NEXT:    ret
376eb148aecSwanglei;
377eb148aecSwanglei; LA32DESC-LABEL: f4:
378eb148aecSwanglei; LA32DESC:       # %bb.0: # %entry
379*b53866feSZhaoQi; LA32DESC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
380*b53866feSZhaoQi; LA32DESC-NEXT:    add.w $a0, $a0, $tp, %le_add_r(le)
381*b53866feSZhaoQi; LA32DESC-NEXT:    addi.w $a0, $a0, %le_lo12_r(le)
382eb148aecSwanglei; LA32DESC-NEXT:    ret
383eb148aecSwanglei;
384eb148aecSwanglei; LA64DESC-LABEL: f4:
385eb148aecSwanglei; LA64DESC:       # %bb.0: # %entry
386*b53866feSZhaoQi; LA64DESC-NEXT:    lu12i.w $a0, %le_hi20_r(le)
387*b53866feSZhaoQi; LA64DESC-NEXT:    add.d $a0, $a0, $tp, %le_add_r(le)
388*b53866feSZhaoQi; LA64DESC-NEXT:    addi.d $a0, $a0, %le_lo12_r(le)
389eb148aecSwanglei; LA64DESC-NEXT:    ret
390eb148aecSwanglei;
391eb148aecSwanglei; DESC64-LABEL: f4:
392eb148aecSwanglei; DESC64:       # %bb.0: # %entry
393eb148aecSwanglei; DESC64-NEXT:    lu12i.w $a0, %le_hi20(le)
394eb148aecSwanglei; DESC64-NEXT:    ori $a0, $a0, %le_lo12(le)
395eb148aecSwanglei; DESC64-NEXT:    lu32i.d $a0, %le64_lo20(le)
396eb148aecSwanglei; DESC64-NEXT:    lu52i.d $a0, $a0, %le64_hi12(le)
397eb148aecSwanglei; DESC64-NEXT:    add.d $a0, $a0, $tp
398eb148aecSwanglei; DESC64-NEXT:    ret
399d1b526fbSwangleientry:
400d1b526fbSwanglei  ret ptr @le
401d1b526fbSwanglei}
402