Skip to content

Commit 7e5ad82

Browse files
committed
Moving files around to get testing working
1 parent a41dbda commit 7e5ad82

14 files changed

+567
-0
lines changed
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

test/a.ll

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
; RUN: opt --load libglobal-to-wide.so -global-to-wide -S < %s | FileCheck %s
2+
3+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128-p100:64:64:64"
4+
5+
declare void @llvm.memcpy.p0i8.p100i8.i64(i8* nocapture, i8 addrspace(100)* nocapture, i64, i32, i1)
6+
declare void @llvm.memcpy.p100i8.p0i8.i64(i8 addrspace(100)* nocapture, i8* nocapture, i64, i32, i1)
7+
declare void @llvm.memcpy.p100i8.p100i8.i64(i8 addrspace(100)* nocapture, i8 addrspace(100)* nocapture, i64, i32, i1)
8+
9+
define void @teststore(i64 addrspace(100)* %storeme) {
10+
; CHECK: @teststore(i64* %
11+
; )
12+
; CHECK-NOT: @memcpy
13+
; CHECK: put
14+
; CHECK-NOT: @memcpy
15+
; CHECK: ret
16+
entry:
17+
%a = alloca i64
18+
store i64 7, i64 * %a
19+
%storeme.cast = bitcast i64 addrspace(100)* %storeme to i8 addrspace(100)*
20+
%a.cast = bitcast i64 * %a to i8 *
21+
call void @llvm.memcpy.p100i8.p0i8.i64(i8 addrspace(100)* %storeme.cast, i8* %a.cast, i64 8, i32 1, i1 true)
22+
ret void
23+
}
24+
25+
26+
define i64 @testload(i64 addrspace(100)* %loadme) {
27+
; CHECK: @testload(i64* %
28+
; )
29+
; CHECK-NOT: @memcpy
30+
; CHECK: get
31+
; CHECK-NOT: @memcpy
32+
; CHECK: ret
33+
entry:
34+
%a = alloca i64
35+
%loadme.cast = bitcast i64 addrspace(100)* %loadme to i8 addrspace(100)*
36+
%a.cast = bitcast i64 * %a to i8 *
37+
call void @llvm.memcpy.p0i8.p100i8.i64(i8* %a.cast, i8 addrspace(100)* %loadme.cast, i64 8, i32 1, i1 true)
38+
%ret = load i64 * %a
39+
ret i64 %ret
40+
}
41+
42+
define void @testcopy(i64 addrspace(100)* %dst, i64 addrspace(100)* %src) {
43+
; CHECK: @testcopy(i64* %
44+
; )
45+
; CHECK-NOT: @memcpy
46+
; CHECK: getput
47+
; CHECK-NOT: @memcpy
48+
; CHECK: ret
49+
entry:
50+
%dst.cast = bitcast i64 addrspace(100)* %dst to i8 addrspace(100)*
51+
%src.cast = bitcast i64 addrspace(100)* %src to i8 addrspace(100)*
52+
call void @llvm.memcpy.p100i8.p100i8.i64(i8 addrspace(100)* %dst.cast, i8 addrspace(100)* %src.cast, i64 8, i32 1, i1 true)
53+
ret void
54+
}
55+
56+
define i64 @read_int(i64 addrspace(100)* %src) {
57+
; CHECK: i64 @read_int(i64* %
58+
; )
59+
; CHECK-NOT: @.gf
60+
; CHECK: get
61+
; CHECK-NOT: @.gf
62+
; CHECK: ret i64
63+
entry:
64+
%ret = load i64 addrspace(100)* %src
65+
ret i64 %ret
66+
}
67+
68+
define void @write_int(i64 addrspace(100)* %dst, i64 %v) {
69+
; CHECK: void @write_int(i64* %
70+
; )
71+
; CHECK-NOT: @.gf
72+
; CHECK: put
73+
; CHECK-NOT: @.gf
74+
; CHECK: ret void
75+
entry:
76+
store i64 %v, i64 addrspace(100)* %dst
77+
ret void
78+
}
79+

