[Mesa-dev] [PATCH 2/2] gm107/ir: optimize 32-bit CONST load to mov

Ilia Mirkin imirkin at alum.mit.edu
Fri Nov 25 15:18:17 UTC 2016


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Fri, Nov 25, 2016 at 5:07 AM, Samuel Pitoiset
<samuel.pitoiset at gmail.com> wrote:
> This is not allowed for indirect accesses because the source
> GPR might be erased by a subsequent instruction (WaR hazard)
> if we don't emit a read dep bar.
>
> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> ---
>  .../drivers/nouveau/codegen/nv50_ir_lowering_gm107.cpp   | 16 ++++++++++++++++
>  .../drivers/nouveau/codegen/nv50_ir_lowering_gm107.h     |  1 +
>  2 files changed, 17 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.cpp
> index ead6f9e..2c0e8de 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.cpp
> @@ -61,6 +61,19 @@ GM107LegalizeSSA::handlePFETCH(Instruction *i)
>     i->setSrc(1, NULL);
>  }
>
> +void
> +GM107LegalizeSSA::handleLOAD(Instruction *i)
> +{
> +   if (i->src(0).getFile() != FILE_MEMORY_CONST)
> +      return;
> +   if (i->src(0).isIndirect(0))
> +      return;
> +   if (typeSizeof(i->dType) != 4)
> +      return;
> +
> +   i->op = OP_MOV;
> +}
> +
>  bool
>  GM107LegalizeSSA::visit(Instruction *i)
>  {
> @@ -68,6 +81,9 @@ GM107LegalizeSSA::visit(Instruction *i)
>     case OP_PFETCH:
>        handlePFETCH(i);
>        break;
> +   case OP_LOAD:
> +      handleLOAD(i);
> +      break;
>     default:
>        break;
>     }
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.h b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.h
> index 8cac76f..f51c2bb 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.h
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_gm107.h
> @@ -22,6 +22,7 @@ private:
>     virtual bool visit(Instruction *);
>
>     void handlePFETCH(Instruction *);
> +   void handleLOAD(Instruction *);
>
>     struct BarUse {
>        BarUse(Instruction *use, const Instruction *bar)
> --
> 2.10.1
>
> _______________________________________________
> 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