public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug tree-optimization/45256] Missed arithmetic simplification at tree level
  2010-08-11 15:19 [Bug tree-optimization/45256] New: Missed arithmetic simplification at tree level bernds at gcc dot gnu dot org
@ 2010-08-11 15:19 ` bernds at gcc dot gnu dot org
  2010-09-07 13:09 ` ibolton at gcc dot gnu dot org
  2010-09-07 18:42 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: bernds at gcc dot gnu dot org @ 2010-08-11 15:19 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from bernds at gcc dot gnu dot org  2010-08-11 15:19 -------
Created an attachment (id=21454)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21454&action=view)
Testcase


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256


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

* [Bug tree-optimization/45256]  New: Missed arithmetic simplification at tree level
@ 2010-08-11 15:19 bernds at gcc dot gnu dot org
  2010-08-11 15:19 ` [Bug tree-optimization/45256] " bernds at gcc dot gnu dot org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: bernds at gcc dot gnu dot org @ 2010-08-11 15:19 UTC (permalink / raw)
  To: gcc-bugs

I'll attach a testcase, which shows a missed simplification at tree level:

  D.2276_42 = i_53 + 1;
  D.2277_43 = D.2276_42 * 32;
  iftmp.3_55 = __fswab32 (xb_54);
  __asm__("clz  %0, %1" : "=r" ret_56 : "r" iftmp.3_55 : "cc");
  ret_58 = 32 - ret_56;
  ret_59 = D.2277_43 - ret_58;

In effect, the constant 32 is both added and subtracted from the result.  With
a four-insn combiner, this is caught at the RTL stage (compiling for Thumb-1):

-       add     r2, r2, #1
        lsl     r2, r2, #5
-       add     r3, r3, r2
-       sub     r3, r3, #32
+       add     r3, r2, r3


-- 
           Summary: Missed arithmetic simplification at tree level
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: bernds at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: arm-none-linux-gnueabi


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256


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

* [Bug tree-optimization/45256] Missed arithmetic simplification at tree level
  2010-08-11 15:19 [Bug tree-optimization/45256] New: Missed arithmetic simplification at tree level bernds at gcc dot gnu dot org
  2010-08-11 15:19 ` [Bug tree-optimization/45256] " bernds at gcc dot gnu dot org
@ 2010-09-07 13:09 ` ibolton at gcc dot gnu dot org
  2010-09-07 18:42 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: ibolton at gcc dot gnu dot org @ 2010-09-07 13:09 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from ibolton at gcc dot gnu dot org  2010-09-07 13:05 -------
(In reply to comment #1)
> Created an attachment (id=21454)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=21454&action=view) [edit]
> Testcase
> 

OK.  I can see this happening on trunk, when compiled as follows:

arm-none-linux-gnueabi/obj/gcc3/gcc/cc1 -O2 pr45256.i -fdump-tree-all
-fdump-rtl-all.

The 148t.optimized dump shows exactly what has been posted above, where
effectively 32 is both added and then subtracted.

The 183r.dce dump still shows this extra work happening and the 184r.combine
dump shows that it has been optimised away.  It should be possible to do this
optimisation at the tree-level, so this bug is confirmed.

Should I check whether this happens for 4.4 and 4.5 too?


-- 

ibolton at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
           Keywords|                            |missed-optimization
      Known to fail|                            |4.6.0
   Last reconfirmed|0000-00-00 00:00:00         |2010-09-07 13:05:49
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256


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

* [Bug tree-optimization/45256] Missed arithmetic simplification at tree level
  2010-08-11 15:19 [Bug tree-optimization/45256] New: Missed arithmetic simplification at tree level bernds at gcc dot gnu dot org
  2010-08-11 15:19 ` [Bug tree-optimization/45256] " bernds at gcc dot gnu dot org
  2010-09-07 13:09 ` ibolton at gcc dot gnu dot org
@ 2010-09-07 18:42 ` pinskia at gcc dot gnu dot org
  2 siblings, 0 replies; 4+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2010-09-07 18:42 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from pinskia at gcc dot gnu dot org  2010-09-07 18:41 -------
ret_59 = (i_53 + 1) * 32 - (32 - ret_56)

So this looks like a re-association issue.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45256


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

end of thread, other threads:[~2010-09-07 18:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-11 15:19 [Bug tree-optimization/45256] New: Missed arithmetic simplification at tree level bernds at gcc dot gnu dot org
2010-08-11 15:19 ` [Bug tree-optimization/45256] " bernds at gcc dot gnu dot org
2010-09-07 13:09 ` ibolton at gcc dot gnu dot org
2010-09-07 18:42 ` pinskia at gcc dot gnu dot 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).