diff --git a/lib/std/Target.zig b/lib/std/Target.zig index d8cdb78494409d5e810a62485c887b0f056217cb..b8d6fc7ec8496de4fd5c25590cc69e2a28f1a0c3 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -2394,7 +2394,6 @@ pub fn supportsAddressSpace( .param => is_nvptx, .input, .output, .uniform, .push_constant, .storage_buffer => is_spirv, .physical_storage_buffer => arch == .spirv64, - .externref, .funcref => target.cpu.has(.wasm, .reference_types), }; } diff --git a/lib/std/lang.zig b/lib/std/lang.zig index b96acc3c5efa47b6092f7cc82c8592200ad4e662..7af113b525fa997b2f82b336ffaafa3bc4737f50 100644 --- a/lib/std/lang.zig +++ b/lib/std/lang.zig @@ -616,10 +616,6 @@ pub const AddressSpace = enum(u5) { /// This address space only addresses the "lookup" ram lut, - - // Web Assembly - externref, - funcref, }; /// This data structure is used by the Zig language code generation and diff --git a/lib/std/zig/llvm/Builder.zig b/lib/std/zig/llvm/Builder.zig index 3d4339c7620c34555ac9bb45e9d3bd2d0d364eed..88b3e3c6df22f7536c7f101745e45d70debd6592 100644 --- a/lib/std/zig/llvm/Builder.zig +++ b/lib/std/zig/llvm/Builder.zig @@ -2840,7 +2840,6 @@ pub const AddrSpace = enum(u24) { pub const gs: AddrSpace = @fromBackingInt(256); pub const fs: AddrSpace = @fromBackingInt(257); pub const ss: AddrSpace = @fromBackingInt(258); - pub const ptr32_sptr: AddrSpace = @fromBackingInt(270); pub const ptr32_uptr: AddrSpace = @fromBackingInt(271); pub const ptr64: AddrSpace = @fromBackingInt(272); @@ -2858,17 +2857,19 @@ pub const AddrSpace = enum(u24) { pub const program5: AddrSpace = @fromBackingInt(6); }; - // See llvm/lib/Target/NVPTX/NVPTX.h + // See llvm/include/llvm/Support/NVPTXAddrSpace.h pub const nvptx = struct { pub const generic: AddrSpace = @fromBackingInt(0); pub const global: AddrSpace = @fromBackingInt(1); - pub const constant: AddrSpace = @fromBackingInt(2); pub const shared: AddrSpace = @fromBackingInt(3); - pub const param: AddrSpace = @fromBackingInt(4); + pub const constant: AddrSpace = @fromBackingInt(4); pub const local: AddrSpace = @fromBackingInt(5); + pub const tensor: AddrSpace = @fromBackingInt(6); + pub const shared_cluster: AddrSpace = @fromBackingInt(7); + pub const entry_param: AddrSpace = @fromBackingInt(101); }; - // See llvm/lib/Target/AMDGPU/AMDGPU.h + // See llvm/include/llvm/Support/AMDGPUAddrSpace.h pub const amdgpu = struct { pub const flat: AddrSpace = @fromBackingInt(0); pub const global: AddrSpace = @fromBackingInt(1); @@ -2901,6 +2902,7 @@ pub const AddrSpace = enum(u24) { pub const streamout_register: AddrSpace = @fromBackingInt(128); }; + // See llvm/lib/Target/SPIRV/SPIRVUtils.h pub const spirv = struct { pub const function: AddrSpace = @fromBackingInt(0); pub const cross_workgroup: AddrSpace = @fromBackingInt(1); @@ -2910,14 +2912,30 @@ pub const AddrSpace = enum(u24) { pub const device_only_intel: AddrSpace = @fromBackingInt(5); pub const host_only_intel: AddrSpace = @fromBackingInt(6); pub const input: AddrSpace = @fromBackingInt(7); + pub const output: AddrSpace = @fromBackingInt(8); + pub const code_section_intel: AddrSpace = @fromBackingInt(9); + pub const private: AddrSpace = @fromBackingInt(10); + pub const storage_buffer: AddrSpace = @fromBackingInt(11); + pub const uniform: AddrSpace = @fromBackingInt(12); + pub const push_constant: AddrSpace = @fromBackingInt(13); }; // See llvm/include/llvm/CodeGen/WasmAddressSpaces.h pub const wasm = struct { pub const default: AddrSpace = @fromBackingInt(0); pub const variable: AddrSpace = @fromBackingInt(1); - pub const externref: AddrSpace = @fromBackingInt(10); - pub const funcref: AddrSpace = @fromBackingInt(20); + }; + + // See llvm/lib/TargetParser/TargetDataLayout.cpp + pub const riscv = struct { + pub const purecap: AddrSpace = @fromBackingInt(200); + }; + + // See llvm/lib/Target/AArch64/AArch64ISelLowering.h + pub const aarch64 = struct { + pub const ptr32_sptr: AddrSpace = @fromBackingInt(270); + pub const ptr32_uptr: AddrSpace = @fromBackingInt(271); + pub const ptr64: AddrSpace = @fromBackingInt(272); }; pub fn format(addr_space: AddrSpace, w: *Writer) Writer.Error!void { diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index ec493f5540a0b55aa49cff29746dfd73c4859e29..4391b7d2e00661b4916ed433f51e684d11a43660 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -4400,88 +4400,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const /// Convert a zig-address space to an llvm address space. pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace { - for (llvmAddrSpaceInfo(target)) |info| if (info.zig == address_space) return info.llvm; - unreachable; -} - -const AddrSpaceInfo = struct { - zig: ?std.lang.AddressSpace, - llvm: Builder.AddrSpace, - non_integral: bool = false, - size: ?u16 = null, - abi: ?u16 = null, - pref: ?u16 = null, - idx: ?u16 = null, - force_in_data_layout: bool = false, -}; -fn llvmAddrSpaceInfo(target: *const std.Target) []const AddrSpaceInfo { return switch (target.cpu.arch) { - .x86, .x86_64 => &.{ - .{ .zig = .generic, .llvm = .default }, - .{ .zig = .gs, .llvm = Builder.AddrSpace.x86.gs }, - .{ .zig = .fs, .llvm = Builder.AddrSpace.x86.fs }, - .{ .zig = .ss, .llvm = Builder.AddrSpace.x86.ss }, - .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_sptr, .size = 32, .abi = 32, .force_in_data_layout = true }, - .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_uptr, .size = 32, .abi = 32, .force_in_data_layout = true }, - .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr64, .size = 64, .abi = 64, .force_in_data_layout = true }, + .amdgcn => switch (address_space) { + .generic => Builder.AddrSpace.amdgpu.flat, + .global => Builder.AddrSpace.amdgpu.global, + .shared => Builder.AddrSpace.amdgpu.local, + .constant => Builder.AddrSpace.amdgpu.constant, + .local => Builder.AddrSpace.amdgpu.private, + else => unreachable, }, - .nvptx, .nvptx64 => &.{ - .{ .zig = .generic, .llvm = Builder.AddrSpace.nvptx.generic }, - .{ .zig = .global, .llvm = Builder.AddrSpace.nvptx.global }, - .{ .zig = .constant, .llvm = Builder.AddrSpace.nvptx.constant }, - .{ .zig = .param, .llvm = Builder.AddrSpace.nvptx.param }, - .{ .zig = .shared, .llvm = Builder.AddrSpace.nvptx.shared }, - .{ .zig = .local, .llvm = Builder.AddrSpace.nvptx.local }, + .avr => switch (address_space) { + .generic => Builder.AddrSpace.avr.data, + .flash => Builder.AddrSpace.avr.program, + .flash1 => Builder.AddrSpace.avr.program1, + .flash2 => Builder.AddrSpace.avr.program2, + .flash3 => Builder.AddrSpace.avr.program3, + .flash4 => Builder.AddrSpace.avr.program4, + .flash5 => Builder.AddrSpace.avr.program5, + else => unreachable, }, - .amdgcn => &.{ - .{ .zig = .generic, .llvm = Builder.AddrSpace.amdgpu.flat, .force_in_data_layout = true }, - .{ .zig = .global, .llvm = Builder.AddrSpace.amdgpu.global, .force_in_data_layout = true }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.region, .size = 32, .abi = 32 }, - .{ .zig = .shared, .llvm = Builder.AddrSpace.amdgpu.local, .size = 32, .abi = 32 }, - .{ .zig = .constant, .llvm = Builder.AddrSpace.amdgpu.constant, .force_in_data_layout = true }, - .{ .zig = .local, .llvm = Builder.AddrSpace.amdgpu.private, .size = 32, .abi = 32 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_32bit, .size = 32, .abi = 32 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_fat_pointer, .non_integral = true, .size = 160, .abi = 256, .idx = 32 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_resource, .non_integral = true, .size = 128, .abi = 128 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_strided_pointer, .non_integral = true, .size = 192, .abi = 256, .idx = 32 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_0 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_1 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_2 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_3 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_4 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_5 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_6 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_7 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_8 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_9 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_10 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_11 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_12 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_13 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_14 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_15 }, - .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.streamout_register }, + .nvptx, .nvptx64 => switch (address_space) { + .generic => Builder.AddrSpace.nvptx.generic, + .global => Builder.AddrSpace.nvptx.global, + .constant => Builder.AddrSpace.nvptx.constant, + .param => Builder.AddrSpace.nvptx.entry_param, + .shared => Builder.AddrSpace.nvptx.shared, + .local => Builder.AddrSpace.nvptx.local, + else => unreachable, }, - .avr => &.{ - .{ .zig = .generic, .llvm = Builder.AddrSpace.avr.data, .abi = 8 }, - .{ .zig = .flash, .llvm = Builder.AddrSpace.avr.program, .abi = 8 }, - .{ .zig = .flash1, .llvm = Builder.AddrSpace.avr.program1, .abi = 8 }, - .{ .zig = .flash2, .llvm = Builder.AddrSpace.avr.program2, .abi = 8 }, - .{ .zig = .flash3, .llvm = Builder.AddrSpace.avr.program3, .abi = 8 }, - .{ .zig = .flash4, .llvm = Builder.AddrSpace.avr.program4, .abi = 8 }, - .{ .zig = .flash5, .llvm = Builder.AddrSpace.avr.program5, .abi = 8 }, + .x86, .x86_64 => switch (address_space) { + .generic => .default, + .gs => Builder.AddrSpace.x86.gs, + .fs => Builder.AddrSpace.x86.fs, + .ss => Builder.AddrSpace.x86.ss, + else => unreachable, }, - .wasm32, .wasm64 => &.{ - .{ .zig = .generic, .llvm = Builder.AddrSpace.wasm.default, .force_in_data_layout = true }, - .{ .zig = null, .llvm = Builder.AddrSpace.wasm.variable, .non_integral = true }, - .{ .zig = .externref, .llvm = Builder.AddrSpace.wasm.externref, .non_integral = true, .size = 8, .abi = 8 }, - .{ .zig = .funcref, .llvm = Builder.AddrSpace.wasm.funcref, .non_integral = true, .size = 8, .abi = 8 }, - }, - .m68k => &.{ - .{ .zig = .generic, .llvm = .default, .abi = 16, .pref = 32 }, - }, - else => &.{ - .{ .zig = .generic, .llvm = .default }, + else => switch (address_space) { + .generic => .default, + else => unreachable, }, }; } diff --git a/src/codegen/spirv/CodeGen.zig b/src/codegen/spirv/CodeGen.zig index db2ffcb30bcea0d4f48f912f6ba13bb991b85da8..60af419ba642855545304736eb46b65bcc10ff39 100644 --- a/src/codegen/spirv/CodeGen.zig +++ b/src/codegen/spirv/CodeGen.zig @@ -848,8 +848,6 @@ pub fn storageClass(cg: *const CodeGen, as: std.lang.AddressSpace) spec.StorageC .cog, .lut, .hub, - .externref, - .funcref, => unreachable, }; }