Hello Jeff: Please review Jeff.
Thanks & Regards Ajit On 12/05/23 4:48 pm, Ajit Agarwal via Gcc-patches wrote: > Hello Jeff: > > > On 29/04/23 3:40 am, Jeff Law wrote: >> >> >> On 4/20/23 15:03, Ajit Agarwal wrote: >> >>> >>> Currently I support AND with const1_rtx. This is what is equivalent to zero >>> extension instruction in power instruction set. When you specify many other >>> constants and Could you please specify what other constants needs to be >>> supported and how to determine on the Input and output modes. >> x AND <constant> will result in a zero-extended representation for a variety >> of constants, not just 1. For example >> >> For example x AND 3, x AND 7, x AND 15, etc. >> >> If (const_int 1) is really that special here, then I've either completely >> misunderstood the intention of your patch or there's something quite special >> about the PPC port that I'm not aware of. >> > > Here is the patch to address above. > > ree: Improve ree pass for rs6000 target > > For rs6000 target we see redundant zero and sign > extension and done to improve ree pass to eliminate > such redundant zero and sign extension. Support of > AND with extension with different constants other > than 1. > > 2023-05-12 Ajit Kumar Agarwal <aagar...@linux.ibm.com> > > gcc/ChangeLog: > > * ree.cc (rtx_is_zext_p): Add AND with varying contsants as > extensions. > --- > gcc/ree.cc | 15 ++++++++++----- > 1 file changed, 10 insertions(+), 5 deletions(-) > > diff --git a/gcc/ree.cc b/gcc/ree.cc > index 96fda1ac658..ddda5f194bb 100644 > --- a/gcc/ree.cc > +++ b/gcc/ree.cc > @@ -269,8 +269,11 @@ rtx_is_zext_p (rtx insn) > rtx set = XEXP (insn, 0); > if (REG_P (set)) > { > - if (XEXP (insn, 1) == const1_rtx) > - return true; > + rtx src = XEXP (insn, 1); > + > + if (CONST_INT_P (src) > + && IN_RANGE (exact_log2 (UINTVAL (src)), 0, 7)) > + return true; > } > else > return false; > @@ -297,9 +300,11 @@ rtx_is_zext_p (rtx_insn *insn) > > if (REG_P (set) && GET_MODE (SET_DEST (body)) == GET_MODE (set)) > { > - if (GET_MODE_UNIT_SIZE (GET_MODE (SET_DEST (body))) > - >= GET_MODE_UNIT_SIZE (GET_MODE (set))) > - return true; > + rtx src = XEXP (SET_SRC (body), 1); > + > + if (CONST_INT_P (src) > + && IN_RANGE (exact_log2 (UINTVAL (src)), 0, 7)) > + return true; > } > else > return false;