1
1
; 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 \
3
3
; 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 \
5
5
; 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 \
7
7
; 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 \
9
9
; RUN: | FileCheck %s --check-prefix=LARGE_SCH
10
10
11
11
@g = dso_local global i64 zeroinitializer , align 4
@@ -24,21 +24,25 @@ define void @foo() nounwind {
24
24
; MEDIUM_NO_SCH-NEXT: pcalau12i $a0, %got_pc_hi20(G)
25
25
; MEDIUM_NO_SCH-NEXT: ld.d $a0, $a0, %got_pc_lo12(G)
26
26
; 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 )
29
29
; MEDIUM_NO_SCH-NEXT: ld.d $zero, $a0, 0
30
30
; MEDIUM_NO_SCH-NEXT: ori $a0, $zero, 1
31
31
; MEDIUM_NO_SCH-NEXT: pcaddu18i $ra, %call36(bar)
32
32
; 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
40
45
; MEDIUM_NO_SCH-NEXT: ldx.d $zero, $a1, $tp
41
- ; MEDIUM_NO_SCH-NEXT: ldx.d $zero, $a2, $tp
42
46
; MEDIUM_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
43
47
; MEDIUM_NO_SCH-NEXT: addi.d $sp, $sp, 16
44
48
; MEDIUM_NO_SCH-NEXT: ret
@@ -50,21 +54,25 @@ define void @foo() nounwind {
50
54
; MEDIUM_SCH-NEXT: pcalau12i $a0, %got_pc_hi20(G)
51
55
; MEDIUM_SCH-NEXT: ld.d $a0, $a0, %got_pc_lo12(G)
52
56
; 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 )
55
59
; MEDIUM_SCH-NEXT: ld.d $zero, $a0, 0
56
60
; MEDIUM_SCH-NEXT: ori $a0, $zero, 1
57
61
; MEDIUM_SCH-NEXT: pcaddu18i $ra, %call36(bar)
58
62
; 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)
66
75
; MEDIUM_SCH-NEXT: ldx.d $zero, $a1, $tp
67
- ; MEDIUM_SCH-NEXT: ldx.d $zero, $a2, $tp
68
76
; MEDIUM_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
69
77
; MEDIUM_SCH-NEXT: addi.d $sp, $sp, 16
70
78
; MEDIUM_SCH-NEXT: ret
@@ -79,10 +87,10 @@ define void @foo() nounwind {
79
87
; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(G)
80
88
; LARGE_NO_SCH-NEXT: ldx.d $a0, $t8, $a0
81
89
; 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 )
86
94
; LARGE_NO_SCH-NEXT: add.d $a0, $t8, $a0
87
95
; LARGE_NO_SCH-NEXT: ld.d $zero, $a0, 0
88
96
; LARGE_NO_SCH-NEXT: ori $a0, $zero, 1
@@ -92,24 +100,36 @@ define void @foo() nounwind {
92
100
; LARGE_NO_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(bar)
93
101
; LARGE_NO_SCH-NEXT: ldx.d $ra, $t8, $ra
94
102
; 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)
106
127
; LARGE_NO_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ie)
107
128
; LARGE_NO_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ie)
108
129
; 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
111
132
; LARGE_NO_SCH-NEXT: ldx.d $zero, $a1, $tp
112
- ; LARGE_NO_SCH-NEXT: ldx.d $zero, $a2, $tp
113
133
; LARGE_NO_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
114
134
; LARGE_NO_SCH-NEXT: addi.d $sp, $sp, 16
115
135
; LARGE_NO_SCH-NEXT: ret
@@ -124,10 +144,10 @@ define void @foo() nounwind {
124
144
; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(G)
125
145
; LARGE_SCH-NEXT: ldx.d $a0, $t8, $a0
126
146
; 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 )
131
151
; LARGE_SCH-NEXT: add.d $a0, $t8, $a0
132
152
; LARGE_SCH-NEXT: ld.d $zero, $a0, 0
133
153
; LARGE_SCH-NEXT: ori $a0, $zero, 1
@@ -137,24 +157,36 @@ define void @foo() nounwind {
137
157
; LARGE_SCH-NEXT: lu52i.d $t8, $t8, %got64_pc_hi12(bar)
138
158
; LARGE_SCH-NEXT: ldx.d $ra, $t8, $ra
139
159
; 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)
151
184
; LARGE_SCH-NEXT: addi.d $t8, $zero, %ie_pc_lo12(ie)
152
185
; LARGE_SCH-NEXT: lu32i.d $t8, %ie64_pc_lo20(ie)
153
186
; 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
156
189
; LARGE_SCH-NEXT: ldx.d $zero, $a1, $tp
157
- ; LARGE_SCH-NEXT: ldx.d $zero, $a2, $tp
158
190
; LARGE_SCH-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload
159
191
; LARGE_SCH-NEXT: addi.d $sp, $sp, 16
160
192
; LARGE_SCH-NEXT: ret
0 commit comments