Skip to content

Commit 6dbd0ea

Browse files
committed
[test] Split some tests which test both static and pic relocation models
TargetMachine::shouldAssumeDSOLocal currently implies dso_local for Static. Split some tests so that these `external dso_local global` will align with the Clang behavior.
1 parent ab58e4c commit 6dbd0ea

11 files changed

+431
-144
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -O0 -run-pass=legalizer --relocation-model=pic %s -o - | FileCheck %s --check-prefix=PIC
3+
4+
--- |
5+
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
6+
target triple = "aarch64--"
7+
@var = external global i8
8+
define i8* @test_global() { ret i8* undef }
9+
...
10+
---
11+
name: test_global
12+
registers:
13+
- { id: 0, class: _ }
14+
body: |
15+
bb.0:
16+
17+
; We don't want to lower to G_ADD_LOW when we need a GOT access, or when the code
18+
; model isn't 'Small'.
19+
20+
; CHECK-LABEL: name: test_global
21+
; CHECK: [[ADRP:%[0-9]+]]:gpr64(p0) = ADRP target-flags(aarch64-page) @var
22+
; CHECK: [[ADD_LOW:%[0-9]+]]:_(p0) = G_ADD_LOW [[ADRP]](p0), target-flags(aarch64-pageoff, aarch64-nc) @var
23+
; CHECK: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[ADD_LOW]](p0)
24+
; CHECK: $x0 = COPY [[PTRTOINT]](s64)
25+
; CMLARGE-LABEL: name: test_global
26+
; CMLARGE: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var
27+
; CMLARGE: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[GV]](p0)
28+
; CMLARGE: $x0 = COPY [[PTRTOINT]](s64)
29+
; PIC-LABEL: name: test_global
30+
; PIC: [[GV:%[0-9]+]]:_(p0) = G_GLOBAL_VALUE @var
31+
; PIC: [[PTRTOINT:%[0-9]+]]:_(s64) = G_PTRTOINT [[GV]](p0)
32+
; PIC: $x0 = COPY [[PTRTOINT]](s64)
33+
%0(p0) = G_GLOBAL_VALUE @var
34+
%1:_(s64) = G_PTRTOINT %0
35+
$x0 = COPY %1
36+
...

llvm/test/CodeGen/AArch64/GlobalISel/legalize-global.mir

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
22
# RUN: llc -O0 -run-pass=legalizer %s -o - | FileCheck %s
3-
# RUN: llc -O0 -run-pass=legalizer --relocation-model=pic %s -o - | FileCheck %s --check-prefix=PIC
43
# RUN: llc -O0 -run-pass=legalizer --code-model=large %s -o - | FileCheck %s --check-prefix=CMLARGE
54

