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)