public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/64309] New: if (1 & (1 << n)) not simplified to if (n == 0)
@ 2014-12-15  2:49 olegendo at gcc dot gnu.org
  2014-12-15 11:45 ` [Bug middle-end/64309] " mpolacek at gcc dot gnu.org
                   ` (13 more replies)
  0 siblings, 14 replies; 15+ messages in thread
From: olegendo at gcc dot gnu.org @ 2014-12-15  2:49 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64309

            Bug ID: 64309
           Summary: if (1 & (1 << n)) not simplified to if (n == 0)
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: olegendo at gcc dot gnu.org
            Target: sh*-*-*

The SH specific test case gcc/testsuite/gcc.target/sh/pr51244-8.c has been
failing for a while now.  Originally I've added some combine patterns to handle
the special case
  if (1 & (1 << n)) -> if (n == 0)

I could fix this by modifying the SH combine patterns so that they match again.
 However, it would fail to handle all the other cases such as
  if ((1 << 1) & (1 << n)) -> if (n == 1)
  if ((1 << 2) & (1 << n)) -> if (n == 2)
  if ((3 << 0) & (3 << n)) -> if (n == 0)
  etc

I think it should be handled in a target independent way either at the tree
level or by combine, but I'm not sure what is easier/makes more sense.


Taking it a bit further...
On SH it's better to avoid dynamic shifts (e.g. on SH2 dynamic shifts are
library calls).  Thus, in cases of something like

int test (int n)
{
  return ((1 << 1) & (1 << n));
}

it's often better to do a comparison and a cstore instead.  Here again, I could
add SH specific patterns, but maybe it makes more sense to do it in a target
independent way at tree level or in combine.  RTX costs can/should be used to
check whether a 'shift,and' is more expensive than a 'cmp,cstore'.


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2014-12-16 18:30 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-15  2:49 [Bug rtl-optimization/64309] New: if (1 & (1 << n)) not simplified to if (n == 0) olegendo at gcc dot gnu.org
2014-12-15 11:45 ` [Bug middle-end/64309] " mpolacek at gcc dot gnu.org
2014-12-15 13:23 ` mpolacek at gcc dot gnu.org
2014-12-15 19:08 ` olegendo at gcc dot gnu.org
2014-12-15 19:22 ` mpolacek at gcc dot gnu.org
2014-12-15 20:19 ` glisse at gcc dot gnu.org
2014-12-15 20:41 ` olegendo at gcc dot gnu.org
2014-12-15 20:46 ` jakub at gcc dot gnu.org
2014-12-15 20:46 ` mpolacek at gcc dot gnu.org
2014-12-15 20:49 ` mpolacek at gcc dot gnu.org
2014-12-15 21:06 ` glisse at gcc dot gnu.org
2014-12-15 21:11 ` glisse at gcc dot gnu.org
2014-12-16  8:54 ` rguenther at suse dot de
2014-12-16 18:29 ` mpolacek at gcc dot gnu.org
2014-12-16 18:30 ` mpolacek at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).