65
--- |
76
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
87
target triple = "aarch64--"
9-
@var = external global i8
8+
@var = external dso_local global i8
109
define i8* @test_global() { ret i8* undef }
1110
...
1211
---
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,307 @@
1+
# RUN: llc -O0 -mtriple=aarch64 -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,LINUX-DEFAULT
2+
3+
--- |
4+
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
5+
6+
define void @frame_index() {
7+
%ptr0 = alloca i64
8+
ret void
9+
}
10+
11+
define i8* @ptr_mask(i8* %in) { ret i8* undef }
12+
13+
@var_local = global i8 0
14+
define i8* @global_local() { ret i8* undef }
15+
16+
@var_got = external dso_local global i8
17+
define i8* @global_got() { ret i8* undef }
18+
19+
define void @icmp() { ret void }
20+
define void @fcmp() { ret void }
21+
22+
define void @phi() { ret void }
23+
24+
define void @select() { ret void }
25+
...
26+
27+
---
28+
# CHECK-LABEL: name: frame_index
29+
name: frame_index
30+
legalized: true
31+
regBankSelected: true
32+
33+
# CHECK: registers:
34+
# CHECK-NEXT: - { id: 0, class: gpr64sp, preferred-register: '' }
35+
registers:
36+
- { id: 0, class: gpr }
37+
38+
stack:
39+
- { id: 0, name: ptr0, offset: 0, size: 8, alignment: 8 }
40+
41+
# CHECK: body:
42+
# CHECK: %0:gpr64sp = ADDXri %stack.0.ptr0, 0, 0
43+
body: |
44+
bb.0:
45+
%0(p0) = G_FRAME_INDEX %stack.0.ptr0
46+
$x0 = COPY %0(p0)
47+
...
48+
49+
---
50+
51+
---
52+
# CHECK-LABEL: name: ptr_mask
53+
name: ptr_mask
54+
legalized: true
55+
regBankSelected: true
56+
57+
# CHECK: body:
58+
# CHECK: %2:gpr64sp = ANDXri %0, 8060
59+
body: |
60+
bb.0:
61+
liveins: $x0
62+
%0:gpr(p0) = COPY $x0
63+
%const:gpr(s64) = G_CONSTANT i64 -8
64+
%1:gpr(p0) = G_PTRMASK %0, %const
65+
$x0 = COPY %1(p0)
66+
...
67+
68+
---
69+
# Global defined in the same linkage unit so no GOT is needed
70+
# CHECK-LABEL: name: global_local
71+
name: global_local
72+
legalized: true
73+
regBankSelected: true
74+
registers:
75+
- { id: 0, class: gpr }
76+
77+
# CHECK: body:
78+
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
79+
body: |
80+
bb.0:
81+
%0(p0) = G_GLOBAL_VALUE @var_local
82+
$x0 = COPY %0(p0)
83+
...
84+
85+
---
86+
# CHECK-LABEL: name: global_got
87+
name: global_got
88+
legalized: true
89+
regBankSelected: true
90+
registers:
91+
- { id: 0, class: gpr }
92+
93+
# CHECK: body:
94+
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
95+
body: |
96+
bb.0:
97+
%0(p0) = G_GLOBAL_VALUE @var_got
98+
$x0 = COPY %0(p0)
99+
...
100+
101+
---
102+
# CHECK-LABEL: name: icmp
103+
name: icmp
104+
legalized: true
105+
regBankSelected: true
106+
107+
# CHECK: registers:
108+
# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '' }
109+
# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' }
110+
# CHECK-NEXT: - { id: 2, class: gpr64, preferred-register: '' }
111+
# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' }
112+
# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '' }
113+
# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '' }
114+
registers:
115+
- { id: 0, class: gpr }
116+
- { id: 1, class: gpr }
117+
- { id: 2, class: gpr }
118+
- { id: 3, class: gpr }
119+
- { id: 4, class: gpr }
120+
- { id: 5, class: gpr }
121+
- { id: 6, class: gpr }
122+
- { id: 7, class: gpr }
123+
- { id: 8, class: gpr }
124+
- { id: 9, class: gpr }
125+
- { id: 10, class: gpr }
126+
- { id: 11, class: gpr }
127+
128+
# CHECK: body:
129+
# CHECK: SUBSWrr %0, %0, implicit-def $nzcv
130+
# CHECK: %1:gpr32 = CSINCWr $wzr, $wzr, 1, implicit $nzcv
131+
132+
# CHECK: SUBSXrr %2, %2, implicit-def $nzcv
133+
# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 3, implicit $nzcv
134+
135+
# CHECK: SUBSXrr %4, %4, implicit-def $nzcv
136+
# CHECK: %5:gpr32 = CSINCWr $wzr, $wzr, 0, implicit $nzcv
137+
138+
body: |
139+
bb.0:
140+
liveins: $w0, $x0
141+
142+
%0(s32) = COPY $w0
143+
%1(s32) = G_ICMP intpred(eq), %0, %0
144+
%6(s1) = G_TRUNC %1(s32)
145+
%9(s32) = G_ANYEXT %6
146+
$w0 = COPY %9(s32)
147+
148+
%2(s64) = COPY $x0
149+
%3(s32) = G_ICMP intpred(uge), %2, %2
150+
%7(s1) = G_TRUNC %3(s32)
151+
%10(s32) = G_ANYEXT %7
152+
$w0 = COPY %10(s32)
153+
154+
%4(p0) = COPY $x0
155+
%5(s32) = G_ICMP intpred(ne), %4, %4
156+
%8(s1) = G_TRUNC %5(s32)
157+
%11(s32) = G_ANYEXT %8
158+
$w0 = COPY %11(s32)
159+
...
160+
161+
---
162+
# CHECK-LABEL: name: fcmp
163+
name: fcmp
164+
legalized: true
165+
regBankSelected: true
166+
167+
# CHECK: registers:
168+
# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' }
169+
# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' }
170+
# CHECK-NEXT: - { id: 2, class: fpr64, preferred-register: '' }
171+
# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' }
172+
# CHECK-NEXT: - { id: 4, class: gpr32, preferred-register: '' }
173+
# CHECK-NEXT: - { id: 5, class: gpr32, preferred-register: '' }
174+
registers:
175+
- { id: 0, class: fpr }
176+
- { id: 1, class: gpr }
177+
- { id: 2, class: fpr }
178+
- { id: 3, class: gpr }
179+
- { id: 4, class: gpr }
180+
- { id: 5, class: gpr }
181+
- { id: 6, class: gpr }
182+
- { id: 7, class: gpr }
183+
184+
# CHECK: body:
185+
# CHECK: FCMPSrr %0, %0, implicit-def $nzcv
186+
# CHECK: [[TST_MI:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 5, implicit $nzcv
187+
# CHECK: [[TST_GT:%[0-9]+]]:gpr32 = CSINCWr $wzr, $wzr, 13, implicit $nzcv
188+
# CHECK: %1:gpr32 = ORRWrr [[TST_MI]], [[TST_GT]]
189+
190+
# CHECK: FCMPDrr %2, %2, implicit-def $nzcv
191+
# CHECK: %3:gpr32 = CSINCWr $wzr, $wzr, 4, implicit $nzcv
192+
193+
body: |
194+
bb.0:
195+
liveins: $w0, $x0
196+
197+
%0(s32) = COPY $s0
198+
%1(s32) = G_FCMP floatpred(one), %0, %0
199+
%4(s1) = G_TRUNC %1(s32)
200+
%6(s32) = G_ANYEXT %4
201+
$w0 = COPY %6(s32)
202+
203+
%2(s64) = COPY $d0
204+
%3(s32) = G_FCMP floatpred(uge), %2, %2
205+
%5(s1) = G_TRUNC %3(s32)
206+
%7(s32) = G_ANYEXT %5
207+
$w0 = COPY %7(s32)
208+
209+
...
210+
211+
---
212+
# CHECK-LABEL: name: phi
213+
name: phi
214+
legalized: true
215+
regBankSelected: true
216+
tracksRegLiveness: true
217+
218+
# CHECK: registers:
219+
# CHECK-NEXT: - { id: 0, class: fpr32, preferred-register: '' }
220+
# CHECK-NEXT: - { id: 1, class: gpr, preferred-register: '' }
221+
# CHECK-NEXT: - { id: 2, class: fpr32, preferred-register: '' }
222+
# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' }
223+
registers:
224+
- { id: 0, class: fpr }
225+
- { id: 1, class: gpr }
226+
- { id: 2, class: fpr }
227+
228+
# CHECK: body:
229+
# CHECK: bb.1:
230+
# CHECK: %2:fpr32 = PHI %0, %bb.0, %2, %bb.1
231+
232+
body: |
233+
bb.0:
234+
liveins: $s0, $w0
235+
successors: %bb.1
236+
%0(s32) = COPY $s0
237+
%3:gpr(s32) = COPY $w0
238+
%1(s1) = G_TRUNC %3
239+
240+
bb.1:
241+
successors: %bb.1, %bb.2
242+
%2(s32) = PHI %0, %bb.0, %2, %bb.1
243+
G_BRCOND %1, %bb.1
244+
245+
bb.2:
246+
$s0 = COPY %2
247+
RET_ReallyLR implicit $s0
248+
...
249+
250+
---
251+
# CHECK-LABEL: name: select
252+
name: select
253+
legalized: true
254+
regBankSelected: true
255+
tracksRegLiveness: true
256+
257+
# CHECK: registers:
258+
# CHECK-NEXT: - { id: 0, class: gpr32, preferred-register: '' }
259+
# CHECK-NEXT: - { id: 1, class: gpr32, preferred-register: '' }
260+
# CHECK-NEXT: - { id: 2, class: gpr32, preferred-register: '' }
261+
# CHECK-NEXT: - { id: 3, class: gpr32, preferred-register: '' }
262+
# CHECK-NEXT: - { id: 4, class: gpr64, preferred-register: '' }
263+
# CHECK-NEXT: - { id: 5, class: gpr64, preferred-register: '' }
264+
# CHECK-NEXT: - { id: 6, class: gpr64, preferred-register: '' }
265+
# CHECK-NEXT: - { id: 7, class: gpr64, preferred-register: '' }
266+
# CHECK-NEXT: - { id: 8, class: gpr64, preferred-register: '' }
267+
# CHECK-NEXT: - { id: 9, class: gpr64, preferred-register: '' }
268+
registers:
269+
- { id: 0, class: gpr }
270+
- { id: 1, class: gpr }
271+
- { id: 2, class: gpr }
272+
- { id: 3, class: gpr }
273+
- { id: 4, class: gpr }
274+
- { id: 5, class: gpr }
275+
- { id: 6, class: gpr }
276+
- { id: 7, class: gpr }
277+
- { id: 8, class: gpr }
278+
- { id: 9, class: gpr }
279+
280+
# CHECK: body:
281+
# CHECK: ANDSWri %10, 0, implicit-def $nzcv
282+
# CHECK: %3:gpr32 = CSELWr %1, %2, 1, implicit $nzcv
283+
# CHECK: ANDSWri %10, 0, implicit-def $nzcv
284+
# CHECK: %6:gpr64 = CSELXr %4, %5, 1, implicit $nzcv
285+
# CHECK: ANDSWri %10, 0, implicit-def $nzcv
286+
# CHECK: %9:gpr64 = CSELXr %7, %8, 1, implicit $nzcv
287+
body: |
288+
bb.0:
289+
liveins: $w0, $w1, $w2
290+
%10:gpr(s32) = COPY $w0
291+
%0(s1) = G_TRUNC %10
292+
293+
%1(s32) = COPY $w1
294+
%2(s32) = COPY $w2
295+
%3(s32) = G_SELECT %0, %1, %2
296+
$w0 = COPY %3(s32)
297+
298+
%4(s64) = COPY $x0
299+
%5(s64) = COPY $x1
300+
%6(s64) = G_SELECT %0, %4, %5
301+
$x0 = COPY %6(s64)
302+
303+
%7(p0) = COPY $x0
304+
%8(p0) = COPY $x1
305+
%9(p0) = G_SELECT %0, %7, %8
306+
$x0 = COPY %9(p0)
307+
...

