On 12/08/2017 07:50 AM, Sebastian Perta wrote: > Hello, > > The following patch improves code size for 64 bit and for RL78: > it emits a library function call instead of emitting code for the 64 bit > min for every single time. > The and function which was added in libgcc is hand written, so more optimal > than what GCC generates. > > The change can easily be seen on the following test case: > unsigned long long my_anddi3(unsigned long long x, unsigned long long y){ > return x & y; > } > I did not add this to the regression as it very simple and there are test > cases in the regression which test this, for example > gcc.dg/torture/stackalign/alloca-1.c and > gcc.dg/torture/stackalign/vararg-2.c. > Regression test is OK, tested with the following command: > make -k check-gcc RUNTESTFLAGS=--target_board=rl78-sim > > Please let me know if this is OK, Thank you! > Sebastian > > Index: gcc/ChangeLog > =================================================================== > --- gcc/ChangeLog (revision 255511) > +++ gcc/ChangeLog (working copy) > @@ -1,3 +1,7 @@ > +2017-12-08 Sebastian Perta <sebastian.pe...@renesas.com> > + > + * config/rl78/rl78.md: New define_expand "anddi3". So I think you're ultimately far better off determining why GCC does not generate efficient code for 64bit logicals on the rl78 target.
Once you start defining these kind of operations you'll often end up defining more and more rather than addressing the core underlying issues. Furthermore, defining multi-word operations will inhibit optimizations that would have applied had the multi-word operation been broken down into word-sized operations. I've seen this time and time again when 32bit targets define DImode operations. So not only will you end up with a lot of these patterns, you then end up defining lots of special cases for them to catch some of hte missed optimizations. DJ has the final call here, but I think you'd be better off looking deeper and trying to understand how to get better code for multi-word operations without defining multi-word libcall expanders like this. jeff