diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-01-21 19:40:44 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-01-21 19:40:44 -0500 |
| commit | 92559cd02cbf6497b99eb5193c9094e6d92c214e (patch) | |
| tree | 13ff36b93f06555fd31803750debbd03d10f4b47 /lib/std/target/amdgpu.zig | |
| parent | 15d5cab569a5ffc6495d606f460264429043aabf (diff) | |
| download | zig-92559cd02cbf6497b99eb5193c9094e6d92c214e.tar.gz zig-92559cd02cbf6497b99eb5193c9094e6d92c214e.zip | |
hit a comptime limitation with computing dense sets
Diffstat (limited to 'lib/std/target/amdgpu.zig')
| -rw-r--r-- | lib/std/target/amdgpu.zig | 517 |
1 files changed, 155 insertions, 362 deletions
diff --git a/lib/std/target/amdgpu.zig b/lib/std/target/amdgpu.zig index b1953ca83e..54bd073c2c 100644 --- a/lib/std/target/amdgpu.zig +++ b/lib/std/target/amdgpu.zig @@ -114,281 +114,206 @@ pub const Feature = enum { pub usingnamespace Cpu.Feature.feature_set_fns(Feature); pub const all_features = blk: { + @setEvalBranchQuota(10000); const len = @typeInfo(Feature).Enum.fields.len; - std.debug.assert(len <= Cpu.Feature.Set.bit_count); + std.debug.assert(len <= Cpu.Feature.Set.needed_bit_count); var result: [len]Cpu.Feature = undefined; result[@enumToInt(Feature.@"16_bit_insts")] = .{ - .index = @enumToInt(Feature.@"16_bit_insts"), - .name = @tagName(Feature.@"16_bit_insts"), .llvm_name = "16-bit-insts", .description = "Has i16/f16 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.DumpCode)] = .{ - .index = @enumToInt(Feature.DumpCode), - .name = @tagName(Feature.DumpCode), .llvm_name = "DumpCode", .description = "Dump MachineInstrs in the CodeEmitter", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.add_no_carry_insts)] = .{ - .index = @enumToInt(Feature.add_no_carry_insts), - .name = @tagName(Feature.add_no_carry_insts), .llvm_name = "add-no-carry-insts", .description = "Have VALU add/sub instructions without carry out", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.aperture_regs)] = .{ - .index = @enumToInt(Feature.aperture_regs), - .name = @tagName(Feature.aperture_regs), .llvm_name = "aperture-regs", .description = "Has Memory Aperture Base and Size Registers", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.atomic_fadd_insts)] = .{ - .index = @enumToInt(Feature.atomic_fadd_insts), - .name = @tagName(Feature.atomic_fadd_insts), .llvm_name = "atomic-fadd-insts", .description = "Has buffer_atomic_add_f32, buffer_atomic_pk_add_f16, global_atomic_add_f32, global_atomic_pk_add_f16 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.auto_waitcnt_before_barrier)] = .{ - .index = @enumToInt(Feature.auto_waitcnt_before_barrier), - .name = @tagName(Feature.auto_waitcnt_before_barrier), .llvm_name = "auto-waitcnt-before-barrier", .description = "Hardware automatically inserts waitcnt before barrier", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.ci_insts)] = .{ - .index = @enumToInt(Feature.ci_insts), - .name = @tagName(Feature.ci_insts), .llvm_name = "ci-insts", .description = "Additional instructions for CI+", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.code_object_v3)] = .{ - .index = @enumToInt(Feature.code_object_v3), - .name = @tagName(Feature.code_object_v3), .llvm_name = "code-object-v3", .description = "Generate code object version 3", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.cumode)] = .{ - .index = @enumToInt(Feature.cumode), - .name = @tagName(Feature.cumode), .llvm_name = "cumode", .description = "Enable CU wavefront execution mode", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dl_insts)] = .{ - .index = @enumToInt(Feature.dl_insts), - .name = @tagName(Feature.dl_insts), .llvm_name = "dl-insts", .description = "Has v_fmac_f32 and v_xnor_b32 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot1_insts)] = .{ - .index = @enumToInt(Feature.dot1_insts), - .name = @tagName(Feature.dot1_insts), .llvm_name = "dot1-insts", .description = "Has v_dot4_i32_i8 and v_dot8_i32_i4 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot2_insts)] = .{ - .index = @enumToInt(Feature.dot2_insts), - .name = @tagName(Feature.dot2_insts), .llvm_name = "dot2-insts", .description = "Has v_dot2_f32_f16, v_dot2_i32_i16, v_dot2_u32_u16, v_dot4_u32_u8, v_dot8_u32_u4 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot3_insts)] = .{ - .index = @enumToInt(Feature.dot3_insts), - .name = @tagName(Feature.dot3_insts), .llvm_name = "dot3-insts", .description = "Has v_dot8c_i32_i4 instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot4_insts)] = .{ - .index = @enumToInt(Feature.dot4_insts), - .name = @tagName(Feature.dot4_insts), .llvm_name = "dot4-insts", .description = "Has v_dot2c_i32_i16 instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot5_insts)] = .{ - .index = @enumToInt(Feature.dot5_insts), - .name = @tagName(Feature.dot5_insts), .llvm_name = "dot5-insts", .description = "Has v_dot2c_f32_f16 instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dot6_insts)] = .{ - .index = @enumToInt(Feature.dot6_insts), - .name = @tagName(Feature.dot6_insts), .llvm_name = "dot6-insts", .description = "Has v_dot4c_i32_i8 instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dpp)] = .{ - .index = @enumToInt(Feature.dpp), - .name = @tagName(Feature.dpp), .llvm_name = "dpp", .description = "Support DPP (Data Parallel Primitives) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dpp8)] = .{ - .index = @enumToInt(Feature.dpp8), - .name = @tagName(Feature.dpp8), .llvm_name = "dpp8", .description = "Support DPP8 (Data Parallel Primitives) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.dumpcode)] = .{ - .index = @enumToInt(Feature.dumpcode), - .name = @tagName(Feature.dumpcode), .llvm_name = "dumpcode", .description = "Dump MachineInstrs in the CodeEmitter", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.enable_ds128)] = .{ - .index = @enumToInt(Feature.enable_ds128), - .name = @tagName(Feature.enable_ds128), .llvm_name = "enable-ds128", .description = "Use ds_read|write_b128", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.enable_prt_strict_null)] = .{ - .index = @enumToInt(Feature.enable_prt_strict_null), - .name = @tagName(Feature.enable_prt_strict_null), .llvm_name = "enable-prt-strict-null", .description = "Enable zeroing of result registers for sparse texture fetches", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fast_fmaf)] = .{ - .index = @enumToInt(Feature.fast_fmaf), - .name = @tagName(Feature.fast_fmaf), .llvm_name = "fast-fmaf", .description = "Assuming f32 fma is at least as fast as mul + add", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_address_space)] = .{ - .index = @enumToInt(Feature.flat_address_space), - .name = @tagName(Feature.flat_address_space), .llvm_name = "flat-address-space", .description = "Support flat address space", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_for_global)] = .{ - .index = @enumToInt(Feature.flat_for_global), - .name = @tagName(Feature.flat_for_global), .llvm_name = "flat-for-global", .description = "Force to generate flat instruction for global", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_global_insts)] = .{ - .index = @enumToInt(Feature.flat_global_insts), - .name = @tagName(Feature.flat_global_insts), .llvm_name = "flat-global-insts", .description = "Have global_* flat memory instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_inst_offsets)] = .{ - .index = @enumToInt(Feature.flat_inst_offsets), - .name = @tagName(Feature.flat_inst_offsets), .llvm_name = "flat-inst-offsets", .description = "Flat instructions have immediate offset addressing mode", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_scratch_insts)] = .{ - .index = @enumToInt(Feature.flat_scratch_insts), - .name = @tagName(Feature.flat_scratch_insts), .llvm_name = "flat-scratch-insts", .description = "Have scratch_* flat memory instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.flat_segment_offset_bug)] = .{ - .index = @enumToInt(Feature.flat_segment_offset_bug), - .name = @tagName(Feature.flat_segment_offset_bug), .llvm_name = "flat-segment-offset-bug", .description = "GFX10 bug, inst_offset ignored in flat segment", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fma_mix_insts)] = .{ - .index = @enumToInt(Feature.fma_mix_insts), - .name = @tagName(Feature.fma_mix_insts), .llvm_name = "fma-mix-insts", .description = "Has v_fma_mix_f32, v_fma_mixlo_f16, v_fma_mixhi_f16 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fmaf)] = .{ - .index = @enumToInt(Feature.fmaf), - .name = @tagName(Feature.fmaf), .llvm_name = "fmaf", .description = "Enable single precision FMA (not as fast as mul+add, but fused)", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fp_exceptions)] = .{ - .index = @enumToInt(Feature.fp_exceptions), - .name = @tagName(Feature.fp_exceptions), .llvm_name = "fp-exceptions", .description = "Enable floating point exceptions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fp16_denormals)] = .{ - .index = @enumToInt(Feature.fp16_denormals), - .name = @tagName(Feature.fp16_denormals), .llvm_name = "fp16-denormals", .description = "Enable half precision denormal handling", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .fp64_fp16_denormals, }), }; result[@enumToInt(Feature.fp32_denormals)] = .{ - .index = @enumToInt(Feature.fp32_denormals), - .name = @tagName(Feature.fp32_denormals), .llvm_name = "fp32-denormals", .description = "Enable single precision denormal handling", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fp64)] = .{ - .index = @enumToInt(Feature.fp64), - .name = @tagName(Feature.fp64), .llvm_name = "fp64", .description = "Enable double precision operations", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.fp64_denormals)] = .{ - .index = @enumToInt(Feature.fp64_denormals), - .name = @tagName(Feature.fp64_denormals), .llvm_name = "fp64-denormals", .description = "Enable double and half precision denormal handling", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .fp64, .fp64_fp16_denormals, }), }; result[@enumToInt(Feature.fp64_fp16_denormals)] = .{ - .index = @enumToInt(Feature.fp64_fp16_denormals), - .name = @tagName(Feature.fp64_fp16_denormals), .llvm_name = "fp64-fp16-denormals", .description = "Enable double and half precision denormal handling", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .fp64, }), }; result[@enumToInt(Feature.gcn3_encoding)] = .{ - .index = @enumToInt(Feature.gcn3_encoding), - .name = @tagName(Feature.gcn3_encoding), .llvm_name = "gcn3-encoding", .description = "Encoding format for VI", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.gfx10)] = .{ - .index = @enumToInt(Feature.gfx10), - .name = @tagName(Feature.gfx10), .llvm_name = "gfx10", .description = "GFX10 GPU generation", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .@"16_bit_insts", .add_no_carry_insts, .aperture_regs, @@ -426,32 +351,24 @@ pub const all_features = blk: { }), }; result[@enumToInt(Feature.gfx10_insts)] = .{ - .index = @enumToInt(Feature.gfx10_insts), - .name = @tagName(Feature.gfx10_insts), .llvm_name = "gfx10-insts", .description = "Additional instructions for GFX10+", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.gfx7_gfx8_gfx9_insts)] = .{ - .index = @enumToInt(Feature.gfx7_gfx8_gfx9_insts), - .name = @tagName(Feature.gfx7_gfx8_gfx9_insts), .llvm_name = "gfx7-gfx8-gfx9-insts", .description = "Instructions shared in GFX7, GFX8, GFX9", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.gfx8_insts)] = .{ - .index = @enumToInt(Feature.gfx8_insts), - .name = @tagName(Feature.gfx8_insts), .llvm_name = "gfx8-insts", .description = "Additional instructions for GFX8+", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.gfx9)] = .{ - .index = @enumToInt(Feature.gfx9), - .name = @tagName(Feature.gfx9), .llvm_name = "gfx9", .description = "GFX9 GPU generation", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .@"16_bit_insts", .add_no_carry_insts, .aperture_regs, @@ -485,298 +402,214 @@ pub const all_features = blk: { }), }; result[@enumToInt(Feature.gfx9_insts)] = .{ - .index = @enumToInt(Feature.gfx9_insts), - .name = @tagName(Feature.gfx9_insts), .llvm_name = "gfx9-insts", .description = "Additional instructions for GFX9+", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.half_rate_64_ops)] = .{ - .index = @enumToInt(Feature.half_rate_64_ops), - .name = @tagName(Feature.half_rate_64_ops), .llvm_name = "half-rate-64-ops", .description = "Most fp64 instructions are half rate instead of quarter", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.inst_fwd_prefetch_bug)] = .{ - .index = @enumToInt(Feature.inst_fwd_prefetch_bug), - .name = @tagName(Feature.inst_fwd_prefetch_bug), .llvm_name = "inst-fwd-prefetch-bug", .description = "S_INST_PREFETCH instruction causes shader to hang", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.int_clamp_insts)] = .{ - .index = @enumToInt(Feature.int_clamp_insts), - .name = @tagName(Feature.int_clamp_insts), .llvm_name = "int-clamp-insts", .description = "Support clamp for integer destination", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.inv_2pi_inline_imm)] = .{ - .index = @enumToInt(Feature.inv_2pi_inline_imm), - .name = @tagName(Feature.inv_2pi_inline_imm), .llvm_name = "inv-2pi-inline-imm", .description = "Has 1 / (2 * pi) as inline immediate", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.lds_branch_vmem_war_hazard)] = .{ - .index = @enumToInt(Feature.lds_branch_vmem_war_hazard), - .name = @tagName(Feature.lds_branch_vmem_war_hazard), .llvm_name = "lds-branch-vmem-war-hazard", .description = "Switching between LDS and VMEM-tex not waiting VM_VSRC=0", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.lds_misaligned_bug)] = .{ - .index = @enumToInt(Feature.lds_misaligned_bug), - .name = @tagName(Feature.lds_misaligned_bug), .llvm_name = "lds-misaligned-bug", .description = "Some GFX10 bug with misaligned multi-dword LDS access in WGP mode", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.ldsbankcount16)] = .{ - .index = @enumToInt(Feature.ldsbankcount16), - .name = @tagName(Feature.ldsbankcount16), .llvm_name = "ldsbankcount16", .description = "The number of LDS banks per compute unit.", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.ldsbankcount32)] = .{ - .index = @enumToInt(Feature.ldsbankcount32), - .name = @tagName(Feature.ldsbankcount32), .llvm_name = "ldsbankcount32", .description = "The number of LDS banks per compute unit.", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.load_store_opt)] = .{ - .index = @enumToInt(Feature.load_store_opt), - .name = @tagName(Feature.load_store_opt), .llvm_name = "load-store-opt", .description = "Enable SI load/store optimizer pass", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.localmemorysize0)] = .{ - .index = @enumToInt(Feature.localmemorysize0), - .name = @tagName(Feature.localmemorysize0), .llvm_name = "localmemorysize0", .description = "The size of local memory in bytes", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.localmemorysize32768)] = .{ - .index = @enumToInt(Feature.localmemorysize32768), - .name = @tagName(Feature.localmemorysize32768), .llvm_name = "localmemorysize32768", .description = "The size of local memory in bytes", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.localmemorysize65536)] = .{ - .index = @enumToInt(Feature.localmemorysize65536), - .name = @tagName(Feature.localmemorysize65536), .llvm_name = "localmemorysize65536", .description = "The size of local memory in bytes", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.mad_mix_insts)] = .{ - .index = @enumToInt(Feature.mad_mix_insts), - .name = @tagName(Feature.mad_mix_insts), .llvm_name = "mad-mix-insts", .description = "Has v_mad_mix_f32, v_mad_mixlo_f16, v_mad_mixhi_f16 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.mai_insts)] = .{ - .index = @enumToInt(Feature.mai_insts), - .name = @tagName(Feature.mai_insts), .llvm_name = "mai-insts", .description = "Has mAI instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.max_private_element_size_16)] = .{ - .index = @enumToInt(Feature.max_private_element_size_16), - .name = @tagName(Feature.max_private_element_size_16), .llvm_name = "max-private-element-size-16", .description = "Maximum private access size may be 16", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.max_private_element_size_4)] = .{ - .index = @enumToInt(Feature.max_private_element_size_4), - .name = @tagName(Feature.max_private_element_size_4), .llvm_name = "max-private-element-size-4", .description = "Maximum private access size may be 4", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.max_private_element_size_8)] = .{ - .index = @enumToInt(Feature.max_private_element_size_8), - .name = @tagName(Feature.max_private_element_size_8), .llvm_name = "max-private-element-size-8", .description = "Maximum private access size may be 8", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.mimg_r128)] = .{ - .index = @enumToInt(Feature.mimg_r128), - .name = @tagName(Feature.mimg_r128), .llvm_name = "mimg-r128", .description = "Support 128-bit texture resources", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.movrel)] = .{ - .index = @enumToInt(Feature.movrel), - .name = @tagName(Feature.movrel), .llvm_name = "movrel", .description = "Has v_movrel*_b32 instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.no_data_dep_hazard)] = .{ - .index = @enumToInt(Feature.no_data_dep_hazard), - .name = @tagName(Feature.no_data_dep_hazard), .llvm_name = "no-data-dep-hazard", .description = "Does not need SW waitstates", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.no_sdst_cmpx)] = .{ - .index = @enumToInt(Feature.no_sdst_cmpx), - .name = @tagName(Feature.no_sdst_cmpx), .llvm_name = "no-sdst-cmpx", .description = "V_CMPX does not write VCC/SGPR in addition to EXEC", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.no_sram_ecc_support)] = .{ - .index = @enumToInt(Feature.no_sram_ecc_support), - .name = @tagName(Feature.no_sram_ecc_support), .llvm_name = "no-sram-ecc-support", .description = "Hardware does not support SRAM ECC", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.no_xnack_support)] = .{ - .index = @enumToInt(Feature.no_xnack_support), - .name = @tagName(Feature.no_xnack_support), .llvm_name = "no-xnack-support", .description = "Hardware does not support XNACK", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.nsa_encoding)] = .{ - .index = @enumToInt(Feature.nsa_encoding), - .name = @tagName(Feature.nsa_encoding), .llvm_name = "nsa-encoding", .description = "Support NSA encoding for image instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.nsa_to_vmem_bug)] = .{ - .index = @enumToInt(Feature.nsa_to_vmem_bug), - .name = @tagName(Feature.nsa_to_vmem_bug), .llvm_name = "nsa-to-vmem-bug", .description = "MIMG-NSA followed by VMEM fail if EXEC_LO or EXEC_HI equals zero", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.offset_3f_bug)] = .{ - .index = @enumToInt(Feature.offset_3f_bug), - .name = @tagName(Feature.offset_3f_bug), .llvm_name = "offset-3f-bug", .description = "Branch offset of 3f hardware bug", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.pk_fmac_f16_inst)] = .{ - .index = @enumToInt(Feature.pk_fmac_f16_inst), - .name = @tagName(Feature.pk_fmac_f16_inst), .llvm_name = "pk-fmac-f16-inst", .description = "Has v_pk_fmac_f16 instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.promote_alloca)] = .{ - .index = @enumToInt(Feature.promote_alloca), - .name = @tagName(Feature.promote_alloca), .llvm_name = "promote-alloca", .description = "Enable promote alloca pass", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.r128_a16)] = .{ - .index = @enumToInt(Feature.r128_a16), - .name = @tagName(Feature.r128_a16), .llvm_name = "r128-a16", .description = "Support 16 bit coordindates/gradients/lod/clamp/mip types on gfx9", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.register_banking)] = .{ - .index = @enumToInt(Feature.register_banking), - .name = @tagName(Feature.register_banking), .llvm_name = "register-banking", .description = "Has register banking", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.s_memrealtime)] = .{ - .index = @enumToInt(Feature.s_memrealtime), - .name = @tagName(Feature.s_memrealtime), .llvm_name = "s-memrealtime", .description = "Has s_memrealtime instruction", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.scalar_atomics)] = .{ - .index = @enumToInt(Feature.scalar_atomics), - .name = @tagName(Feature.scalar_atomics), .llvm_name = "scalar-atomics", .description = "Has atomic scalar memory instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.scalar_flat_scratch_insts)] = .{ - .index = @enumToInt(Feature.scalar_flat_scratch_insts), - .name = @tagName(Feature.scalar_flat_scratch_insts), .llvm_name = "scalar-flat-scratch-insts", .description = "Have s_scratch_* flat memory instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.scalar_stores)] = .{ - .index = @enumToInt(Feature.scalar_stores), - .name = @tagName(Feature.scalar_stores), .llvm_name = "scalar-stores", .description = "Has store scalar memory instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa)] = .{ - .index = @enumToInt(Feature.sdwa), - .name = @tagName(Feature.sdwa), .llvm_name = "sdwa", .description = "Support SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa_mav)] = .{ - .index = @enumToInt(Feature.sdwa_mav), - .name = @tagName(Feature.sdwa_mav), .llvm_name = "sdwa-mav", .description = "Support v_mac_f32/f16 with SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa_omod)] = .{ - .index = @enumToInt(Feature.sdwa_omod), - .name = @tagName(Feature.sdwa_omod), .llvm_name = "sdwa-omod", .description = "Support OMod with SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa_out_mods_vopc)] = .{ - .index = @enumToInt(Feature.sdwa_out_mods_vopc), - .name = @tagName(Feature.sdwa_out_mods_vopc), .llvm_name = "sdwa-out-mods-vopc", .description = "Support clamp for VOPC with SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa_scalar)] = .{ - .index = @enumToInt(Feature.sdwa_scalar), - .name = @tagName(Feature.sdwa_scalar), .llvm_name = "sdwa-scalar", .description = "Support scalar register with SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sdwa_sdst)] = .{ - .index = @enumToInt(Feature.sdwa_sdst), - .name = @tagName(Feature.sdwa_sdst), .llvm_name = "sdwa-sdst", .description = "Support scalar dst for VOPC with SDWA (Sub-DWORD Addressing) extension", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.sea_islands)] = .{ - .index = @enumToInt(Feature.sea_islands), - .name = @tagName(Feature.sea_islands), .llvm_name = "sea-islands", .description = "SEA_ISLANDS GPU generation", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .ci_insts, .flat_address_space, .fp64, @@ -790,32 +623,24 @@ pub const all_features = blk: { }), }; result[@enumToInt(Feature.sgpr_init_bug)] = .{ - .index = @enumToInt(Feature.sgpr_init_bug), - .name = @tagName(Feature.sgpr_init_bug), .llvm_name = "sgpr-init-bug", .description = "VI SGPR initialization bug requiring a fixed SGPR allocation size", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.si_scheduler)] = .{ - .index = @enumToInt(Feature.si_scheduler), - .name = @tagName(Feature.si_scheduler), .llvm_name = "si-scheduler", .description = "Enable SI Machine Scheduler", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.smem_to_vector_write_hazard)] = .{ - .index = @enumToInt(Feature.smem_to_vector_write_hazard), - .name = @tagName(Feature.smem_to_vector_write_hazard), .llvm_name = "smem-to-vector-write-hazard", .description = "s_load_dword followed by v_cmp page faults", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.southern_islands)] = .{ - .index = @enumToInt(Feature.southern_islands), - .name = @tagName(Feature.southern_islands), .llvm_name = "southern-islands", .description = "SOUTHERN_ISLANDS GPU generation", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .fp64, .ldsbankcount32, .localmemorysize32768, @@ -828,88 +653,64 @@ pub const all_features = blk: { }), }; result[@enumToInt(Feature.sram_ecc)] = .{ - .index = @enumToInt(Feature.sram_ecc), - .name = @tagName(Feature.sram_ecc), .llvm_name = "sram-ecc", .description = "Enable SRAM ECC", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.trap_handler)] = .{ - .index = @enumToInt(Feature.trap_handler), - .name = @tagName(Feature.trap_handler), .llvm_name = "trap-handler", .description = "Trap handler support", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.trig_reduced_range)] = .{ - .index = @enumToInt(Feature.trig_reduced_range), - .name = @tagName(Feature.trig_reduced_range), .llvm_name = "trig-reduced-range", .description = "Requires use of fract on arguments to trig instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.unaligned_buffer_access)] = .{ - .index = @enumToInt(Feature.unaligned_buffer_access), - .name = @tagName(Feature.unaligned_buffer_access), .llvm_name = "unaligned-buffer-access", .description = "Support unaligned global loads and stores", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.unaligned_scratch_access)] = .{ - .index = @enumToInt(Feature.unaligned_scratch_access), - .name = @tagName(Feature.unaligned_scratch_access), .llvm_name = "unaligned-scratch-access", .description = "Support unaligned scratch loads and stores", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.unpacked_d16_vmem)] = .{ - .index = @enumToInt(Feature.unpacked_d16_vmem), - .name = @tagName(Feature.unpacked_d16_vmem), .llvm_name = "unpacked-d16-vmem", .description = "Has unpacked d16 vmem instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.unsafe_ds_offset_folding)] = .{ - .index = @enumToInt(Feature.unsafe_ds_offset_folding), - .name = @tagName(Feature.unsafe_ds_offset_folding), .llvm_name = "unsafe-ds-offset-folding", .description = "Force using DS instruction immediate offsets on SI", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vcmpx_exec_war_hazard)] = .{ - .index = @enumToInt(Feature.vcmpx_exec_war_hazard), - .name = @tagName(Feature.vcmpx_exec_war_hazard), .llvm_name = "vcmpx-exec-war-hazard", .description = "V_CMPX WAR hazard on EXEC (V_CMPX issue ONLY)", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vcmpx_permlane_hazard)] = .{ - .index = @enumToInt(Feature.vcmpx_permlane_hazard), - .name = @tagName(Feature.vcmpx_permlane_hazard), .llvm_name = "vcmpx-permlane-hazard", .description = "TODO: describe me", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vgpr_index_mode)] = .{ - .index = @enumToInt(Feature.vgpr_index_mode), - .name = @tagName(Feature.vgpr_index_mode), .llvm_name = "vgpr-index-mode", .description = "Has VGPR mode register indexing", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vmem_to_scalar_write_hazard)] = .{ - .index = @enumToInt(Feature.vmem_to_scalar_write_hazard), - .name = @tagName(Feature.vmem_to_scalar_write_hazard), .llvm_name = "vmem-to-scalar-write-hazard", .description = "VMEM instruction followed by scalar writing to EXEC mask, M0 or SGPR leads to incorrect execution.", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.volcanic_islands)] = .{ - .index = @enumToInt(Feature.volcanic_islands), - .name = @tagName(Feature.volcanic_islands), .llvm_name = "volcanic-islands", .description = "VOLCANIC_ISLANDS GPU generation", - .dependencies = featureSet(&[_]Feature{ + .dependencies = sparseFeatureSet(&[_]Feature{ .@"16_bit_insts", .ci_insts, .dpp, @@ -935,54 +736,46 @@ pub const all_features = blk: { }), }; result[@enumToInt(Feature.vop3_literal)] = .{ - .index = @enumToInt(Feature.vop3_literal), - .name = @tagName(Feature.vop3_literal), .llvm_name = "vop3-literal", .description = "Can use one literal in VOP3", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vop3p)] = .{ - .index = @enumToInt(Feature.vop3p), - .name = @tagName(Feature.vop3p), .llvm_name = "vop3p", .description = "Has VOP3P packed instructions", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.vscnt)] = .{ - .index = @enumToInt(Feature.vscnt), - .name = @tagName(Feature.vscnt), .llvm_name = "vscnt", .description = "Has separate store vscnt counter", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.wavefrontsize16)] = .{ - .index = @enumToInt(Feature.wavefrontsize16), - .name = @tagName(Feature.wavefrontsize16), .llvm_name = "wavefrontsize16", .description = "The number of threads per wavefront", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.wavefrontsize32)] = .{ - .index = @enumToInt(Feature.wavefrontsize32), - .name = @tagName(Feature.wavefrontsize32), .llvm_name = "wavefrontsize32", .description = "The number of threads per wavefront", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.wavefrontsize64)] = .{ - .index = @enumToInt(Feature.wavefrontsize64), - .name = @tagName(Feature.wavefrontsize64), .llvm_name = "wavefrontsize64", .description = "The number of threads per wavefront", - .dependencies = featureSet(&[_]Feature{}), + .dependencies = sparseFeatureSet(&[_]Feature{}), }; result[@enumToInt(Feature.xnack)] = .{ - .index = @enumToInt(Feature.xnack), - .name = @tagName(Feature.xnack), .llvm_name = "xnack", .description = "Enable XNACK support", - .dependencies = featureSet(&[_]Feature{}), - }; + .dependencies = sparseFeatureSet(&[_]Feature{}), + }; + const ti = @typeInfo(Feature); + for (result) |*elem, i| { + elem.index = i; + elem.name = ti.Enum.fields[i].name; + elem.dependencies.initAsDependencies(i, &result); + } break :blk result; }; @@ -990,7 +783,7 @@ pub const cpu = struct { pub const bonaire = Cpu{ .name = "bonaire", .llvm_name = "bonaire", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1000,7 +793,7 @@ pub const cpu = struct { pub const carrizo = Cpu{ .name = "carrizo", .llvm_name = "carrizo", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1013,7 +806,7 @@ pub const cpu = struct { pub const fiji = Cpu{ .name = "fiji", .llvm_name = "fiji", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1024,14 +817,14 @@ pub const cpu = struct { pub const generic = Cpu{ .name = "generic", .llvm_name = "generic", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .wavefrontsize64, }), }; pub const generic_hsa = Cpu{ .name = "generic_hsa", .llvm_name = "generic-hsa", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .flat_address_space, .wavefrontsize64, }), @@ -1039,7 +832,7 @@ pub const cpu = struct { pub const gfx1010 = Cpu{ .name = "gfx1010", .llvm_name = "gfx1010", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .dl_insts, .flat_segment_offset_bug, @@ -1065,7 +858,7 @@ pub const cpu = struct { pub const gfx1011 = Cpu{ .name = "gfx1011", .llvm_name = "gfx1011", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .dl_insts, .dot1_insts, @@ -1094,7 +887,7 @@ pub const cpu = struct { pub const gfx1012 = Cpu{ .name = "gfx1012", .llvm_name = "gfx1012", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .dl_insts, .dot1_insts, @@ -1124,7 +917,7 @@ pub const cpu = struct { pub const gfx600 = Cpu{ .name = "gfx600", .llvm_name = "gfx600", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1136,7 +929,7 @@ pub const cpu = struct { pub const gfx601 = Cpu{ .name = "gfx601", .llvm_name = "gfx601", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1146,7 +939,7 @@ pub const cpu = struct { pub const gfx700 = Cpu{ .name = "gfx700", .llvm_name = "gfx700", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1156,7 +949,7 @@ pub const cpu = struct { pub const gfx701 = Cpu{ .name = "gfx701", .llvm_name = "gfx701", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1168,7 +961,7 @@ pub const cpu = struct { pub const gfx702 = Cpu{ .name = "gfx702", .llvm_name = "gfx702", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .ldsbankcount16, @@ -1179,7 +972,7 @@ pub const cpu = struct { pub const gfx703 = Cpu{ .name = "gfx703", .llvm_name = "gfx703", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount16, .no_xnack_support, @@ -1189,7 +982,7 @@ pub const cpu = struct { pub const gfx704 = Cpu{ .name = "gfx704", .llvm_name = "gfx704", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1199,7 +992,7 @@ pub const cpu = struct { pub const gfx801 = Cpu{ .name = "gfx801", .llvm_name = "gfx801", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1212,7 +1005,7 @@ pub const cpu = struct { pub const gfx802 = Cpu{ .name = "gfx802", .llvm_name = "gfx802", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1224,7 +1017,7 @@ pub const cpu = struct { pub const gfx803 = Cpu{ .name = "gfx803", .llvm_name = "gfx803", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1235,7 +1028,7 @@ pub const cpu = struct { pub const gfx810 = Cpu{ .name = "gfx810", .llvm_name = "gfx810", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount16, .volcanic_islands, @@ -1245,7 +1038,7 @@ pub const cpu = struct { pub const gfx900 = Cpu{ .name = "gfx900", .llvm_name = "gfx900", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .gfx9, .ldsbankcount32, @@ -1257,7 +1050,7 @@ pub const cpu = struct { pub const gfx902 = Cpu{ .name = "gfx902", .llvm_name = "gfx902", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .gfx9, .ldsbankcount32, @@ -1269,7 +1062,7 @@ pub const cpu = struct { pub const gfx904 = Cpu{ .name = "gfx904", .llvm_name = "gfx904", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fma_mix_insts, .gfx9, @@ -1281,7 +1074,7 @@ pub const cpu = struct { pub const gfx906 = Cpu{ .name = "gfx906", .llvm_name = "gfx906", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .dl_insts, .dot1_insts, @@ -1296,7 +1089,7 @@ pub const cpu = struct { pub const gfx908 = Cpu{ .name = "gfx908", .llvm_name = "gfx908", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .atomic_fadd_insts, .code_object_v3, .dl_insts, @@ -1318,7 +1111,7 @@ pub const cpu = struct { pub const gfx909 = Cpu{ .name = "gfx909", .llvm_name = "gfx909", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .gfx9, .ldsbankcount32, @@ -1329,7 +1122,7 @@ pub const cpu = struct { pub const hainan = Cpu{ .name = "hainan", .llvm_name = "hainan", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1339,7 +1132,7 @@ pub const cpu = struct { pub const hawaii = Cpu{ .name = "hawaii", .llvm_name = "hawaii", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1351,7 +1144,7 @@ pub const cpu = struct { pub const iceland = Cpu{ .name = "iceland", .llvm_name = "iceland", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1363,7 +1156,7 @@ pub const cpu = struct { pub const kabini = Cpu{ .name = "kabini", .llvm_name = "kabini", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount16, .no_xnack_support, @@ -1373,7 +1166,7 @@ pub const cpu = struct { pub const kaveri = Cpu{ .name = "kaveri", .llvm_name = "kaveri", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1383,7 +1176,7 @@ pub const cpu = struct { pub const mullins = Cpu{ .name = "mullins", .llvm_name = "mullins", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount16, .no_xnack_support, @@ -1393,7 +1186,7 @@ pub const cpu = struct { pub const oland = Cpu{ .name = "oland", .llvm_name = "oland", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1403,7 +1196,7 @@ pub const cpu = struct { pub const pitcairn = Cpu{ .name = "pitcairn", .llvm_name = "pitcairn", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1413,7 +1206,7 @@ pub const cpu = struct { pub const polaris10 = Cpu{ .name = "polaris10", .llvm_name = "polaris10", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1424,7 +1217,7 @@ pub const cpu = struct { pub const polaris11 = Cpu{ .name = "polaris11", .llvm_name = "polaris11", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1435,7 +1228,7 @@ pub const cpu = struct { pub const stoney = Cpu{ .name = "stoney", .llvm_name = "stoney", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount16, .volcanic_islands, @@ -1445,7 +1238,7 @@ pub const cpu = struct { pub const tahiti = Cpu{ .name = "tahiti", .llvm_name = "tahiti", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .fast_fmaf, .half_rate_64_ops, @@ -1457,7 +1250,7 @@ pub const cpu = struct { pub const tonga = Cpu{ .name = "tonga", .llvm_name = "tonga", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, @@ -1469,7 +1262,7 @@ pub const cpu = struct { pub const verde = Cpu{ .name = "verde", .llvm_name = "verde", - .features = featureSet(&[_]Feature{ + .features = featureSet(&all_features, &[_]Feature{ .code_object_v3, .ldsbankcount32, .no_xnack_support, |
