| author | |
| committer | |
| log | 45a40c4fa8609de2a1e2cd9c6366e7f31def4fd7 |
| tree | e1ac1b80acaee2e6d0aff94e33af037fd6ec9d8c |
| parent | 16e1906e3de92c1a4000f4f082773c6b36a5febd |
| signature | Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM |
Note: https://codeberg.org/ziglang/zig/issues/31190#issuecomment-205239235 files changed, 58 insertions(+), 91 deletions(-)
lib/std/Target.zig-1| ... | @@ -2401,7 +2401,6 @@ pub fn supportsAddressSpace( | ... | @@ -2401,7 +2401,6 @@ pub fn supportsAddressSpace( |
| 2401 | .param => is_nvptx, | 2401 | .param => is_nvptx, |
| 2402 | .input, .output, .uniform, .push_constant, .storage_buffer => is_spirv, | 2402 | .input, .output, .uniform, .push_constant, .storage_buffer => is_spirv, |
| 2403 | .physical_storage_buffer => arch == .spirv64, | 2403 | .physical_storage_buffer => arch == .spirv64, |
| 2404 | .externref, .funcref => target.cpu.has(.wasm, .reference_types), | ||
| 2405 | }; | 2404 | }; |
| 2406 | } | 2405 | } |
| 2407 | 2406 |
lib/std/lang.zig-4| ... | @@ -615,10 +615,6 @@ pub const AddressSpace = enum(u5) { | ... | @@ -615,10 +615,6 @@ pub const AddressSpace = enum(u5) { |
| 615 | 615 | ||
| 616 | /// This address space only addresses the "lookup" ram | 616 | /// This address space only addresses the "lookup" ram |
| 617 | lut, | 617 | lut, |
| 618 | |||
| 619 | // Web Assembly | ||
| 620 | externref, | ||
| 621 | funcref, | ||
| 622 | }; | 618 | }; |
| 623 | 619 | ||
| 624 | /// This data structure is used by the Zig language code generation and | 620 | /// This data structure is used by the Zig language code generation and |
lib/std/zig/llvm/Builder.zig+25-7| ... | @@ -2840,7 +2840,6 @@ pub const AddrSpace = enum(u24) { | ... | @@ -2840,7 +2840,6 @@ pub const AddrSpace = enum(u24) { |
| 2840 | pub const gs: AddrSpace = @fromBackingInt(256); | 2840 | pub const gs: AddrSpace = @fromBackingInt(256); |
| 2841 | pub const fs: AddrSpace = @fromBackingInt(257); | 2841 | pub const fs: AddrSpace = @fromBackingInt(257); |
| 2842 | pub const ss: AddrSpace = @fromBackingInt(258); | 2842 | pub const ss: AddrSpace = @fromBackingInt(258); |
| 2843 | |||
| 2844 | pub const ptr32_sptr: AddrSpace = @fromBackingInt(270); | 2843 | pub const ptr32_sptr: AddrSpace = @fromBackingInt(270); |
| 2845 | pub const ptr32_uptr: AddrSpace = @fromBackingInt(271); | 2844 | pub const ptr32_uptr: AddrSpace = @fromBackingInt(271); |
| 2846 | pub const ptr64: AddrSpace = @fromBackingInt(272); | 2845 | pub const ptr64: AddrSpace = @fromBackingInt(272); |
| ... | @@ -2858,17 +2857,19 @@ pub const AddrSpace = enum(u24) { | ... | @@ -2858,17 +2857,19 @@ pub const AddrSpace = enum(u24) { |
| 2858 | pub const program5: AddrSpace = @fromBackingInt(6); | 2857 | pub const program5: AddrSpace = @fromBackingInt(6); |
| 2859 | }; | 2858 | }; |
| 2860 | 2859 | ||
| 2861 | // See llvm/lib/Target/NVPTX/NVPTX.h | 2860 | // See llvm/include/llvm/Support/NVPTXAddrSpace.h |
| 2862 | pub const nvptx = struct { | 2861 | pub const nvptx = struct { |
| 2863 | pub const generic: AddrSpace = @fromBackingInt(0); | 2862 | pub const generic: AddrSpace = @fromBackingInt(0); |
| 2864 | pub const global: AddrSpace = @fromBackingInt(1); | 2863 | pub const global: AddrSpace = @fromBackingInt(1); |
| 2865 | pub const constant: AddrSpace = @fromBackingInt(2); | ||
| 2866 | pub const shared: AddrSpace = @fromBackingInt(3); | 2864 | pub const shared: AddrSpace = @fromBackingInt(3); |
| 2867 | pub const param: AddrSpace = @fromBackingInt(4); | 2865 | pub const constant: AddrSpace = @fromBackingInt(4); |
| 2868 | pub const local: AddrSpace = @fromBackingInt(5); | 2866 | pub const local: AddrSpace = @fromBackingInt(5); |
| 2867 | pub const tensor: AddrSpace = @fromBackingInt(6); | ||
| 2868 | pub const shared_cluster: AddrSpace = @fromBackingInt(7); | ||
| 2869 | pub const entry_param: AddrSpace = @fromBackingInt(101); | ||
| 2869 | }; | 2870 | }; |
| 2870 | 2871 | ||
| 2871 | // See llvm/lib/Target/AMDGPU/AMDGPU.h | 2872 | // See llvm/include/llvm/Support/AMDGPUAddrSpace.h |
| 2872 | pub const amdgpu = struct { | 2873 | pub const amdgpu = struct { |
| 2873 | pub const flat: AddrSpace = @fromBackingInt(0); | 2874 | pub const flat: AddrSpace = @fromBackingInt(0); |
| 2874 | pub const global: AddrSpace = @fromBackingInt(1); | 2875 | pub const global: AddrSpace = @fromBackingInt(1); |
| ... | @@ -2901,6 +2902,7 @@ pub const AddrSpace = enum(u24) { | ... | @@ -2901,6 +2902,7 @@ pub const AddrSpace = enum(u24) { |
| 2901 | pub const streamout_register: AddrSpace = @fromBackingInt(128); | 2902 | pub const streamout_register: AddrSpace = @fromBackingInt(128); |
| 2902 | }; | 2903 | }; |
| 2903 | 2904 | ||
| 2905 | // See llvm/lib/Target/SPIRV/SPIRVUtils.h | ||
| 2904 | pub const spirv = struct { | 2906 | pub const spirv = struct { |
| 2905 | pub const function: AddrSpace = @fromBackingInt(0); | 2907 | pub const function: AddrSpace = @fromBackingInt(0); |
| 2906 | pub const cross_workgroup: AddrSpace = @fromBackingInt(1); | 2908 | pub const cross_workgroup: AddrSpace = @fromBackingInt(1); |
| ... | @@ -2910,14 +2912,30 @@ pub const AddrSpace = enum(u24) { | ... | @@ -2910,14 +2912,30 @@ pub const AddrSpace = enum(u24) { |
| 2910 | pub const device_only_intel: AddrSpace = @fromBackingInt(5); | 2912 | pub const device_only_intel: AddrSpace = @fromBackingInt(5); |
| 2911 | pub const host_only_intel: AddrSpace = @fromBackingInt(6); | 2913 | pub const host_only_intel: AddrSpace = @fromBackingInt(6); |
| 2912 | pub const input: AddrSpace = @fromBackingInt(7); | 2914 | pub const input: AddrSpace = @fromBackingInt(7); |
| 2915 | pub const output: AddrSpace = @fromBackingInt(8); | ||
| 2916 | pub const code_section_intel: AddrSpace = @fromBackingInt(9); | ||
| 2917 | pub const private: AddrSpace = @fromBackingInt(10); | ||
| 2918 | pub const storage_buffer: AddrSpace = @fromBackingInt(11); | ||
| 2919 | pub const uniform: AddrSpace = @fromBackingInt(12); | ||
| 2920 | pub const push_constant: AddrSpace = @fromBackingInt(13); | ||
| 2913 | }; | 2921 | }; |
| 2914 | 2922 | ||
| 2915 | // See llvm/include/llvm/CodeGen/WasmAddressSpaces.h | 2923 | // See llvm/include/llvm/CodeGen/WasmAddressSpaces.h |
| 2916 | pub const wasm = struct { | 2924 | pub const wasm = struct { |
| 2917 | pub const default: AddrSpace = @fromBackingInt(0); | 2925 | pub const default: AddrSpace = @fromBackingInt(0); |
| 2918 | pub const variable: AddrSpace = @fromBackingInt(1); | 2926 | pub const variable: AddrSpace = @fromBackingInt(1); |
| 2919 | pub const externref: AddrSpace = @fromBackingInt(10); | 2927 | }; |
| 2920 | pub const funcref: AddrSpace = @fromBackingInt(20); | 2928 | |
| 2929 | // See llvm/lib/TargetParser/TargetDataLayout.cpp | ||
| 2930 | pub const riscv = struct { | ||
| 2931 | pub const purecap: AddrSpace = @fromBackingInt(200); | ||
| 2932 | }; | ||
| 2933 | |||
| 2934 | // See llvm/lib/Target/AArch64/AArch64ISelLowering.h | ||
| 2935 | pub const aarch64 = struct { | ||
| 2936 | pub const ptr32_sptr: AddrSpace = @fromBackingInt(270); | ||
| 2937 | pub const ptr32_uptr: AddrSpace = @fromBackingInt(271); | ||
| 2938 | pub const ptr64: AddrSpace = @fromBackingInt(272); | ||
| 2921 | }; | 2939 | }; |
| 2922 | 2940 | ||
| 2923 | pub fn format(addr_space: AddrSpace, w: *Writer) Writer.Error!void { | 2941 | pub fn format(addr_space: AddrSpace, w: *Writer) Writer.Error!void { |
src/codegen/llvm.zig+33-77| ... | @@ -4434,88 +4434,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const | ... | @@ -4434,88 +4434,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const |
| 4434 | 4434 | ||
| 4435 | /// Convert a zig-address space to an llvm address space. | 4435 | /// Convert a zig-address space to an llvm address space. |
| 4436 | pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace { | 4436 | pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace { |
| 4437 | for (llvmAddrSpaceInfo(target)) |info| if (info.zig == address_space) return info.llvm; | ||
| 4438 | unreachable; | ||
| 4439 | } | ||
| 4440 | |||
| 4441 | const AddrSpaceInfo = struct { | ||
| 4442 | zig: ?std.lang.AddressSpace, | ||
| 4443 | llvm: Builder.AddrSpace, | ||
| 4444 | non_integral: bool = false, | ||
| 4445 | size: ?u16 = null, | ||
| 4446 | abi: ?u16 = null, | ||
| 4447 | pref: ?u16 = null, | ||
| 4448 | idx: ?u16 = null, | ||
| 4449 | force_in_data_layout: bool = false, | ||
| 4450 | }; | ||
| 4451 | fn llvmAddrSpaceInfo(target: *const std.Target) []const AddrSpaceInfo { | ||
| 4452 | return switch (target.cpu.arch) { | 4437 | return switch (target.cpu.arch) { |
| 4453 | .x86, .x86_64 => &.{ | 4438 | .amdgcn => switch (address_space) { |
| 4454 | .{ .zig = .generic, .llvm = .default }, | 4439 | .generic => Builder.AddrSpace.amdgpu.flat, |
| 4455 | .{ .zig = .gs, .llvm = Builder.AddrSpace.x86.gs }, | 4440 | .global => Builder.AddrSpace.amdgpu.global, |
| 4456 | .{ .zig = .fs, .llvm = Builder.AddrSpace.x86.fs }, | 4441 | .shared => Builder.AddrSpace.amdgpu.local, |
| 4457 | .{ .zig = .ss, .llvm = Builder.AddrSpace.x86.ss }, | 4442 | .constant => Builder.AddrSpace.amdgpu.constant, |
| 4458 | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_sptr, .size = 32, .abi = 32, .force_in_data_layout = true }, | 4443 | .local => Builder.AddrSpace.amdgpu.private, |
| 4459 | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_uptr, .size = 32, .abi = 32, .force_in_data_layout = true }, | 4444 | else => unreachable, |
| 4460 | .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr64, .size = 64, .abi = 64, .force_in_data_layout = true }, | ||
| 4461 | }, | ||
| 4462 | .nvptx, .nvptx64 => &.{ | ||
| 4463 | .{ .zig = .generic, .llvm = Builder.AddrSpace.nvptx.generic }, | ||
| 4464 | .{ .zig = .global, .llvm = Builder.AddrSpace.nvptx.global }, | ||
| 4465 | .{ .zig = .constant, .llvm = Builder.AddrSpace.nvptx.constant }, | ||
| 4466 | .{ .zig = .param, .llvm = Builder.AddrSpace.nvptx.param }, | ||
| 4467 | .{ .zig = .shared, .llvm = Builder.AddrSpace.nvptx.shared }, | ||
| 4468 | .{ .zig = .local, .llvm = Builder.AddrSpace.nvptx.local }, | ||
| 4469 | }, | ||
| 4470 | .amdgcn => &.{ | ||
| 4471 | .{ .zig = .generic, .llvm = Builder.AddrSpace.amdgpu.flat, .force_in_data_layout = true }, | ||
| 4472 | .{ .zig = .global, .llvm = Builder.AddrSpace.amdgpu.global, .force_in_data_layout = true }, | ||
| 4473 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.region, .size = 32, .abi = 32 }, | ||
| 4474 | .{ .zig = .shared, .llvm = Builder.AddrSpace.amdgpu.local, .size = 32, .abi = 32 }, | ||
| 4475 | .{ .zig = .constant, .llvm = Builder.AddrSpace.amdgpu.constant, .force_in_data_layout = true }, | ||
| 4476 | .{ .zig = .local, .llvm = Builder.AddrSpace.amdgpu.private, .size = 32, .abi = 32 }, | ||
| 4477 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_32bit, .size = 32, .abi = 32 }, | ||
| 4478 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_fat_pointer, .non_integral = true, .size = 160, .abi = 256, .idx = 32 }, | ||
| 4479 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_resource, .non_integral = true, .size = 128, .abi = 128 }, | ||
| 4480 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_strided_pointer, .non_integral = true, .size = 192, .abi = 256, .idx = 32 }, | ||
| 4481 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_0 }, | ||
| 4482 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_1 }, | ||
| 4483 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_2 }, | ||
| 4484 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_3 }, | ||
| 4485 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_4 }, | ||
| 4486 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_5 }, | ||
| 4487 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_6 }, | ||
| 4488 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_7 }, | ||
| 4489 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_8 }, | ||
| 4490 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_9 }, | ||
| 4491 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_10 }, | ||
| 4492 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_11 }, | ||
| 4493 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_12 }, | ||
| 4494 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_13 }, | ||
| 4495 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_14 }, | ||
| 4496 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_15 }, | ||
| 4497 | .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.streamout_register }, | ||
| 4498 | }, | 4445 | }, |
| 4499 | .avr => &.{ | 4446 | .avr => switch (address_space) { |
| 4500 | .{ .zig = .generic, .llvm = Builder.AddrSpace.avr.data, .abi = 8 }, | 4447 | .generic => Builder.AddrSpace.avr.data, |
| 4501 | .{ .zig = .flash, .llvm = Builder.AddrSpace.avr.program, .abi = 8 }, | 4448 | .flash => Builder.AddrSpace.avr.program, |
| 4502 | .{ .zig = .flash1, .llvm = Builder.AddrSpace.avr.program1, .abi = 8 }, | 4449 | .flash1 => Builder.AddrSpace.avr.program1, |
| 4503 | .{ .zig = .flash2, .llvm = Builder.AddrSpace.avr.program2, .abi = 8 }, | 4450 | .flash2 => Builder.AddrSpace.avr.program2, |
| 4504 | .{ .zig = .flash3, .llvm = Builder.AddrSpace.avr.program3, .abi = 8 }, | 4451 | .flash3 => Builder.AddrSpace.avr.program3, |
| 4505 | .{ .zig = .flash4, .llvm = Builder.AddrSpace.avr.program4, .abi = 8 }, | 4452 | .flash4 => Builder.AddrSpace.avr.program4, |
| 4506 | .{ .zig = .flash5, .llvm = Builder.AddrSpace.avr.program5, .abi = 8 }, | 4453 | .flash5 => Builder.AddrSpace.avr.program5, |
| 4454 | else => unreachable, | ||
| 4507 | }, | 4455 | }, |
| 4508 | .wasm32, .wasm64 => &.{ | 4456 | .nvptx, .nvptx64 => switch (address_space) { |
| 4509 | .{ .zig = .generic, .llvm = Builder.AddrSpace.wasm.default, .force_in_data_layout = true }, | 4457 | .generic => Builder.AddrSpace.nvptx.generic, |
| 4510 | .{ .zig = null, .llvm = Builder.AddrSpace.wasm.variable, .non_integral = true }, | 4458 | .global => Builder.AddrSpace.nvptx.global, |
| 4511 | .{ .zig = .externref, .llvm = Builder.AddrSpace.wasm.externref, .non_integral = true, .size = 8, .abi = 8 }, | 4459 | .constant => Builder.AddrSpace.nvptx.constant, |
| 4512 | .{ .zig = .funcref, .llvm = Builder.AddrSpace.wasm.funcref, .non_integral = true, .size = 8, .abi = 8 }, | 4460 | .param => Builder.AddrSpace.nvptx.entry_param, |
| 4461 | .shared => Builder.AddrSpace.nvptx.shared, | ||
| 4462 | .local => Builder.AddrSpace.nvptx.local, | ||
| 4463 | else => unreachable, | ||
| 4513 | }, | 4464 | }, |
| 4514 | .m68k => &.{ | 4465 | .x86, .x86_64 => switch (address_space) { |
| 4515 | .{ .zig = .generic, .llvm = .default, .abi = 16, .pref = 32 }, | 4466 | .generic => .default, |
| 4467 | .gs => Builder.AddrSpace.x86.gs, | ||
| 4468 | .fs => Builder.AddrSpace.x86.fs, | ||
| 4469 | .ss => Builder.AddrSpace.x86.ss, | ||
| 4470 | else => unreachable, | ||
| 4516 | }, | 4471 | }, |
| 4517 | else => &.{ | 4472 | else => switch (address_space) { |
| 4518 | .{ .zig = .generic, .llvm = .default }, | 4473 | .generic => .default, |
| 4474 | else => unreachable, | ||
| 4519 | }, | 4475 | }, |
| 4520 | }; | 4476 | }; |
| 4521 | } | 4477 | } |
src/codegen/spirv/CodeGen.zig-2| ... | @@ -845,8 +845,6 @@ pub fn storageClass(cg: *const CodeGen, as: std.lang.AddressSpace) spec.StorageC | ... | @@ -845,8 +845,6 @@ pub fn storageClass(cg: *const CodeGen, as: std.lang.AddressSpace) spec.StorageC |
| 845 | .cog, | 845 | .cog, |
| 846 | .lut, | 846 | .lut, |
| 847 | .hub, | 847 | .hub, |
| 848 | .externref, | ||
| 849 | .funcref, | ||
| 850 | => unreachable, | 848 | => unreachable, |
| 851 | }; | 849 | }; |
| 852 | } | 850 | } |