On Thu, Mar 12, 2020 at 4:06 AM Jeff Law via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> On Wed, 2020-03-11 at 13:04 +0000, Nidal Faour via Gcc-patches wrote:
> > This patch is a code density oriented and attempt to remove redundant 
> > sign/zero
> > extension from assignment statement.
> > The approach taken is to use VRP data while expanding the assignment to RTL 
> > to
> > determine whether a sign/zero extension is necessary.
> > Thought the motivation of the patch is code density but it also good for 
> > speed.
> >
> > for example:
> > extern unsigned int func ();
> >
> >   unsigned char
> >   foo (unsigned int arg)
> >   {
> >     if (arg == 2)
> >       return 0;
> >
> >     return (func() == arg || arg == 7);
> >   }
> >
> > the result of the comparison in the return will yield a False or True, which
> > will be converted to integer and then casting to unsigned char.
> > this casting from integer to unsigned char is redundant because the value is
> > either 0 or 1.
> >
> > this patch is targeting the RISCV-32bit only.
> > This patch has been tested on a real embedded project and saved about 0.2% 
> > of
> > code size.
> >
> > P.S. I have an FSF license under Western Digital incorporation.
> > P.S. I've attached the patch as a file in case my email client corrupted the
> > patch itself
> Just an FYI.  We're at stage4 in our development cycle, as a result most
> developers are focused on regression bugfixing until the gcc-10 release is 
> made.
> I've put your patch into the queue of things to evaluate for gcc-11.

Note there was also more general development in the past with regarding to
zext/sext removal and using VRP data for that.  Google for 'type promotion
pass' in the ml archives.  Quickly scanning your patch makes it look quite
ad-hoc to me.

Richard.

> Thanks,
> jeff
> >
>

Reply via email to