11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2- ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --post-RA-scheduler=0 < %s \
2+ ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic -- post-RA-scheduler=0 < %s \
33; RUN: | FileCheck %s --check-prefix=MEDIUM_NO_SCH
4- ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --post-RA-scheduler=1 < %s \
4+ ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium --relocation-model=pic -- post-RA-scheduler=1 < %s \
55; RUN: | FileCheck %s --check-prefix=MEDIUM_SCH
6- ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --post-RA-scheduler=0 < %s \
6+ ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic -- post-RA-scheduler=0 < %s \
77; RUN: | FileCheck %s --check-prefix=LARGE_NO_SCH
8- ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --post-RA-scheduler=1 < %s \
8+ ; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large --relocation-model=pic -- post-RA-scheduler=1 < %s \
99; RUN: | FileCheck %s --check-prefix=LARGE_SCH
1010
1111@g = dso_local global i64 zeroinitializer , align 4
@@ -24,21 +24,25 @@ define void @foo() nounwind {
2424; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %got_pc_hi20(G)
2525; MEDIUM_NO_SCH-NEXT: ld.d $a0, $a0, %got_pc_lo12(G)
2626; MEDIUM_NO_SCH-NEXT: ld.d $zero, $a0, 0
27- ; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %pc_hi20(g )
28- ; MEDIUM_NO_SCH-NEXT: addi.d $a0, $a0, %pc_lo12(g )
27+ ; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local )
28+ ; MEDIUM_NO_SCH-NEXT: addi.d $a0, $a0, %pc_lo12(.Lg$local )
2929; MEDIUM_NO_SCH-NEXT: ld.d $zero, $a0, 0
3030; MEDIUM_NO_SCH-NEXT: ori $a0, $zero, 1
3131; MEDIUM_NO_SCH-NEXT: pcaddu18i $ra, %call36(bar)
3232; MEDIUM_NO_SCH-NEXT: jirl $ra, $ra, 0
33- ; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %ie_pc_hi20(gd)
34- ; MEDIUM_NO_SCH-NEXT: ld.d $a0, $a0, %ie_pc_lo12(gd)
35- ; MEDIUM_NO_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ld)
36- ; MEDIUM_NO_SCH-NEXT: ld.d $a1, $a1, %ie_pc_lo12(ld)
37- ; MEDIUM_NO_SCH-NEXT: pcalau12i $a2, %ie_pc_hi20(ie)
38- ; MEDIUM_NO_SCH-NEXT: ld.d $a2, $a2, %ie_pc_lo12(ie)
39- ; MEDIUM_NO_SCH-NEXT: ldx.d $zero, $a0, $tp
33+ ; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %gd_pc_hi20(gd)
34+ ; MEDIUM_NO_SCH-NEXT: addi.d $a0, $a0, %got_pc_lo12(gd)
35+ ; MEDIUM_NO_SCH-NEXT: pcaddu18i $ra, %call36(__tls_get_addr)
36+ ; MEDIUM_NO_SCH-NEXT: jirl $ra, $ra, 0
37+ ; MEDIUM_NO_SCH-NEXT: ld.d $zero, $a0, 0
38+ ; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %ld_pc_hi20(ld)
39+ ; MEDIUM_NO_SCH-NEXT: addi.d $a0, $a0, %got_pc_lo12(ld)
40+ ; MEDIUM_NO_SCH-NEXT: pcaddu18i $ra, %call36(__tls_get_addr)
41+ ; MEDIUM_NO_SCH-NEXT: jirl $ra, $ra, 0
42+ ; MEDIUM_NO_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ie)
43+ ; MEDIUM_NO_SCH-NEXT: ld.d $a1, $a1, %ie_pc_lo12(ie)
44+ ; MEDIUM_NO_SCH-NEXT: ld.d $zero, $a0, 0
4045; MEDIUM_NO_SCH-NEXT: ldx.d $zero, $a1, $tp
41- ; MEDIUM_NO_SCH-NEXT: ldx.d $zero, $a2, $tp
4246; MEDIUM_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
4347; MEDIUM_NO_SCH-NEXT: addi.d $sp, $sp, 16
4448; MEDIUM_NO_SCH-NEXT: ret
@@ -50,21 +54,25 @@ define void @foo() nounwind {
5054; MEDIUM_SCH-NEXT: pcalau12i $a0, %got_pc_hi20(G)
5155; MEDIUM_SCH-NEXT: ld.d $a0, $a0, %got_pc_lo12(G)
5256; MEDIUM_SCH-NEXT: ld.d $zero, $a0, 0
53- ; MEDIUM_SCH-NEXT: pcalau12i $a0, %pc_hi20(g )
54- ; MEDIUM_SCH-NEXT: addi.d $a0, $a0, %pc_lo12(g )
57+ ; MEDIUM_SCH-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local )
58+ ; MEDIUM_SCH-NEXT: addi.d $a0, $a0, %pc_lo12(.Lg$local )
5559; MEDIUM_SCH-NEXT: ld.d $zero, $a0, 0
5660; MEDIUM_SCH-NEXT: ori $a0, $zero, 1
5761; MEDIUM_SCH-NEXT: pcaddu18i $ra, %call36(bar)
5862; MEDIUM_SCH-NEXT: jirl $ra, $ra, 0
59- ; MEDIUM_SCH-NEXT: pcalau12i $a0, %ie_pc_hi20(gd)
60- ; MEDIUM_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ld)
61- ; MEDIUM_SCH-NEXT: pcalau12i $a2, %ie_pc_hi20(ie)
62- ; MEDIUM_SCH-NEXT: ld.d $a0, $a0, %ie_pc_lo12(gd)
63- ; MEDIUM_SCH-NEXT: ld.d $a1, $a1, %ie_pc_lo12(ld)
64- ; MEDIUM_SCH-NEXT: ld.d $a2, $a2, %ie_pc_lo12(ie)
65- ; MEDIUM_SCH-NEXT: ldx.d $zero, $a0, $tp
63+ ; MEDIUM_SCH-NEXT: pcalau12i $a0, %gd_pc_hi20(gd)
64+ ; MEDIUM_SCH-NEXT: addi.d $a0, $a0, %got_pc_lo12(gd)
65+ ; MEDIUM_SCH-NEXT: pcaddu18i $ra, %call36(__tls_get_addr)
66+ ; MEDIUM_SCH-NEXT: jirl $ra, $ra, 0
67+ ; MEDIUM_SCH-NEXT: ld.d $zero, $a0, 0
68+ ; MEDIUM_SCH-NEXT: pcalau12i $a0, %ld_pc_hi20(ld)
69+ ; MEDIUM_SCH-NEXT: addi.d $a0, $a0, %got_pc_lo12(ld)
70+ ; MEDIUM_SCH-NEXT: pcaddu18i $ra, %call36(__tls_get_addr)
71+ ; MEDIUM_SCH-NEXT: jirl $ra, $ra, 0
72+ ; MEDIUM_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ie)
73+ ; MEDIUM_SCH-NEXT: ld.d $zero, $a0, 0
74+ ; MEDIUM_SCH-NEXT: ld.d $a1, $a1, %ie_pc_lo12(ie)
6675; MEDIUM_SCH-NEXT: ldx.d $zero, $a1, $tp
67- ; MEDIUM_SCH-NEXT: ldx.d $zero, $a2, $tp
6876; MEDIUM_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
6977; MEDIUM_SCH-NEXT: addi.d $sp, $sp, 16
7078; MEDIUM_SCH-NEXT: ret
@@ -79,10 +87,10 @@ define void @foo() nounwind {
7987; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(G)
8088; LARGE_NO_SCH-NEXT: ldx.d $a0, $t8, $a0
8189; LARGE_NO_SCH-NEXT: ld.d $zero, $a0, 0
82- ; LARGE_NO_SCH-NEXT: pcalau12i $a0, %pc_hi20(g )
83- ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(g )
84- ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %pc64_lo20(g )
85- ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(g )
90+ ; LARGE_NO_SCH-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local )
91+ ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(.Lg$local )
92+ ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %pc64_lo20(.Lg$local )
93+ ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(.Lg$local )
8694; LARGE_NO_SCH-NEXT: add.d $a0, $t8, $a0
8795; LARGE_NO_SCH-NEXT: ld.d $zero, $a0, 0
8896; LARGE_NO_SCH-NEXT: ori $a0, $zero, 1
@@ -92,24 +100,36 @@ define void @foo() nounwind {
92100; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(bar)
93101; LARGE_NO_SCH-NEXT: ldx.d $ra, $t8, $ra
94102; LARGE_NO_SCH-NEXT: jirl $ra, $ra, 0
95- ; LARGE_NO_SCH-NEXT: pcalau12i $a0, %ie_pc_hi20(gd)
96- ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(gd)
97- ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(gd)
98- ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(gd)
99- ; LARGE_NO_SCH-NEXT: ldx.d $a0, $t8, $a0
100- ; LARGE_NO_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ld)
101- ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ld)
102- ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ld)
103- ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(ld)
104- ; LARGE_NO_SCH-NEXT: ldx.d $a1, $t8, $a1
105- ; LARGE_NO_SCH-NEXT: pcalau12i $a2, %ie_pc_hi20(ie)
103+ ; LARGE_NO_SCH-NEXT: pcalau12i $a0, %gd_pc_hi20(gd)
104+ ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %got_pc_lo12(gd)
105+ ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %got64_pc_lo20(gd)
106+ ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(gd)
107+ ; LARGE_NO_SCH-NEXT: add.d $a0, $t8, $a0
108+ ; LARGE_NO_SCH-NEXT: pcalau12i $ra, %pc_hi20(__tls_get_addr)
109+ ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(__tls_get_addr)
110+ ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %pc64_lo20(__tls_get_addr)
111+ ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(__tls_get_addr)
112+ ; LARGE_NO_SCH-NEXT: add.d $ra, $t8, $ra
113+ ; LARGE_NO_SCH-NEXT: jirl $ra, $ra, 0
114+ ; LARGE_NO_SCH-NEXT: ld.d $zero, $a0, 0
115+ ; LARGE_NO_SCH-NEXT: pcalau12i $a0, %ld_pc_hi20(ld)
116+ ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %got_pc_lo12(ld)
117+ ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %got64_pc_lo20(ld)
118+ ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(ld)
119+ ; LARGE_NO_SCH-NEXT: add.d $a0, $t8, $a0
120+ ; LARGE_NO_SCH-NEXT: pcalau12i $ra, %pc_hi20(__tls_get_addr)
121+ ; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(__tls_get_addr)
122+ ; LARGE_NO_SCH-NEXT: lu32i.d $t8, %pc64_lo20(__tls_get_addr)
123+ ; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(__tls_get_addr)
124+ ; LARGE_NO_SCH-NEXT: add.d $ra, $t8, $ra
125+ ; LARGE_NO_SCH-NEXT: jirl $ra, $ra, 0
126+ ; LARGE_NO_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ie)
106127; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ie)
107128; LARGE_NO_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ie)
108129; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(ie)
109- ; LARGE_NO_SCH-NEXT: ldx.d $a2 , $t8, $a2
110- ; LARGE_NO_SCH-NEXT: ldx .d $zero, $a0, $tp
130+ ; LARGE_NO_SCH-NEXT: ldx.d $a1 , $t8, $a1
131+ ; LARGE_NO_SCH-NEXT: ld .d $zero, $a0, 0
111132; LARGE_NO_SCH-NEXT: ldx.d $zero, $a1, $tp
112- ; LARGE_NO_SCH-NEXT: ldx.d $zero, $a2, $tp
113133; LARGE_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
114134; LARGE_NO_SCH-NEXT: addi.d $sp, $sp, 16
115135; LARGE_NO_SCH-NEXT: ret
@@ -124,10 +144,10 @@ define void @foo() nounwind {
124144; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(G)
125145; LARGE_SCH-NEXT: ldx.d $a0, $t8, $a0
126146; LARGE_SCH-NEXT: ld.d $zero, $a0, 0
127- ; LARGE_SCH-NEXT: pcalau12i $a0, %pc_hi20(g )
128- ; LARGE_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(g )
129- ; LARGE_SCH-NEXT: lu32i.d $t8, %pc64_lo20(g )
130- ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(g )
147+ ; LARGE_SCH-NEXT: pcalau12i $a0, %pc_hi20(.Lg$local )
148+ ; LARGE_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(.Lg$local )
149+ ; LARGE_SCH-NEXT: lu32i.d $t8, %pc64_lo20(.Lg$local )
150+ ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(.Lg$local )
131151; LARGE_SCH-NEXT: add.d $a0, $t8, $a0
132152; LARGE_SCH-NEXT: ld.d $zero, $a0, 0
133153; LARGE_SCH-NEXT: ori $a0, $zero, 1
@@ -137,24 +157,36 @@ define void @foo() nounwind {
137157; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(bar)
138158; LARGE_SCH-NEXT: ldx.d $ra, $t8, $ra
139159; LARGE_SCH-NEXT: jirl $ra, $ra, 0
140- ; LARGE_SCH-NEXT: pcalau12i $a0, %ie_pc_hi20(gd)
141- ; LARGE_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(gd)
142- ; LARGE_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(gd)
143- ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(gd)
144- ; LARGE_SCH-NEXT: ldx.d $a0, $t8, $a0
145- ; LARGE_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ld)
146- ; LARGE_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ld)
147- ; LARGE_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ld)
148- ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(ld)
149- ; LARGE_SCH-NEXT: ldx.d $a1, $t8, $a1
150- ; LARGE_SCH-NEXT: pcalau12i $a2, %ie_pc_hi20(ie)
160+ ; LARGE_SCH-NEXT: pcalau12i $a0, %gd_pc_hi20(gd)
161+ ; LARGE_SCH-NEXT: addi.d $t8, $zero, %got_pc_lo12(gd)
162+ ; LARGE_SCH-NEXT: lu32i.d $t8, %got64_pc_lo20(gd)
163+ ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(gd)
164+ ; LARGE_SCH-NEXT: add.d $a0, $t8, $a0
165+ ; LARGE_SCH-NEXT: pcalau12i $ra, %pc_hi20(__tls_get_addr)
166+ ; LARGE_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(__tls_get_addr)
167+ ; LARGE_SCH-NEXT: lu32i.d $t8, %pc64_lo20(__tls_get_addr)
168+ ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(__tls_get_addr)
169+ ; LARGE_SCH-NEXT: add.d $ra, $t8, $ra
170+ ; LARGE_SCH-NEXT: jirl $ra, $ra, 0
171+ ; LARGE_SCH-NEXT: ld.d $zero, $a0, 0
172+ ; LARGE_SCH-NEXT: pcalau12i $a0, %ld_pc_hi20(ld)
173+ ; LARGE_SCH-NEXT: addi.d $t8, $zero, %got_pc_lo12(ld)
174+ ; LARGE_SCH-NEXT: lu32i.d $t8, %got64_pc_lo20(ld)
175+ ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(ld)
176+ ; LARGE_SCH-NEXT: add.d $a0, $t8, $a0
177+ ; LARGE_SCH-NEXT: pcalau12i $ra, %pc_hi20(__tls_get_addr)
178+ ; LARGE_SCH-NEXT: addi.d $t8, $zero, %pc_lo12(__tls_get_addr)
179+ ; LARGE_SCH-NEXT: lu32i.d $t8, %pc64_lo20(__tls_get_addr)
180+ ; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %pc64_hi12(__tls_get_addr)
181+ ; LARGE_SCH-NEXT: add.d $ra, $t8, $ra
182+ ; LARGE_SCH-NEXT: jirl $ra, $ra, 0
183+ ; LARGE_SCH-NEXT: pcalau12i $a1, %ie_pc_hi20(ie)
151184; LARGE_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ie)
152185; LARGE_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ie)
153186; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %ie64_pc_hi12(ie)
154- ; LARGE_SCH-NEXT: ldx.d $a2 , $t8, $a2
155- ; LARGE_SCH-NEXT: ldx .d $zero, $a0, $tp
187+ ; LARGE_SCH-NEXT: ldx.d $a1 , $t8, $a1
188+ ; LARGE_SCH-NEXT: ld .d $zero, $a0, 0
156189; LARGE_SCH-NEXT: ldx.d $zero, $a1, $tp
157- ; LARGE_SCH-NEXT: ldx.d $zero, $a2, $tp
158190; LARGE_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
159191; LARGE_SCH-NEXT: addi.d $sp, $sp, 16
160192; LARGE_SCH-NEXT: ret
0 commit comments