From d34fae26d5bb556debf6b0a1d570ae936331a74b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 25 Apr 2024 22:52:15 -0700 Subject: [PATCH] LLVM 18 std lib updates and fixes * some manual fixes to generated CPU features code. In the future it would be nice to make the script do those automatically. * add to various target OS switches. Some of the values I was unsure of and added TODO panics, for example in the case of spirv CPU arch. --- lib/std/Target.zig | 24 ++++++++++++- lib/std/Target/arm.zig | 1 - lib/std/Target/x86.zig | 79 ------------------------------------------ src/Module.zig | 2 ++ src/codegen/llvm.zig | 43 ++++++++++++++++------- src/target.zig | 1 + 6 files changed, 56 insertions(+), 94 deletions(-) diff --git a/lib/std/Target.zig b/lib/std/Target.zig index 2e09fff34a..bd98ffb453 100644 --- a/lib/std/Target.zig +++ b/lib/std/Target.zig @@ -169,6 +169,7 @@ pub const Os = struct { .vulkan, .plan9, .illumos, + .serenity, .other, => .none, @@ -177,6 +178,7 @@ pub const Os = struct { .ios, .tvos, .watchos, + .xros, .netbsd, .openbsd, .dragonfly, @@ -389,6 +391,7 @@ pub const Os = struct { .vulkan, .plan9, .illumos, + .serenity, .other, => .{ .none = {} }, @@ -431,6 +434,7 @@ pub const Os = struct { .max = .{ .major = 17, .minor = 1, .patch = 0 }, }, }, + .xros => @panic("TODO what version is xros on right now?"), .netbsd => .{ .semver = .{ .min = .{ .major = 8, .minor = 0, .patch = 0 }, @@ -527,11 +531,13 @@ pub const Os = struct { .ios, .tvos, .watchos, + .xros, .dragonfly, .openbsd, .haiku, .solaris, .illumos, + .serenity, => true, .linux, @@ -685,11 +691,13 @@ pub const Abi = enum { .ios, .tvos, .watchos, + .xros, .driverkit, .shadermodel, .liteos, // TODO: audit this .solaris, .illumos, + .serenity, => .none, }; } @@ -1179,6 +1187,7 @@ pub const Cpu = struct { .s390x => .S390, .ve => .NONE, .spu_2 => .SPU_2, + .spirv => .NONE, .spirv32 => .NONE, .spirv64 => .NONE, .loongarch32 => .NONE, @@ -1295,6 +1304,7 @@ pub const Cpu = struct { .ve, .spu_2, // GPU bitness is opaque. For now, assume little endian. + .spirv, .spirv32, .spirv64, .dxil, @@ -1419,6 +1429,7 @@ pub const Cpu = struct { } fn allCpusFromDecls(comptime cpus: type) []const *const Cpu.Model { + @setEvalBranchQuota(2000); const decls = @typeInfo(cpus).Struct.decls; var array: [decls.len]*const Cpu.Model = undefined; for (decls, 0..) |decl, i| { @@ -1753,6 +1764,7 @@ pub const DynamicLinker = struct { .nvptx64, .spu_2, .avr, + .spirv, .spirv32, .spirv64, => none, @@ -1794,6 +1806,7 @@ pub const DynamicLinker = struct { .tvos, .watchos, .macos, + .xros, => init("/usr/lib/dyld"), // Operating systems in this list have been verified as not having a standard @@ -1808,6 +1821,7 @@ pub const DynamicLinker = struct { .vulkan, .other, .plan9, + .serenity, => none, // TODO revisit when multi-arch for Haiku is available @@ -1921,6 +1935,7 @@ pub fn maxIntAlignment(target: Target) u16 { .spir, .kalimba, .renderscript32, + .spirv, .spirv32, .shave, .le64, @@ -2012,6 +2027,8 @@ pub fn ptrBitWidth_cpu_abi(cpu: Cpu, abi: Abi) u16 { => 64, .sparc => if (std.Target.sparc.featureSetHas(cpu.features, .v9)) 64 else 32, + + .spirv => @panic("TODO what should this value be?"), }; } @@ -2360,7 +2377,7 @@ pub fn c_type_bit_size(target: Target, c_type: CType) u16 { }, }, - .macos, .ios, .tvos, .watchos => switch (c_type) { + .macos, .ios, .tvos, .watchos, .xros => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, @@ -2440,6 +2457,7 @@ pub fn c_type_bit_size(target: Target, c_type: CType) u16 { .driverkit, .shadermodel, .liteos, + .serenity, => @panic("TODO specify the C integer and float type sizes for this OS"), } } @@ -2547,6 +2565,8 @@ pub fn c_type_alignment(target: Target, c_type: CType) u16 { .wasm32, .wasm64, => 16, + + .spirv => @panic("TODO what should this value be?"), }), ); } @@ -2673,6 +2693,8 @@ pub fn c_type_preferred_alignment(target: Target, c_type: CType) u16 { .wasm32, .wasm64, => 16, + + .spirv => @panic("TODO what should this value be?"), }), ); } diff --git a/lib/std/Target/arm.zig b/lib/std/Target/arm.zig index 49e94ddb82..e1758b37f7 100644 --- a/lib/std/Target/arm.zig +++ b/lib/std/Target/arm.zig @@ -187,7 +187,6 @@ pub const Feature = enum { v9_3a, v9_4a, v9_5a, - v9_5a, v9a, vfp2, vfp2sp, diff --git a/lib/std/Target/x86.zig b/lib/std/Target/x86.zig index a95b37d070..20820cbb6b 100644 --- a/lib/std/Target/x86.zig +++ b/lib/std/Target/x86.zig @@ -1523,85 +1523,6 @@ pub const cpu = struct { .xsaves, }), }; - pub const arrowlake_s = CpuModel{ - .name = "arrowlake_s", - .llvm_name = "arrowlake_s", - .features = featureSet(&[_]Feature{ - .@"64bit", - .adx, - .allow_light_256_bit, - .avxifma, - .avxneconvert, - .avxvnni, - .avxvnniint16, - .avxvnniint8, - .bmi, - .bmi2, - .cldemote, - .clflushopt, - .clwb, - .cmov, - .cmpccxadd, - .crc32, - .cx16, - .enqcmd, - .f16c, - .false_deps_perm, - .false_deps_popcnt, - .fast_15bytenop, - .fast_gather, - .fast_scalar_fsqrt, - .fast_shld_rotate, - .fast_variable_crosslane_shuffle, - .fast_variable_perlane_shuffle, - .fast_vector_fsqrt, - .fma, - .fsgsbase, - .fxsr, - .gfni, - .hreset, - .idivq_to_divl, - .invpcid, - .lzcnt, - .macrofusion, - .mmx, - .movbe, - .movdir64b, - .movdiri, - .no_bypass_delay_blend, - .no_bypass_delay_mov, - .no_bypass_delay_shuffle, - .nopl, - .pconfig, - .pku, - .popcnt, - .prefer_movmsk_over_vtest, - .prfchw, - .ptwrite, - .rdpid, - .rdrnd, - .rdseed, - .sahf, - .serialize, - .sha, - .sha512, - .shstk, - .slow_3ops_lea, - .sm3, - .sm4, - .tuning_fast_imm_vector_shift, - .uintr, - .vaes, - .vpclmulqdq, - .vzeroupper, - .waitpkg, - .widekl, - .x87, - .xsavec, - .xsaveopt, - .xsaves, - }), - }; pub const athlon = CpuModel{ .name = "athlon", .llvm_name = "athlon", diff --git a/src/Module.zig b/src/Module.zig index 146e4e92a0..c571c851fe 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -5976,6 +5976,8 @@ pub fn atomicPtrAlignment( => 128, .x86_64 => if (std.Target.x86.featureSetHas(target.cpu.features, .cx16)) 128 else 64, + + .spirv => @panic("TODO what should this value be?"), }; const int_ty = switch (ty.zigTypeTag(mod)) { diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index 3529e9f411..4142ad0a19 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -92,6 +92,7 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .hsail64 => "hsail64", .spir => "spir", .spir64 => "spir64", + .spirv => "spirv", .spirv32 => "spirv32", .spirv64 => "spirv64", .kalimba => "kalimba", @@ -109,8 +110,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { const llvm_os = switch (target.os.tag) { .freestanding => "unknown", - .ananas => "ananas", - .cloudabi => "cloudabi", .dragonfly => "dragonfly", .freebsd => "freebsd", .fuchsia => "fuchsia", @@ -123,7 +122,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .windows => "windows", .zos => "zos", .haiku => "haiku", - .minix => "minix", .rtems => "rtems", .nacl => "nacl", .aix => "aix", @@ -134,7 +132,6 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .ps5 => "ps5", .elfiamcu => "elfiamcu", .mesa3d => "mesa3d", - .contiki => "contiki", .amdpal => "amdpal", .hermit => "hermit", .hurd => "hurd", @@ -148,10 +145,17 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { .driverkit => "driverkit", .shadermodel => "shadermodel", .liteos => "liteos", + .xros => "xros", + .serenity => "serenity", + .vulkan => "vulkan", + .opencl, .glsl450, - .vulkan, .plan9, + .ananas, + .cloudabi, + .minix, + .contiki, .other, => "unknown", }; @@ -216,10 +220,18 @@ pub fn targetTriple(allocator: Allocator, target: std.Target) ![]const u8 { pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType { return switch (os_tag) { - .freestanding, .other, .opencl, .glsl450, .vulkan, .plan9 => .UnknownOS, + .freestanding, + .other, + .opencl, + .glsl450, + .plan9, + .ananas, + .cloudabi, + .minix, + .contiki, + => .UnknownOS, + .windows, .uefi => .Win32, - .ananas => .Ananas, - .cloudabi => .CloudABI, .dragonfly => .DragonFly, .freebsd => .FreeBSD, .fuchsia => .Fuchsia, @@ -233,7 +245,6 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType { .solaris, .illumos => .Solaris, .zos => .ZOS, .haiku => .Haiku, - .minix => .Minix, .rtems => .RTEMS, .nacl => .NaCl, .aix => .AIX, @@ -245,8 +256,8 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType { .elfiamcu => .ELFIAMCU, .tvos => .TvOS, .watchos => .WatchOS, + .xros => .XROS, .mesa3d => .Mesa3D, - .contiki => .Contiki, .amdpal => .AMDPAL, .hermit => .HermitCore, .hurd => .Hurd, @@ -255,6 +266,8 @@ pub fn targetOs(os_tag: std.Target.Os.Tag) llvm.OSType { .driverkit => .DriverKit, .shadermodel => .ShaderModel, .liteos => .LiteOS, + .vulkan => .Vulkan, + .serenity => .Serenity, }; } @@ -310,6 +323,9 @@ pub fn targetArch(arch_tag: std.Target.Cpu.Arch) llvm.ArchType { .hsail64 => .hsail64, .spir => .spir, .spir64 => .spir64, + .spirv => .spirv, + .spirv32 => .spirv32, + .spirv64 => .spirv64, .kalimba => .kalimba, .shave => .shave, .lanai => .lanai, @@ -318,7 +334,7 @@ pub fn targetArch(arch_tag: std.Target.Cpu.Arch) llvm.ArchType { .renderscript32 => .renderscript32, .renderscript64 => .renderscript64, .ve => .ve, - .spu_2, .spirv32, .spirv64 => .UnknownArch, + .spu_2 => .UnknownArch, }; } @@ -11969,6 +11985,9 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { .shave, .spir, .spir64, + .spirv, + .spirv32, + .spirv64, .kalimba, .renderscript32, .renderscript64, @@ -11978,7 +11997,5 @@ pub fn initializeLLVMTarget(arch: std.Target.Cpu.Arch) void { => {}, .spu_2 => unreachable, // LLVM does not support this backend - .spirv32 => unreachable, // LLVM does not support this backend - .spirv64 => unreachable, // LLVM does not support this backend } } diff --git a/src/target.zig b/src/target.zig index 3ad36deab2..6e77a965cd 100644 --- a/src/target.zig +++ b/src/target.zig @@ -159,6 +159,7 @@ pub fn hasLlvmSupport(target: std.Target, ofmt: std.Target.ObjectFormat) bool { .hsail64, .spir, .spir64, + .spirv, .spirv32, .spirv64, .kalimba,