[Mesa-dev] [PATCH 2/2] r300/compiler: copy-propagate saturate mode when possible
Tom Stellard
tom at stellard.net
Mon Feb 4 09:24:26 PST 2013
On Sun, Feb 03, 2013 at 06:22:42PM +0100, Marek Olšák wrote:
> ---
Hi Marek,
If you are interested in expanding the propagation of _SAT to instructions
besides MOV, you can look at peephole_mul_omod() as an example of how to
do this.
Anyway, these patches look good.
For the series:
Reviewed-by: Tom Stellard <thomas.stellard at amd.com>
> .../drivers/r300/compiler/radeon_optimize.c | 21 ++++++++++++++++++--
> 1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/r300/compiler/radeon_optimize.c b/src/gallium/drivers/r300/compiler/radeon_optimize.c
> index 0714d79..7be9d9e 100644
> --- a/src/gallium/drivers/r300/compiler/radeon_optimize.c
> +++ b/src/gallium/drivers/r300/compiler/radeon_optimize.c
> @@ -143,8 +143,7 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
> unsigned int i;
>
> if (inst_mov->U.I.DstReg.File != RC_FILE_TEMPORARY ||
> - inst_mov->U.I.WriteALUResult ||
> - inst_mov->U.I.SaturateMode)
> + inst_mov->U.I.WriteALUResult)
> return;
>
> /* Get a list of all the readers of this MOV instruction. */
> @@ -156,6 +155,22 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
> if (reader_data.Abort || reader_data.ReaderCount == 0)
> return;
>
> + /* We can propagate SaturateMode if all the readers are MOV instructions
> + * without a presubtract operation, source negation and absolute.
> + * In that case, we just move SaturateMode to all readers. */
> + if (inst_mov->U.I.SaturateMode) {
> + for (i = 0; i < reader_data.ReaderCount; i++) {
> + struct rc_instruction * inst = reader_data.Readers[i].Inst;
> +
> + if (inst->U.I.Opcode != RC_OPCODE_MOV ||
> + inst->U.I.SrcReg[0].File == RC_FILE_PRESUB ||
> + inst->U.I.SrcReg[0].Abs ||
> + inst->U.I.SrcReg[0].Negate) {
> + return;
> + }
> + }
> + }
> +
> /* Propagate the MOV instruction. */
> for (i = 0; i < reader_data.ReaderCount; i++) {
> struct rc_instruction * inst = reader_data.Readers[i].Inst;
> @@ -163,6 +178,8 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
>
> if (inst_mov->U.I.SrcReg[0].File == RC_FILE_PRESUB)
> inst->U.I.PreSub = inst_mov->U.I.PreSub;
> + if (!inst->U.I.SaturateMode)
> + inst->U.I.SaturateMode = inst_mov->U.I.SaturateMode;
> }
>
> /* Finally, remove the original MOV instruction */
> --
> 1.7.10.4
>
More information about the mesa-dev
mailing list