test/aggregate.ll

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
; RUN: opt --load libglobal-to-wide.so -aggregate-global-ops -S < %s | FileCheck %s
2+
3+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128-p100:64:64:64"
4+
5+
declare void @llvm.memcpy.p0i8.p100i8.i64(i8* nocapture, i8 addrspace(100)* nocapture, i64, i32, i1)
6+
declare void @llvm.memcpy.p100i8.p0i8.i64(i8 addrspace(100)* nocapture, i8* nocapture, i64, i32, i1)
7+
declare void @llvm.memcpy.p100i8.p100i8.i64(i8 addrspace(100)* nocapture, i8 addrspace(100)* nocapture, i64, i32, i1)
8+
9+
10+
define void @teststore1(i64 addrspace(100)* %base) {
11+
; CHECK: @teststore1(
12+
; )
13+
entry:
14+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
15+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
16+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
17+
; CHECK: store i64 1
18+
; CHECK: store i64 2
19+
; CHECK: store i64 3
20+
; CHECK: memcpy
21+
; CHECK: ret
22+
store i64 1, i64 addrspace(100)* %p0, align 8
23+
store i64 2, i64 addrspace(100)* %p1, align 8
24+
store i64 3, i64 addrspace(100)* %p2, align 8
25+
ret void
26+
}
27+
28+
define void @teststore2(i64 addrspace(100)* %base) {
29+
; CHECK: @teststore2(
30+
; )
31+
entry:
32+
; CHECK: store i64 1
33+
; CHECK: store i64 2
34+
; CHECK: store i64 3
35+
; CHECK: memcpy
36+
; CHECK: ret
37+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
38+
store i64 1, i64 addrspace(100)* %p0, align 8
39+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
40+
store i64 2, i64 addrspace(100)* %p1, align 8
41+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
42+
store i64 3, i64 addrspace(100)* %p2, align 8
43+
ret void
44+
}
45+
46+
define void @teststore3(i64 addrspace(100)* %base) {
47+
; CHECK: @teststore3(
48+
; )
49+
entry:
50+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
51+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
52+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
53+
; CHECK: store i64 3
54+
; CHECK: store i64 2
55+
; CHECK: store i64 1
56+
; CHECK: memcpy
57+
; CHECK: ret
58+
store i64 3, i64 addrspace(100)* %p2, align 8
59+
store i64 2, i64 addrspace(100)* %p1, align 8
60+
store i64 1, i64 addrspace(100)* %p0, align 8
61+
ret void
62+
}
63+
64+
65+
define i64 @testload1(i64 addrspace(100)* %base) {
66+
; CHECK: @testload1(
67+
; )
68+
; CHECK: memcpy
69+
; CHECK: load
70+
; CHECK: load
71+
; CHECK: load
72+
; CHECK: ret
73+
entry:
74+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
75+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
76+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
77+
%v1 = load i64 addrspace(100)* %p0, align 8
78+
%v2 = load i64 addrspace(100)* %p1, align 8
79+
%v3 = load i64 addrspace(100)* %p2, align 8
80+
%sum1 = add i64 %v1, %v2
81+
%sum2 = add i64 %sum1, %v3
82+
ret i64 %sum2
83+
}
84+
85+
define i64 @testload2(i64 addrspace(100)* %base) {
86+
; CHECK: @testload2(
87+
; )
88+
; CHECK: memcpy
89+
; CHECK: load
90+
; CHECK: load
91+
; CHECK: load
92+
; CHECK: ret
93+
entry:
94+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
95+
%v1 = load i64 addrspace(100)* %p0, align 8
96+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
97+
%v2 = load i64 addrspace(100)* %p1, align 8
98+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
99+
%v3 = load i64 addrspace(100)* %p2, align 8
100+
%sum1 = add i64 %v1, %v2
101+
%sum2 = add i64 %sum1, %v3
102+
ret i64 %sum2
103+
}
104+
105+
define i64 @testload3(i64 addrspace(100)* %base) {
106+
; CHECK: @testload3(
107+
; )
108+
; CHECK: memcpy
109+
; CHECK: load
110+
; CHECK: load
111+
; CHECK: load
112+
; CHECK: ret
113+
entry:
114+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
115+
%v1 = load i64 addrspace(100)* %p0, align 8
116+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 4
117+
%v2 = load i64 addrspace(100)* %p1, align 8
118+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 8
119+
%v3 = load i64 addrspace(100)* %p2, align 8
120+
%sum1 = add i64 %v1, %v2
121+
%sum2 = add i64 %sum1, %v3
122+
ret i64 %sum2
123+
}
124+
125+
define i64 @testload4(i64 addrspace(100)* %base) {
126+
; CHECK: @testload4(
127+
; )
128+
; CHECK: memcpy
129+
; CHECK: load
130+
; CHECK: load
131+
; CHECK: load
132+
; CHECK: ret
133+
entry:
134+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
135+
%v1 = load i64 addrspace(100)* %p0, align 8
136+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 4
137+
%v2 = load i64 addrspace(100)* %p1, align 8
138+
%sum1 = add i64 %v1, %v2
139+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 8
140+
%v3 = load i64 addrspace(100)* %p2, align 8
141+
%sum2 = add i64 %sum1, %v3
142+
ret i64 %sum2
143+
}
144+
145+
define i64 @testload5(i64 addrspace(100)* %base) {
146+
; CHECK: @testload5(
147+
; )
148+
; CHECK: memcpy
149+
; CHECK: load
150+
; CHECK: load
151+
; CHECK: load
152+
; CHECK: ret
153+
entry:
154+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 3
155+
%v1 = load i64 addrspace(100)* %p0, align 8
156+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
157+
%v2 = load i64 addrspace(100)* %p1, align 8
158+
%sum1 = add i64 %v1, %v2
159+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
160+
%v3 = load i64 addrspace(100)* %p2, align 8
161+
%sum2 = add i64 %sum1, %v3
162+
ret i64 %sum2
163+
}
164+
165+
define void @teststoreatomic(i64 addrspace(100)* %base) {
166+
; CHECK: @teststoreatomic(
167+
; )
168+
entry:
169+
%p0 = getelementptr inbounds i64 addrspace(100)* %base, i32 0
170+
%p1 = getelementptr inbounds i64 addrspace(100)* %base, i32 1
171+
%p2 = getelementptr inbounds i64 addrspace(100)* %base, i32 2
172+
; CHECK: store atomic i64 1
173+
; CHECK: store atomic i64 2
174+
; CHECK: store atomic i64 3
175+
; CHECK: ret
176+
store atomic i64 1, i64 addrspace(100)* %p0 unordered, align 8
177+
store atomic i64 2, i64 addrspace(100)* %p1 unordered, align 8
178+
store atomic i64 3, i64 addrspace(100)* %p2 unordered, align 8
179+
ret void
180+
}
181+
182+

