authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-04 11:20:13+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-31 23:11:18+02:00
loga86ee7d90f6e802c01901d9e41e2c3617f7820a5
treef4ea62d0003124a0303c681afdd5ca8ec69be46b
parent6001074c0419bd07c71e67a7345a774e42b19c8c
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

llvm: update address spaces to LLVM 23

Note: https://codeberg.org/ziglang/zig/issues/31190#issuecomment-20523923

5 files changed, 58 insertions(+), 91 deletions(-)

lib/std/Target.zig-1
...@@ -2394,7 +2394,6 @@ pub fn supportsAddressSpace(...@@ -2394,7 +2394,6 @@ pub fn supportsAddressSpace(
2394 .param => is_nvptx,2394 .param => is_nvptx,
2395 .input, .output, .uniform, .push_constant, .storage_buffer => is_spirv,2395 .input, .output, .uniform, .push_constant, .storage_buffer => is_spirv,
2396 .physical_storage_buffer => arch == .spirv64,2396 .physical_storage_buffer => arch == .spirv64,
2397 .externref, .funcref => target.cpu.has(.wasm, .reference_types),
2398 };2397 };
2399}2398}
24002399
lib/std/lang.zig-4
...@@ -616,10 +616,6 @@ pub const AddressSpace = enum(u5) {...@@ -616,10 +616,6 @@ pub const AddressSpace = enum(u5) {
616616
617 /// This address space only addresses the "lookup" ram617 /// This address space only addresses the "lookup" ram
618 lut,618 lut,
619
620 // Web Assembly
621 externref,
622 funcref,
623};619};
624620
625/// This data structure is used by the Zig language code generation and621/// 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 };
28602859
2861 // See llvm/lib/Target/NVPTX/NVPTX.h2860 // 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 };
28702871
2871 // See llvm/lib/Target/AMDGPU/AMDGPU.h2872 // 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 };
29032904
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 };
29142922
2915 // See llvm/include/llvm/CodeGen/WasmAddressSpaces.h2923 // 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 };
29222940
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
...@@ -4400,88 +4400,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const...@@ -4400,88 +4400,44 @@ pub fn toLlvmCallConvTag(cc_tag: std.lang.CallingConvention.Tag, target: *const
44004400
4401/// Convert a zig-address space to an llvm address space.4401/// Convert a zig-address space to an llvm address space.
4402pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace {4402pub fn toLlvmAddressSpace(address_space: std.lang.AddressSpace, target: *const std.Target) Builder.AddrSpace {
4403 for (llvmAddrSpaceInfo(target)) |info| if (info.zig == address_space) return info.llvm;
4404 unreachable;
4405}
4406
4407const AddrSpaceInfo = struct {
4408 zig: ?std.lang.AddressSpace,
4409 llvm: Builder.AddrSpace,
4410 non_integral: bool = false,
4411 size: ?u16 = null,
4412 abi: ?u16 = null,
4413 pref: ?u16 = null,
4414 idx: ?u16 = null,
4415 force_in_data_layout: bool = false,
4416};
4417fn llvmAddrSpaceInfo(target: *const std.Target) []const AddrSpaceInfo {
4418 return switch (target.cpu.arch) {4403 return switch (target.cpu.arch) {
4419 .x86, .x86_64 => &.{4404 .amdgcn => switch (address_space) {
4420 .{ .zig = .generic, .llvm = .default },4405 .generic => Builder.AddrSpace.amdgpu.flat,
4421 .{ .zig = .gs, .llvm = Builder.AddrSpace.x86.gs },4406 .global => Builder.AddrSpace.amdgpu.global,
4422 .{ .zig = .fs, .llvm = Builder.AddrSpace.x86.fs },4407 .shared => Builder.AddrSpace.amdgpu.local,
4423 .{ .zig = .ss, .llvm = Builder.AddrSpace.x86.ss },4408 .constant => Builder.AddrSpace.amdgpu.constant,
4424 .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_sptr, .size = 32, .abi = 32, .force_in_data_layout = true },4409 .local => Builder.AddrSpace.amdgpu.private,
4425 .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr32_uptr, .size = 32, .abi = 32, .force_in_data_layout = true },4410 else => unreachable,
4426 .{ .zig = null, .llvm = Builder.AddrSpace.x86.ptr64, .size = 64, .abi = 64, .force_in_data_layout = true },
4427 },
4428 .nvptx, .nvptx64 => &.{
4429 .{ .zig = .generic, .llvm = Builder.AddrSpace.nvptx.generic },
4430 .{ .zig = .global, .llvm = Builder.AddrSpace.nvptx.global },
4431 .{ .zig = .constant, .llvm = Builder.AddrSpace.nvptx.constant },
4432 .{ .zig = .param, .llvm = Builder.AddrSpace.nvptx.param },
4433 .{ .zig = .shared, .llvm = Builder.AddrSpace.nvptx.shared },
4434 .{ .zig = .local, .llvm = Builder.AddrSpace.nvptx.local },
4435 },
4436 .amdgcn => &.{
4437 .{ .zig = .generic, .llvm = Builder.AddrSpace.amdgpu.flat, .force_in_data_layout = true },
4438 .{ .zig = .global, .llvm = Builder.AddrSpace.amdgpu.global, .force_in_data_layout = true },
4439 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.region, .size = 32, .abi = 32 },
4440 .{ .zig = .shared, .llvm = Builder.AddrSpace.amdgpu.local, .size = 32, .abi = 32 },
4441 .{ .zig = .constant, .llvm = Builder.AddrSpace.amdgpu.constant, .force_in_data_layout = true },
4442 .{ .zig = .local, .llvm = Builder.AddrSpace.amdgpu.private, .size = 32, .abi = 32 },
4443 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_32bit, .size = 32, .abi = 32 },
4444 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_fat_pointer, .non_integral = true, .size = 160, .abi = 256, .idx = 32 },
4445 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_resource, .non_integral = true, .size = 128, .abi = 128 },
4446 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.buffer_strided_pointer, .non_integral = true, .size = 192, .abi = 256, .idx = 32 },
4447 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_0 },
4448 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_1 },
4449 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_2 },
4450 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_3 },
4451 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_4 },
4452 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_5 },
4453 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_6 },
4454 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_7 },
4455 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_8 },
4456 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_9 },
4457 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_10 },
4458 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_11 },
4459 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_12 },
4460 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_13 },
4461 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_14 },
4462 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.constant_buffer_15 },
4463 .{ .zig = null, .llvm = Builder.AddrSpace.amdgpu.streamout_register },
4464 },4411 },
4465 .avr => &.{4412 .avr => switch (address_space) {
4466 .{ .zig = .generic, .llvm = Builder.AddrSpace.avr.data, .abi = 8 },4413 .generic => Builder.AddrSpace.avr.data,
4467 .{ .zig = .flash, .llvm = Builder.AddrSpace.avr.program, .abi = 8 },4414 .flash => Builder.AddrSpace.avr.program,
4468 .{ .zig = .flash1, .llvm = Builder.AddrSpace.avr.program1, .abi = 8 },4415 .flash1 => Builder.AddrSpace.avr.program1,
4469 .{ .zig = .flash2, .llvm = Builder.AddrSpace.avr.program2, .abi = 8 },4416 .flash2 => Builder.AddrSpace.avr.program2,
4470 .{ .zig = .flash3, .llvm = Builder.AddrSpace.avr.program3, .abi = 8 },4417 .flash3 => Builder.AddrSpace.avr.program3,
4471 .{ .zig = .flash4, .llvm = Builder.AddrSpace.avr.program4, .abi = 8 },4418 .flash4 => Builder.AddrSpace.avr.program4,
4472 .{ .zig = .flash5, .llvm = Builder.AddrSpace.avr.program5, .abi = 8 },4419 .flash5 => Builder.AddrSpace.avr.program5,
4420 else => unreachable,
4473 },4421 },
4474 .wasm32, .wasm64 => &.{4422 .nvptx, .nvptx64 => switch (address_space) {
4475 .{ .zig = .generic, .llvm = Builder.AddrSpace.wasm.default, .force_in_data_layout = true },4423 .generic => Builder.AddrSpace.nvptx.generic,
4476 .{ .zig = null, .llvm = Builder.AddrSpace.wasm.variable, .non_integral = true },4424 .global => Builder.AddrSpace.nvptx.global,
4477 .{ .zig = .externref, .llvm = Builder.AddrSpace.wasm.externref, .non_integral = true, .size = 8, .abi = 8 },4425 .constant => Builder.AddrSpace.nvptx.constant,
4478 .{ .zig = .funcref, .llvm = Builder.AddrSpace.wasm.funcref, .non_integral = true, .size = 8, .abi = 8 },4426 .param => Builder.AddrSpace.nvptx.entry_param,
4427 .shared => Builder.AddrSpace.nvptx.shared,
4428 .local => Builder.AddrSpace.nvptx.local,
4429 else => unreachable,
4479 },4430 },
4480 .m68k => &.{4431 .x86, .x86_64 => switch (address_space) {
4481 .{ .zig = .generic, .llvm = .default, .abi = 16, .pref = 32 },4432 .generic => .default,
4433 .gs => Builder.AddrSpace.x86.gs,
4434 .fs => Builder.AddrSpace.x86.fs,
4435 .ss => Builder.AddrSpace.x86.ss,
4436 else => unreachable,
4482 },4437 },
4483 else => &.{4438 else => switch (address_space) {
4484 .{ .zig = .generic, .llvm = .default },4439 .generic => .default,
4440 else => unreachable,
4485 },4441 },
4486 };4442 };
4487}4443}
src/codegen/spirv/CodeGen.zig-2
...@@ -848,8 +848,6 @@ pub fn storageClass(cg: *const CodeGen, as: std.lang.AddressSpace) spec.StorageC...@@ -848,8 +848,6 @@ pub fn storageClass(cg: *const CodeGen, as: std.lang.AddressSpace) spec.StorageC
848 .cog,848 .cog,
849 .lut,849 .lut,
850 .hub,850 .hub,
851 .externref,
852 .funcref,
853 => unreachable,851 => unreachable,
854 };852 };
855}853}