[Mesa-dev] [PATCH] nv50/ir: optimize SUB(a, b) to MOV(a - b)
Ilia Mirkin
imirkin at alum.mit.edu
Sun Sep 18 13:38:38 UTC 2016
Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
On Sun, Sep 18, 2016 at 6:33 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This helps shaders in UE4 demos, especially with Elemental
> (+1% perf). This optimization reduces spilling usage in one
> shader which explains the little gain.
>
> GF100/GK104:
>
> total instructions in shared programs :2838551 -> 2838045 (-0.02%)
> total gprs used in shared programs :396706 -> 396684 (-0.01%)
> total local used in shared programs :34432 -> 34416 (-0.05%)
>
> local gpr inst bytes
> helped 1 19 112 112
> hurt 0 0 0 0
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
> src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> index a9172f8..74a5a85 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> @@ -576,6 +576,16 @@ ConstantFolding::expr(Instruction *i,
> return;
> }
> break;
> + case OP_SUB:
> + switch (i->dType) {
> + case TYPE_F32: res.data.f32 = a->data.f32 - b->data.f32; break;
> + case TYPE_F64: res.data.f64 = a->data.f64 - b->data.f64; break;
> + case TYPE_S32:
> + case TYPE_U32: res.data.u32 = a->data.u32 - b->data.u32; break;
> + default:
> + return;
> + }
> + break;
> case OP_POW:
> switch (i->dType) {
> case TYPE_F32: res.data.f32 = pow(a->data.f32, b->data.f32); break;
> --
> 2.9.3
>
> _______________________________________________
> 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