Skip to content

Commit 7e29627

Browse files
author
Zaara Syeda
committed
Add tests
1 parent 3e4c238 commit 7e29627

File tree

3 files changed

+221
-1
lines changed

3 files changed

+221
-1
lines changed

llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2424,8 +2424,9 @@ MCSection *TargetLoweringObjectFileXCOFF::SelectSectionForGlobal(
24242424
if (GVar->hasAttribute("toc-data")) {
24252425
SmallString<128> Name;
24262426
getNameWithPrefix(Name, GO, TM);
2427+
XCOFF::SymbolType symType = GO->hasCommonLinkage() ? XCOFF::XTY_CM : XCOFF::XTY_SD;
24272428
return getContext().getXCOFFSection(
2428-
Name, Kind, XCOFF::CsectProperties(XCOFF::XMC_TD, XCOFF::XTY_SD),
2429+
Name, Kind, XCOFF::CsectProperties(XCOFF::XMC_TD, symType),
24292430
/* MultiSymbolsAllowed*/ true);
24302431
}
24312432

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
; RUN: not --crash llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs \
2+
; RUN: < %s 2>&1 | FileCheck %s
3+
; RUN: not --crash llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs \
4+
; RUN: < %s 2>&1 | FileCheck %s
5+
6+
@iprivate = private global i32 55 #0
7+
8+
define nonnull ptr @get() local_unnamed_addr {
9+
entry:
10+
ret ptr @iprivate
11+
}
12+
13+
attributes #0 = { "toc-data" }
14+
15+
; CHECK: LLVM ERROR: A GlobalVariable with private linkage is not currently supported by the toc data transformation.
Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2+
; RUN: llc -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix CHECK
3+
; RUN: llc -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s | FileCheck %s --check-prefix CHECK64
4+
5+
; RUN: llc -filetype=obj -mtriple powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -o %t32.o
6+
; RUN: llvm-objdump -t --symbol-description %t32.o | FileCheck %s --check-prefix=OBJ32
7+
8+
; RUN: llc -filetype=obj -mtriple powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -o %t64.o
9+
; RUN: llvm-objdump -t --symbol-description %t64.o | FileCheck %s --check-prefix=OBJ64
10+
11+
@a1 = common global i32 0, align 4 #0
12+
@a2 = global i32 0, align 4 #0
13+
@a3 = common global i32 0, align 4
14+
@a4 = global i32 0, align 4
15+
16+
define void @set(i32 noundef %_a) {
17+
; CHECK-LABEL: set:
18+
; CHECK: # %bb.0: # %entry
19+
; CHECK-NEXT: la 4, a2[TD](2)
20+
; CHECK-NEXT: la 5, a1[TD](2)
21+
; CHECK-NEXT: stw 3, 0(4)
22+
; CHECK-NEXT: lwz 4, L..C0(2) # @a4
23+
; CHECK-NEXT: stw 3, 0(5)
24+
; CHECK-NEXT: lwz 5, L..C1(2) # @a3
25+
; CHECK-NEXT: stw 3, 0(4)
26+
; CHECK-NEXT: stw 3, 0(5)
27+
; CHECK-NEXT: blr
28+
;
29+
; CHECK64-LABEL: set:
30+
; CHECK64: # %bb.0: # %entry
31+
; CHECK64-NEXT: la 4, a2[TD](2)
32+
; CHECK64-NEXT: la 5, a1[TD](2)
33+
; CHECK64-NEXT: stw 3, 0(4)
34+
; CHECK64-NEXT: ld 4, L..C0(2) # @a4
35+
; CHECK64-NEXT: stw 3, 0(5)
36+
; CHECK64-NEXT: ld 5, L..C1(2) # @a3
37+
; CHECK64-NEXT: stw 3, 0(4)
38+
; CHECK64-NEXT: stw 3, 0(5)
39+
; CHECK64-NEXT: blr
40+
entry:
41+
store i32 %_a, ptr @a2, align 4
42+
store i32 %_a, ptr @a1, align 4
43+
store i32 %_a, ptr @a4, align 4
44+
store i32 %_a, ptr @a3, align 4
45+
ret void
46+
}
47+
48+
define i32 @get1() {
49+
; CHECK-LABEL: get1:
50+
; CHECK: # %bb.0: # %entry
51+
; CHECK-NEXT: la 3, a2[TD](2)
52+
; CHECK-NEXT: lwz 3, 0(3)
53+
; CHECK-NEXT: blr
54+
;
55+
; CHECK64-LABEL: get1:
56+
; CHECK64: # %bb.0: # %entry
57+
; CHECK64-NEXT: la 3, a2[TD](2)
58+
; CHECK64-NEXT: lwz 3, 0(3)
59+
; CHECK64-NEXT: blr
60+
entry:
61+
%0 = load i32, ptr @a2, align 4
62+
ret i32 %0
63+
}
64+
65+
define i32 @get2() {
66+
; CHECK-LABEL: get2:
67+
; CHECK: # %bb.0: # %entry
68+
; CHECK-NEXT: la 3, a1[TD](2)
69+
; CHECK-NEXT: lwz 3, 0(3)
70+
; CHECK-NEXT: blr
71+
;
72+
; CHECK64-LABEL: get2:
73+
; CHECK64: # %bb.0: # %entry
74+
; CHECK64-NEXT: la 3, a1[TD](2)
75+
; CHECK64-NEXT: lwz 3, 0(3)
76+
; CHECK64-NEXT: blr
77+
entry:
78+
%0 = load i32, ptr @a1, align 4
79+
ret i32 %0
80+
}
81+
82+
define i32 @get3() {
83+
; CHECK-LABEL: get3:
84+
; CHECK: # %bb.0: # %entry
85+
; CHECK-NEXT: lwz 3, L..C0(2) # @a4
86+
; CHECK-NEXT: lwz 3, 0(3)
87+
; CHECK-NEXT: blr
88+
;
89+
; CHECK64-LABEL: get3:
90+
; CHECK64: # %bb.0: # %entry
91+
; CHECK64-NEXT: ld 3, L..C0(2) # @a4
92+
; CHECK64-NEXT: lwz 3, 0(3)
93+
; CHECK64-NEXT: blr
94+
entry:
95+
%0 = load i32, ptr @a4, align 4
96+
ret i32 %0
97+
}
98+
99+
define i32 @get4() {
100+
; CHECK-LABEL: get4:
101+
; CHECK: # %bb.0: # %entry
102+
; CHECK-NEXT: lwz 3, L..C1(2) # @a3
103+
; CHECK-NEXT: lwz 3, 0(3)
104+
; CHECK-NEXT: blr
105+
;
106+
; CHECK64-LABEL: get4:
107+
; CHECK64: # %bb.0: # %entry
108+
; CHECK64-NEXT: ld 3, L..C1(2) # @a3
109+
; CHECK64-NEXT: lwz 3, 0(3)
110+
; CHECK64-NEXT: blr
111+
entry:
112+
%0 = load i32, ptr @a3, align 4
113+
ret i32 %0
114+
}
115+
116+
define nonnull ptr @escape1() {
117+
; CHECK-LABEL: escape1:
118+
; CHECK: # %bb.0: # %entry
119+
; CHECK-NEXT: la 3, a2[TD](2)
120+
; CHECK-NEXT: blr
121+
;
122+
; CHECK64-LABEL: escape1:
123+
; CHECK64: # %bb.0: # %entry
124+
; CHECK64-NEXT: la 3, a2[TD](2)
125+
; CHECK64-NEXT: blr
126+
entry:
127+
ret ptr @a2
128+
}
129+
130+
define nonnull ptr @escape2() {
131+
; CHECK-LABEL: escape2:
132+
; CHECK: # %bb.0: # %entry
133+
; CHECK-NEXT: la 3, a1[TD](2)
134+
; CHECK-NEXT: blr
135+
;
136+
; CHECK64-LABEL: escape2:
137+
; CHECK64: # %bb.0: # %entry
138+
; CHECK64-NEXT: la 3, a1[TD](2)
139+
; CHECK64-NEXT: blr
140+
entry:
141+
ret ptr @a1
142+
}
143+
144+
define nonnull ptr @escape3() {
145+
; CHECK-LABEL: escape3:
146+
; CHECK: # %bb.0: # %entry
147+
; CHECK-NEXT: lwz 3, L..C0(2) # @a4
148+
; CHECK-NEXT: blr
149+
;
150+
; CHECK64-LABEL: escape3:
151+
; CHECK64: # %bb.0: # %entry
152+
; CHECK64-NEXT: ld 3, L..C0(2) # @a4
153+
; CHECK64-NEXT: blr
154+
entry:
155+
ret ptr @a4
156+
}
157+
158+
define nonnull ptr @escape4() {
159+
; CHECK-LABEL: escape4:
160+
; CHECK: # %bb.0: # %entry
161+
; CHECK-NEXT: lwz 3, L..C1(2) # @a3
162+
; CHECK-NEXT: blr
163+
;
164+
; CHECK64-LABEL: escape4:
165+
; CHECK64: # %bb.0: # %entry
166+
; CHECK64-NEXT: ld 3, L..C1(2) # @a3
167+
; CHECK64-NEXT: blr
168+
entry:
169+
ret ptr @a3
170+
}
171+
172+
attributes #0 = { "toc-data" }
173+
174+
; CHECK,CHECK64: .comm a3[RW],4,2 # @a3
175+
; CHECK-NEXT,CHECK64-NEXT: .csect a4[RW],2
176+
; CHECK-NEXT,CHECK64-NEXT: .globl a4[RW] # @a4
177+
; CHECK-NEXT,CHECK64-NEXT: .align 2
178+
; CHECK-NEXT,CHECK64-NEXT: .vbyte 4, 0 # 0x0
179+
; CHECK-NEXT,CHECK64-NEXT: .toc
180+
; CHECK-LABEL,CHECK64-LABEL: L..C0:
181+
; CHECK-NEXT,CHECK64-NEXT: .tc a4[TC],a4[RW]
182+
; CHECK-LABEL,CHECK64-LABEL: L..C1:
183+
; CHECK-NEXT,CHECK64-NEXT: .tc a3[TC],a3[RW]
184+
; CHECK-NEXT,CHECK64-NEXT: .csect a2[TD],2
185+
; CHECK-NEXT,CHECK64-NEXT: .globl a2[TD] # @a2
186+
; CHECK-NEXT,CHECK64-NEXT: .align 2
187+
; CHECK-NEXT,CHECK64-NEXT: .vbyte 4, 0 # 0x0
188+
; CHECK-NEXT,CHECK64-NEXT: .comm a1[TD],4,2 # @a1
189+
190+
; OBJ32: {{([[:xdigit:]]{8})}} g O .data 00000004 (idx: {{[0-9]+}}) a4[RW]
191+
; OBJ32-LABEL: {{([[:xdigit:]]{8})}} l .data 00000000 (idx: {{[0-9]+}}) TOC[TC0]
192+
; OBJ32-NEXT: {{([[:xdigit:]]{8})}} l O .data 00000004 (idx: {{[0-9]+}}) a4[TC]
193+
; OBJ32-NEXT: {{([[:xdigit:]]{8})}} l O .data 00000004 (idx: {{[0-9]+}}) a3[TC]
194+
; OBJ32-NEXT: {{([[:xdigit:]]{8})}} g O .data 00000004 (idx: {{[0-9]+}}) a2[TD]
195+
; OBJ32-NEXT: {{([[:xdigit:]]{8})}} g O *COM* 00000004 (idx: {{[0-9]+}}) a1[TD]
196+
; OBJ32-NEXT: {{([[:xdigit:]]{8})}} g O *COM* 00000004 (idx: {{[0-9]+}}) a3[RW]
197+
198+
; OBJ64: {{([[:xdigit:]]{16})}} g O .data 0000000000000004 (idx: {{[0-9]+}}) a4[RW]
199+
; OBJ64-LABEL: {{([[:xdigit:]]{16})}} l .data 0000000000000000 (idx: {{[0-9]+}}) TOC[TC0]
200+
; OBJ64-NEXT: {{([[:xdigit:]]{16})}} l O .data 0000000000000008 (idx: {{[0-9]+}}) a4[TC]
201+
; OBJ64-NEXT: {{([[:xdigit:]]{16})}} l O .data 0000000000000008 (idx: {{[0-9]+}}) a3[TC]
202+
; OBJ64-NEXT: {{([[:xdigit:]]{16})}} g O .data 0000000000000004 (idx: {{[0-9]+}}) a2[TD]
203+
; OBJ64-NEXT: {{([[:xdigit:]]{16})}} g O *COM* 0000000000000004 (idx: {{[0-9]+}}) a1[TD]
204+
; OBJ64-NEXT: {{([[:xdigit:]]{16})}} g O *COM* 0000000000000004 (idx: {{[0-9]+}}) a3[RW]

0 commit comments

Comments
 (0)