nir: Use the flrp lowering pass instead of nir_opt_algebraic
I tried to be very careful while updating all the various drivers, but I don't have any of that hardware for testing. :( i965 is the only platform that sets always_precise = true, and it is only set true for fragment shaders. Gen4 and Gen5 both set lower_flrp32 only for vertex shaders. For fragment shaders, nir_op_flrp is lowered during code generation as a(1-c)+bc. On all other platforms 64-bit nir_op_flrp and on Gen11 32-bit nir_op_flrp are lowered using the old nir_opt_algebraic method. No changes on any other Intel platforms. v2: Add panfrost changes. Iron Lake and GM45 had similar results. (Iron Lake shown) total cycles in shared programs: 188647754 -> 188647748 (<.01%) cycles in affected programs: 5096 -> 5090 (-0.12%) helped: 3 HURT: 0 helped stats (abs) min: 2 max: 2 x̄: 2.00 x̃: 2 helped stats (rel) min: 0.12% max: 0.12% x̄: 0.12% x̃: 0.12% Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
@@ -124,6 +124,10 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively,
|
||||
bool allow_copies)
|
||||
{
|
||||
bool progress;
|
||||
unsigned lower_flrp =
|
||||
(shader->options->lower_flrp16 ? 16 : 0) |
|
||||
(shader->options->lower_flrp32 ? 32 : 0) |
|
||||
(shader->options->lower_flrp64 ? 64 : 0);
|
||||
|
||||
do {
|
||||
progress = false;
|
||||
@@ -164,6 +168,27 @@ radv_optimize_nir(struct nir_shader *shader, bool optimize_conservatively,
|
||||
NIR_PASS(progress, shader, nir_opt_peephole_select, 8, true, true);
|
||||
NIR_PASS(progress, shader, nir_opt_algebraic);
|
||||
NIR_PASS(progress, shader, nir_opt_constant_folding);
|
||||
|
||||
if (lower_flrp != 0) {
|
||||
bool lower_flrp_progress;
|
||||
NIR_PASS(lower_flrp_progress,
|
||||
shader,
|
||||
nir_lower_flrp,
|
||||
lower_flrp,
|
||||
false /* always_precise */,
|
||||
shader->options->lower_ffma);
|
||||
if (lower_flrp_progress) {
|
||||
NIR_PASS(progress, shader,
|
||||
nir_opt_constant_folding);
|
||||
progress = true;
|
||||
}
|
||||
|
||||
/* Nothing should rematerialize any flrps, so we only
|
||||
* need to do this lowering once.
|
||||
*/
|
||||
lower_flrp = 0;
|
||||
}
|
||||
|
||||
NIR_PASS(progress, shader, nir_opt_undef);
|
||||
NIR_PASS(progress, shader, nir_opt_conditional_discard);
|
||||
if (shader->options->max_unroll_iterations) {
|
||||
|
Reference in New Issue
Block a user