Lowered fp64 ops can blow up the loop bodies while still being
suitable for unrolling.
Allow for using different parameters to unroll loops with
soft fp64.
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18863>
NIR_PASS(progress, nir, nir_opt_undef);
NIR_PASS(progress, nir, nir_opt_conditional_discard);
- if (nir->options->max_unroll_iterations) {
+ if (nir->options->max_unroll_iterations ||
+ (nir->options->max_unroll_iterations_fp64 &&
+ (nir->options->lower_doubles_options & nir_lower_fp64_full_software))) {
NIR_PASS(progress, nir, nir_opt_loop_unroll);
}
} while (progress);
unsigned max_unroll_iterations;
unsigned max_unroll_iterations_aggressive;
+ unsigned max_unroll_iterations_fp64;
bool lower_uniforms_to_ubo;
/* Unroll much more aggressively if it can hide load latency. */
if (shader->options->max_unroll_iterations_aggressive && can_pipeline_loads(loop))
max_iter = shader->options->max_unroll_iterations_aggressive;
+ /* Tune differently if the loop has double ops and soft fp64 is in use */
+ else if (shader->options->max_unroll_iterations_fp64 && loop->info->has_soft_fp64)
+ max_iter = shader->options->max_unroll_iterations_fp64;
unsigned trip_count =
li->max_trip_count ? li->max_trip_count : li->guessed_trip_count;