const all_features: type = blk: {
    const len = @typeInfo(Feature).Enum.fields.len;
    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
    var result: [len]CpuFeature = undefined;
    result[@intFromEnum(Feature.ptx32)] = .{
        .llvm_name = "ptx32",
        .description = "Use PTX version 3.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx40)] = .{
        .llvm_name = "ptx40",
        .description = "Use PTX version 4.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx41)] = .{
        .llvm_name = "ptx41",
        .description = "Use PTX version 4.1",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx42)] = .{
        .llvm_name = "ptx42",
        .description = "Use PTX version 4.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx43)] = .{
        .llvm_name = "ptx43",
        .description = "Use PTX version 4.3",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx50)] = .{
        .llvm_name = "ptx50",
        .description = "Use PTX version 5.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx60)] = .{
        .llvm_name = "ptx60",
        .description = "Use PTX version 6.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx61)] = .{
        .llvm_name = "ptx61",
        .description = "Use PTX version 6.1",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx63)] = .{
        .llvm_name = "ptx63",
        .description = "Use PTX version 6.3",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx64)] = .{
        .llvm_name = "ptx64",
        .description = "Use PTX version 6.4",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx65)] = .{
        .llvm_name = "ptx65",
        .description = "Use PTX version 6.5",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx70)] = .{
        .llvm_name = "ptx70",
        .description = "Use PTX version 7.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx71)] = .{
        .llvm_name = "ptx71",
        .description = "Use PTX version 7.1",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx72)] = .{
        .llvm_name = "ptx72",
        .description = "Use PTX version 7.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx73)] = .{
        .llvm_name = "ptx73",
        .description = "Use PTX version 7.3",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx74)] = .{
        .llvm_name = "ptx74",
        .description = "Use PTX version 7.4",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx75)] = .{
        .llvm_name = "ptx75",
        .description = "Use PTX version 7.5",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx76)] = .{
        .llvm_name = "ptx76",
        .description = "Use PTX version 7.6",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx77)] = .{
        .llvm_name = "ptx77",
        .description = "Use PTX version 7.7",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.ptx78)] = .{
        .llvm_name = "ptx78",
        .description = "Use PTX version 7.8",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_20)] = .{
        .llvm_name = "sm_20",
        .description = "Target SM 2.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_21)] = .{
        .llvm_name = "sm_21",
        .description = "Target SM 2.1",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_30)] = .{
        .llvm_name = "sm_30",
        .description = "Target SM 3.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_32)] = .{
        .llvm_name = "sm_32",
        .description = "Target SM 3.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_35)] = .{
        .llvm_name = "sm_35",
        .description = "Target SM 3.5",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_37)] = .{
        .llvm_name = "sm_37",
        .description = "Target SM 3.7",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_50)] = .{
        .llvm_name = "sm_50",
        .description = "Target SM 5.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_52)] = .{
        .llvm_name = "sm_52",
        .description = "Target SM 5.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_53)] = .{
        .llvm_name = "sm_53",
        .description = "Target SM 5.3",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_60)] = .{
        .llvm_name = "sm_60",
        .description = "Target SM 6.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_61)] = .{
        .llvm_name = "sm_61",
        .description = "Target SM 6.1",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_62)] = .{
        .llvm_name = "sm_62",
        .description = "Target SM 6.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_70)] = .{
        .llvm_name = "sm_70",
        .description = "Target SM 7.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_72)] = .{
        .llvm_name = "sm_72",
        .description = "Target SM 7.2",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_75)] = .{
        .llvm_name = "sm_75",
        .description = "Target SM 7.5",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_80)] = .{
        .llvm_name = "sm_80",
        .description = "Target SM 8.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_86)] = .{
        .llvm_name = "sm_86",
        .description = "Target SM 8.6",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_87)] = .{
        .llvm_name = "sm_87",
        .description = "Target SM 8.7",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_89)] = .{
        .llvm_name = "sm_89",
        .description = "Target SM 8.9",
        .dependencies = featureSet(&[_]Feature{}),
    };
    result[@intFromEnum(Feature.sm_90)] = .{
        .llvm_name = "sm_90",
        .description = "Target SM 9.0",
        .dependencies = featureSet(&[_]Feature{}),
    };
    const ti = @typeInfo(Feature);
    for (&result, 0..) |*elem, i| {
        elem.index = i;
        elem.name = ti.Enum.fields[i].name;
    }
    break :blk result;
};