llvm/test/CodeGen/AArch64/GlobalISel/select.mir

-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=IOS
2-
# RUN: llc -O0 -mtriple=aarch64-linux-gnu -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-DEFAULT
32
# RUN: llc -O0 -mtriple=aarch64-linux-gnu -relocation-model=pic -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=LINUX-PIC
43

54
--- |
@@ -78,7 +77,6 @@ registers:
7877

7978
# CHECK: body:
8079
# IOS: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
81-
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_local, target-flags(aarch64-pageoff, aarch64-nc) @var_local
8280
# LINUX-PIC: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_local
8381
body: |
8482
bb.0:
@@ -96,7 +94,6 @@ registers:
9694

9795
# CHECK: body:
9896
# IOS: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_got
99-
# LINUX-DEFAULT: %0:gpr64 = MOVaddr target-flags(aarch64-page) @var_got, target-flags(aarch64-pageoff, aarch64-nc) @var_got
10097
# LINUX-PIC: %0:gpr64 = LOADgot target-flags(aarch64-got) @var_got
10198
body: |
10299
bb.0:

llvm/test/CodeGen/AArch64/GlobalISel/widen-narrow-tbz-tbnz.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Test widening and narrowing on test bit operations using subregister copies
55
# or SUBREG_TO_REG.
66
--- |
7-
@glob = external unnamed_addr global i1, align 4
7+
@glob = external dso_local unnamed_addr global i1, align 4
88
define void @s1_no_copy() { ret void }
99
define void @s16_no_copy() { ret void }
1010
define void @p0_no_copy() { ret void }

llvm/test/CodeGen/AArch64/arm64-storebytesmerge.ll

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
; CHECK: stp xzr, xzr, [x8]
1212
; CHECK: bl f
1313

14-
@q = external unnamed_addr global i16*, align 8
14+
@q = external dso_local unnamed_addr global i16*, align 8
1515

1616
; Function Attrs: nounwind
1717
define void @test() local_unnamed_addr #0 {

0 commit comments

Comments
 (0)