Reviewed-by: Jason Ekstrand <ja...@jlekstrand.net> On Tue, Feb 12, 2019 at 5:57 AM Iago Toral Quiroga <ito...@igalia.com> wrote:
> NIR already has these and correctly considers exact/inexact qualification, > whereas the backend doesn't and can apply the optimizations where it > shouldn't. This happened to be the case in a handful of Tomb Raider > shaders, > where NIR would skip the optimizations because of a precise qualification > but the backend would then (incorrectly) apply them anyway. > > Besides this, considering that we are not emitting much math in the backend > these days it is unlikely that these optimizations are useful in general. A > shader-db run confirms that MAD and LRP optimizations, for example, were > only > being triggered in cases where NIR would skip them due to precise > requirements, so in the near future we might want to remove more of these, > but for now we just remove the ones that are not completely correct. > > Suggested-by: Jason Ekstrand <ja...@jlekstrand.net> > --- > src/intel/compiler/brw_fs.cpp | 39 +---------------------------------- > 1 file changed, 1 insertion(+), 38 deletions(-) > > diff --git a/src/intel/compiler/brw_fs.cpp b/src/intel/compiler/brw_fs.cpp > index 0f04e577de3..873a1dd8196 100644 > --- a/src/intel/compiler/brw_fs.cpp > +++ b/src/intel/compiler/brw_fs.cpp > @@ -2547,15 +2547,6 @@ fs_visitor::opt_algebraic() > break; > } > > - /* a * 0.0 = 0.0 */ > - if (inst->src[1].is_zero()) { > - inst->opcode = BRW_OPCODE_MOV; > - inst->src[0] = inst->src[1]; > - inst->src[1] = reg_undef; > - progress = true; > - break; > - } > - > if (inst->src[0].file == IMM) { > assert(inst->src[0].type == BRW_REGISTER_TYPE_F); > inst->opcode = BRW_OPCODE_MOV; > @@ -2569,14 +2560,6 @@ fs_visitor::opt_algebraic() > if (inst->src[1].file != IMM) > continue; > > - /* a + 0.0 = a */ > - if (inst->src[1].is_zero()) { > - inst->opcode = BRW_OPCODE_MOV; > - inst->src[1] = reg_undef; > - progress = true; > - break; > - } > - > if (inst->src[0].file == IMM) { > assert(inst->src[0].type == BRW_REGISTER_TYPE_F); > inst->opcode = BRW_OPCODE_MOV; > @@ -2595,16 +2578,6 @@ fs_visitor::opt_algebraic() > break; > } > break; > - case BRW_OPCODE_LRP: > - if (inst->src[1].equals(inst->src[2])) { > - inst->opcode = BRW_OPCODE_MOV; > - inst->src[0] = inst->src[1]; > - inst->src[1] = reg_undef; > - inst->src[2] = reg_undef; > - progress = true; > - break; > - } > - break; > case BRW_OPCODE_CMP: > if ((inst->conditional_mod == BRW_CONDITIONAL_Z || > inst->conditional_mod == BRW_CONDITIONAL_NZ) && > @@ -2682,17 +2655,7 @@ fs_visitor::opt_algebraic() > } > break; > case BRW_OPCODE_MAD: > - if (inst->src[1].is_zero() || inst->src[2].is_zero()) { > - inst->opcode = BRW_OPCODE_MOV; > - inst->src[1] = reg_undef; > - inst->src[2] = reg_undef; > - progress = true; > - } else if (inst->src[0].is_zero()) { > - inst->opcode = BRW_OPCODE_MUL; > - inst->src[0] = inst->src[2]; > - inst->src[2] = reg_undef; > - progress = true; > - } else if (inst->src[1].is_one()) { > + if (inst->src[1].is_one()) { > inst->opcode = BRW_OPCODE_ADD; > inst->src[1] = inst->src[2]; > inst->src[2] = reg_undef; > -- > 2.17.1 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev