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.stell...@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 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev