authorgravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-08-29 03:18:23+02:00
committergravatar for robin@voetter.nlRobin Voetter <robin@voetter.nl> 2021-09-20 02:29:04+02:00
loge09465fc49d86cc4aa9338106862d3e059ae3303
tree1ed80cc31ccfa43bbcbae7198b20980307f36b4e
parent2f43749c2b48b1ef3e59663f3e7033500a4b0c0c

Address Spaces: Chaining tests


2 files changed, 111 insertions(+), 0 deletions(-)

src/codegen/llvm/bindings.zig+59
...@@ -973,3 +973,62 @@ pub const TypeKind = enum(c_int) {...@@ -973,3 +973,62 @@ pub const TypeKind = enum(c_int) {
973 BFloat,973 BFloat,
974 X86_AMX,974 X86_AMX,
975};975};
976
977pub const address_space = struct {
978 // See llvm/lib/Target/X86/X86.h
979 pub const x86_64 = x86;
980 pub const x86 = struct {
981 pub const gs = 256;
982 pub const fs = 257;
983 pub const ss = 258;
984
985 pub const ptr32_sptr = 270;
986 pub const ptr32_uptr = 271;
987 pub const ptr64 = 272;
988 };
989
990 // See llvm/lib/Target/AVR/AVR.h
991 pub const avr = struct {
992 pub const data_memory = 0;
993 pub const program_memory = 1;
994 };
995
996 // See llvm/lib/Target/NVPTX/NVPTX.h
997 pub const nvptx = struct {
998 pub const generic = 0;
999 pub const global = 1;
1000 pub const constant = 2;
1001 pub const shared = 3;
1002 pub const param = 4;
1003 pub const local = 5;
1004 };
1005
1006 // See llvm/lib/Target/AMDGPU/AMDGPU.h
1007 pub const amdgpu = struct {
1008 pub const flat = 0;
1009 pub const global = 1;
1010 pub const region = 2;
1011 pub const local = 3;
1012 pub const constant = 4;
1013 pub const constant_32bit = 6;
1014 pub const buffer_fat_pointer = 7;
1015 pub const param_d = 6;
1016 pub const param_i = 7;
1017 pub const constant_buffer_0 = 8;
1018 pub const constant_buffer_1 = 9;
1019 pub const constant_buffer_2 = 10;
1020 pub const constant_buffer_3 = 11;
1021 pub const constant_buffer_4 = 12;
1022 pub const constant_buffer_5 = 13;
1023 pub const constant_buffer_6 = 14;
1024 pub const constant_buffer_7 = 15;
1025 pub const constant_buffer_8 = 16;
1026 pub const constant_buffer_9 = 17;
1027 pub const constant_buffer_10 = 18;
1028 pub const constant_buffer_11 = 19;
1029 pub const constant_buffer_12 = 20;
1030 pub const constant_buffer_13 = 21;
1031 pub const constant_buffer_14 = 22;
1032 pub const constant_buffer_15 = 23;
1033 };
1034};
test/stage2/llvm.zig+52
...@@ -302,4 +302,56 @@ pub fn addCases(ctx: *TestContext) !void {...@@ -302,4 +302,56 @@ pub fn addCases(ctx: *TestContext) !void {
302 \\pub export fn main() void { _ = entry; }302 \\pub export fn main() void { _ = entry; }
303 );303 );
304 }304 }
305
306 {
307 var case = ctx.exeUsingLlvmBackend("address spaces pointer access chaining: array pointer", linux_x64);
308 case.compiles(
309 \\fn entry(a: *addrspace(.gs) [1]i32) *addrspace(.gs) i32 {
310 \\ return &a[0];
311 \\}
312 \\pub export fn main() void { _ = entry; }
313 );
314 }
315
316 {
317 var case = ctx.exeUsingLlvmBackend("address spaces pointer access chaining: pointer to optional array", linux_x64);
318 case.compiles(
319 \\fn entry(a: *addrspace(.gs) ?[1]i32) *addrspace(.gs) i32 {
320 \\ return &a.*.?[0];
321 \\}
322 \\pub export fn main() void { _ = entry; }
323 );
324 }
325
326 {
327 var case = ctx.exeUsingLlvmBackend("address spaces pointer access chaining: struct pointer", linux_x64);
328 case.compiles(
329 \\const A = struct{ a: i32 };
330 \\fn entry(a: *addrspace(.gs) A) *addrspace(.gs) i32 {
331 \\ return &a.a;
332 \\}
333 \\pub export fn main() void { _ = entry; }
334 );
335 }
336
337 {
338 var case = ctx.exeUsingLlvmBackend("address spaces pointer access chaining: complex", linux_x64);
339 case.compiles(
340 \\const A = struct{ a: ?[1]i32 };
341 \\fn entry(a: *addrspace(.gs) [1]A) *addrspace(.gs) i32 {
342 \\ return &a[0].a.?[0];
343 \\}
344 \\pub export fn main() void { _ = entry; }
345 );
346 }
347
348 {
349 var case = ctx.exeUsingLlvmBackend("dereferencing through multiple pointers with address spaces", linux_x64);
350 case.compiles(
351 \\fn entry(a: *addrspace(.fs) *addrspace(.gs) *i32) *i32 {
352 \\ return a.*.*;
353 \\}
354 \\pub export fn main() void { _ = entry; }
355 );
356 }
305}357}