diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Sema.zig | 5 | ||||
| -rw-r--r-- | src/codegen/llvm.zig | 10 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 93cbb8f2cf..91cddc18ff 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -18006,10 +18006,14 @@ pub fn analyzeAddrspace( const address_space = addrspace_tv.val.toEnum(std.builtin.AddressSpace); const target = sema.mod.getTarget(); const arch = target.cpu.arch; + const is_gpu = arch == .nvptx or arch == .nvptx64; const supported = switch (address_space) { .generic => true, .gs, .fs, .ss => (arch == .i386 or arch == .x86_64) and ctx == .pointer, + // TODO: check that .shared and .local are left uninitialized + .global, .param, .shared, .local => is_gpu, + .constant => is_gpu and (ctx == .constant), }; if (!supported) { @@ -18020,7 +18024,6 @@ pub fn analyzeAddrspace( .constant => "constant values", .pointer => "pointers", }; - return sema.fail( block, src, diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index ed57562e4c..f40dbf41de 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -801,6 +801,16 @@ pub const DeclGen = struct { .gs => llvm.address_space.x86.gs, .fs => llvm.address_space.x86.fs, .ss => llvm.address_space.x86.ss, + else => unreachable, + }, + .nvptx, .nvptx64 => switch (address_space) { + .generic => llvm.address_space.default, + .global => llvm.address_space.nvptx.global, + .constant => llvm.address_space.nvptx.constant, + .param => llvm.address_space.nvptx.param, + .shared => llvm.address_space.nvptx.shared, + .local => llvm.address_space.nvptx.local, + else => unreachable, }, else => switch (address_space) { .generic => llvm.address_space.default, |
