On Wed, Oct 8, 2014 at 9:04 AM, Jakub Jelinek <ja...@redhat.com> wrote: > On Wed, Oct 08, 2014 at 02:56:46PM +0800, Thomas Preud'homme wrote: >> > From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches- >> > ow...@gcc.gnu.org] On Behalf Of Thomas Preud'homme >> > Sent: Wednesday, October 08, 2014 2:43 PM >> > > Also, perhaps you could short-circuit this if the rotation isn't by >> > > constant >> >> Note that do_shift_rotate already check for this. Is it enough? > > The question is only about the compile time cost needed through all the > routines find_bswap_or_nop calls before it finds out it can't do anything > with the rotate, the short-circuiting could avoid that. E.g. > find_bswap_or_nop_1 first recurses on the argument etc.
I wouldn't worry about that too much. Indeed the question would be what should be canonical on GIMPLE (expanders should choose the optimal vairant from both). I think a tree code should be always prefered to a builtin function call - which means a rotate is more canonical than a bswap16 call. >From the performance side the pass could be re-structured to populate a lattice, thus work from def to use instead of the other way around. Which means we visit each stmt exactly once, compute its value symbolically and check it against a rotate. Richard. > Jakub