[Mesa-dev] [PATCH v2 3/6] nv50/ir: optimize IMAD to SHLADD in presence of power of 2
Ilia Mirkin
imirkin at alum.mit.edu
Mon Sep 26 21:14:57 UTC 2016
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Mon, Sep 26, 2016 at 5:02 PM, Samuel Pitoiset
<samuel.pitoiset at 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.pitoiset at 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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list