ACO can implement this better.
fossil-db (Navi):
Totals from 33 (0.02% of 135946) affected shaders:
SGPRs: 1736 -> 1744 (+0.46%)
VGPRs: 1680 -> 1656 (-1.43%)
CodeSize: 246160 -> 245916 (-0.10%); split: -0.14%, +0.04%
MaxWaves: 449 -> 461 (+2.67%)
Instrs: 48301 -> 48266 (-0.07%); split: -0.12%, +0.05%
Cycles: 469740 -> 469240 (-0.11%); split: -0.18%, +0.08%
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6558>
.lower_quad_broadcast_dynamic = 1,
.lower_quad_broadcast_dynamic_to_const = gfx7minus,
.lower_shuffle_to_swizzle_amd = 1,
+ .lower_elect = radv_use_llvm_for_stage(device, stage),
});
nir_lower_load_const_to_scalar(nir);
bool lower_quad:1;
bool lower_quad_broadcast_dynamic:1;
bool lower_quad_broadcast_dynamic_to_const:1;
+ bool lower_elect:1;
} nir_lower_subgroups_options;
bool nir_lower_subgroups(nir_shader *shader,
}
case nir_intrinsic_elect: {
+ if (!options->lower_elect)
+ return NULL;
+
nir_intrinsic_instr *first =
nir_intrinsic_instr_create(b->shader,
nir_intrinsic_first_invocation);
struct nir_lower_subgroups_options subgroup_options = {
.subgroup_size = 32,
.ballot_bit_size = 32,
+ .lower_elect = true,
};
/* prepare for IO lowering */
.lower_subgroup_masks = true,
.lower_vote_trivial = false,
.lower_vote_eq_to_ballot = true,
+ .lower_elect = true,
};
NIR_PASS_V(nir, nir_lower_subgroups, &subgroups_options);
.lower_vote_trivial = !is_scalar,
.lower_shuffle = true,
.lower_quad_broadcast_dynamic = true,
+ .lower_elect = true,
};
OPT(nir_lower_subgroups, &subgroups_options);