[Mesa-dev] [PATCH] i965/fs: Allow copy propagation on ATTR file registers.
Jason Ekstrand
jason at jlekstrand.net
Wed Mar 18 21:40:27 PDT 2015
On Tue, Mar 10, 2015 at 4:18 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
> This especially helps with NIR because we currently emit MOVs at the top
> of the shader to copy from various ATTR registers to a giant VGRF array
> of all inputs. (This could potentially be done better, but since
> there's only ever one write to each register, it should be trivial to
> copy propagate away...)
>
> With NIR - only vertex shaders:
> total instructions in shared programs: 3083505 -> 2868128 (-6.98%)
> instructions in affected programs: 2977237 -> 2761860 (-7.23%)
> helped: 18653
>
> Without NIR - only vertex shaders:
> total instructions in shared programs: 2724564 -> 2708831 (-0.58%)
> instructions in affected programs: 593696 -> 577963 (-2.65%)
> helped: 3134
>
> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 1 +
> src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 5 ++++-
> 2 files changed, 5 insertions(+), 1 deletion(-)
>
> No apparent Piglit regressions. Please scrutinize though, I spent very
> little actual thought on this, so I may have missed something stupid.
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index 9a415ff..6fa90d2 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -3235,6 +3235,7 @@ fs_visitor::lower_load_payload()
> * destination may be used.
> */
> assert(inst->src[i].file == IMM ||
> + inst->src[i].file == ATTR ||
I don't really like this. However, I think it's the best we can do at
the moment. Let's go with it for now.
Reviewed-by: Jason Ekstrand <jason.ekstrand at intel.com>
> inst->src[i].file == UNIFORM);
> mov->force_writemask_all = true;
> }
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> index 764741d..56f4fa1 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> @@ -283,7 +283,8 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
>
> if (entry->src.file == IMM)
> return false;
> - assert(entry->src.file == GRF || entry->src.file == UNIFORM);
> + assert(entry->src.file == GRF || entry->src.file == UNIFORM ||
> + entry->src.file == ATTR);
>
> if (entry->opcode == SHADER_OPCODE_LOAD_PAYLOAD &&
> inst->opcode == SHADER_OPCODE_LOAD_PAYLOAD)
> @@ -382,6 +383,7 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
> inst->src[arg].reg_offset = entry->src.reg_offset;
> inst->src[arg].subreg_offset = entry->src.subreg_offset;
> break;
> + case ATTR:
> case GRF:
> {
> assert(entry->src.width % inst->src[arg].width == 0);
> @@ -598,6 +600,7 @@ can_propagate_from(fs_inst *inst)
> ((inst->src[0].file == GRF &&
> (inst->src[0].reg != inst->dst.reg ||
> inst->src[0].reg_offset != inst->dst.reg_offset)) ||
> + inst->src[0].file == ATTR ||
> inst->src[0].file == UNIFORM ||
> inst->src[0].file == IMM) &&
> inst->src[0].type == inst->dst.type &&
> --
> 2.2.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list