[Mesa-dev] [PATCH] gm107/ir: combine 32-bit constant loads into 64-bit ones

Ilia Mirkin imirkin at alum.mit.edu
Thu Jul 5 11:04:08 UTC 2018


Loads require barriers, while movs don't. I believe that's why the blob
prefers 32-bit loads, and we do too. Why change it?

On Thu, Jul 5, 2018, 06:21 Rhys Perry <pendingchaos02 at gmail.com> wrote:

> Seems to increase GPR count by a few in some shaders, but also decreases
> instruction count by a bit.
>
> This should only combine them when a mov can not be used (when the load
> is indirect).
>
> total instructions in shared programs : 5804448 -> 5754102 (-0.87%)
> total gprs used in shared programs    : 670065 -> 672540 (0.37%)
> total shared used in shared programs  : 548832 -> 548832 (0.00%)
> total local used in shared programs   : 21068 -> 21068 (0.00%)
>
>                 local     shared        gpr       inst      bytes
>     helped           0           0         194        4124        4124
>       hurt           0           0        1579          97          97
>
> Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
> ---
>  src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp    | 5 +++++
>  src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp | 9 ++-------
>  2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> index 39177bd044..6785082b5a 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> @@ -2538,6 +2538,11 @@ MemoryOpt::combineLd(Record *rec, Instruction *ld)
>     // for compute indirect loads are not guaranteed to be aligned
>     if (prog->getType() == Program::TYPE_COMPUTE && rec->rel[0])
>        return false;
> +   // don't combine non-indirect constant loads since OP_LOAD is a
> +   // inefficient way of doing them
> +   if (prog->getTarget()->getChipset() >= NVISA_GM107_CHIPSET &&
> +       ld->getSrc(0)->reg.file == FILE_MEMORY_CONST &&
> !ld->src(0).isIndirect(0))
> +      return false;
>
>     assert(sizeRc + sizeLd <= 16 && offRc != offLd);
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
> b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
> index 7e059235f4..514e1b3723 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp
> @@ -429,13 +429,8 @@ TargetNVC0::isAccessSupported(DataFile file, DataType
> ty) const
>  {
>     if (ty == TYPE_NONE)
>        return false;
> -   if (file == FILE_MEMORY_CONST) {
> -      if (getChipset() >= NVISA_GM107_CHIPSET)
> -         return typeSizeof(ty) <= 4;
> -      else
> -      if (getChipset() >= NVISA_GK104_CHIPSET) // wrong encoding ?
> -         return typeSizeof(ty) <= 8;
> -   }
> +   if (file == FILE_MEMORY_CONST && getChipset() >= NVISA_GK104_CHIPSET)
> // wrong encoding ?
> +      return typeSizeof(ty) <= 8;
>     if (ty == TYPE_B96)
>        return false;
>     return true;
> --
> 2.14.4
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180705/b94168c0/attachment.html>


More information about the mesa-dev mailing list