| author | |
| committer | |
| log | e09465fc49d86cc4aa9338106862d3e059ae3303 |
| tree | 1ed80cc31ccfa43bbcbae7198b20980307f36b4e |
| parent | 2f43749c2b48b1ef3e59663f3e7033500a4b0c0c |
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 | |||
| 977 | pub 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 | } |