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 > > >