test/b.ll

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
; RUN: opt --load libglobal-to-wide.so -global-to-wide -S < %s | FileCheck %s
2+
3+
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128-p100:64:64:64"
4+
5+
; Check wide pointer manipulation functions.
6+
%struct.c_localeid_t = type { i32, i32 }
7+
8+
declare i64* @.gf.addr.1(i64 addrspace(100)*) readnone
9+
declare i32 @.gf.node.1(i64 addrspace(100)*) readnone
10+
declare %struct.c_localeid_t @.gf.loc.1(i64 addrspace(100)*) readnone
11+
declare i64 addrspace(100)* @.gf.make.1(%struct.c_localeid_t, i64*) readnone
12+
13+
define i64* @testaddr(i64 addrspace(100)* %w) {
14+
; CHECK: @testaddr(i64* %
15+
; )
16+
; CHECK-NOT: @.gf
17+
; CHECK: wide_ptr_get_address
18+
; CHECK-NOT: @.gf
19+
; CHECK: ret i64*
20+
entry:
21+
%ret = call i64* @.gf.addr.1(i64 addrspace(100)* %w)
22+
ret i64* %ret
23+
}
24+
25+
define i32 @testnode(i64 addrspace(100)* %w) {
26+
; CHECK: @testnode(i64* %
27+
; )
28+
; CHECK-NOT: @.gf
29+
; CHECK: wide_ptr_get_node
30+
; CHECK-NOT: @.gf
31+
; CHECK: ret i32
32+
entry:
33+
%ret = call i32 @.gf.node.1(i64 addrspace(100)* %w)
34+
ret i32 %ret
35+
}
36+
37+
define %struct.c_localeid_t @testloc(i64 addrspace(100)* %w) {
38+
; CHECK: @testloc(i64* %
39+
; )
40+
; CHECK-NOT: @.gf
41+
; CHECK: wide_ptr_read_localeID
42+
; CHECK-NOT: @.gf
43+
; CHECK: ret %struct.c_localeid_t
44+
entry:
45+
%ret = call %struct.c_localeid_t @.gf.loc.1(i64 addrspace(100)* %w)
46+
ret %struct.c_localeid_t %ret
47+
}
48+
49+
define i64 addrspace(100)* @testmake(%struct.c_localeid_t %loc, i64* %addr) {
50+
; CHECK: i64* @testmake(
51+
; )
52+
; CHECK-NOT: @.gf
53+
; CHECK: return_wide_ptr_loc
54+
; CHECK-NOT: @.gf
55+
; CHECK: ret i64*
56+
entry:
57+
%ret = call i64 addrspace(100)* @.gf.make.1(%struct.c_localeid_t %loc, i64* %addr)
58+
ret i64 addrspace(100)* %ret
59+
}
60+

0 commit comments

Comments
 (0)