Reviewed-by: Ilia Mirkin <imir...@alum.mit.edu>
On Mon, Sep 26, 2016 at 5:02 PM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > Only and only if src1 is a power of 2 we can replace IMAD by SHLADD. > > v2: - use non-negative values and use applyLog2() > > Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > index 74a5a85..c9d5b5f 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > @@ -915,6 +915,7 @@ ConstantFolding::opnd3(Instruction *i, ImmediateValue > &imm2) > void > ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) > { > + const Target *target = prog->getTarget(); > const int t = !s; > const operation op = i->op; > Instruction *newi = i; > @@ -1016,6 +1017,12 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue > &imm0, int s) > i->src(1).mod = i->src(2).mod; > i->setSrc(2, NULL); > i->op = OP_ADD; > + } else > + if (s == 1 && !imm0.isNegative() && imm0.isPow2() && > + target->isOpSupported(i->op, i->dType)) { > + i->op = OP_SHLADD; > + imm0.applyLog2(); > + i->setSrc(1, new_ImmediateValue(prog, imm0.reg.data.u32)); > } > break; > case OP_ADD: > -- > 2.10.0 > > _______________________________________________ > 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