diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index b340c09c0b5..6c9feafc478 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -1458,8 +1458,19 @@ brw_postprocess_nir(nir_shader *nir, const struct brw_compiler *compiler, brw_nir_optimize(nir, compiler, is_scalar); if (devinfo->ver >= 6) { - /* Try and fuse multiply-adds */ - OPT(brw_nir_opt_peephole_ffma); + /* Try and fuse multiply-adds, if successful, run shrink_vectors to + * avoid peephole_ffma to generate things like this : + * vec16 ssa_0 = ... + * vec16 ssa_1 = fneg ssa_0 + * vec1 ssa_2 = ffma ssa_1, ... + * + * We want this instead : + * vec16 ssa_0 = ... + * vec1 ssa_1 = fneg ssa_0.x + * vec1 ssa_2 = ffma ssa_1, ... + */ + if (OPT(brw_nir_opt_peephole_ffma)) + OPT(nir_opt_shrink_vectors); } if (is_scalar)