public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds
@ 2005-08-12 18:52 chris at bubblescope dot net
  2005-08-12 18:57 ` [Bug tree-optimization/23361] " pinskia at gcc dot gnu dot org
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: chris at bubblescope dot net @ 2005-08-12 18:52 UTC (permalink / raw)
  To: gcc-bugs

This may be related to bug 19001 (loops with power of two step and variable bounds not unrolled)

Neither of the following empty loops is eliminated:

void foo(int a, int b)
{ for(;a!=b;a+=4); }

void foo(int a, int b)
{ for(;a<b;a+=4); }

Similarily to 19001, these loops come about because of iterating over an range of pointers doing 
something for each element (for example deleting them) which for some types turns out to be a null 
operation. Fixing this will allow a large number of workarounds in libstdc++ to be removed.

-- 
           Summary: Can't eliminate empty loops with power of two step and
                    variable bounds
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P2
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: chris at bubblescope dot net
                CC: gcc-bugs at gcc dot gnu dot org


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
@ 2005-08-12 18:57 ` pinskia at gcc dot gnu dot org
  2005-08-12 18:58 ` chris at bubblescope dot net
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-12 18:57 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-08-12 18:57 -------
With -funsafe-loop-optimizations we remove them.

Using -Wunsafe-loop-optimizations, we get:
t.c:2: warning: cannot optimize loop, the loop counter may overflow


I mentioned this before to transform the loops such that we know if they overflow or not and Zdenek 
said it was not useful which I feel is still wrong.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|rtl-optimization            |tree-optimization


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
  2005-08-12 18:57 ` [Bug tree-optimization/23361] " pinskia at gcc dot gnu dot org
@ 2005-08-12 18:58 ` chris at bubblescope dot net
  2005-08-12 19:10 ` pinskia at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: chris at bubblescope dot net @ 2005-08-12 18:58 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From chris at bubblescope dot net  2005-08-12 18:58 -------
*** Bug 23362 has been marked as a duplicate of this bug. ***

-- 


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
  2005-08-12 18:57 ` [Bug tree-optimization/23361] " pinskia at gcc dot gnu dot org
  2005-08-12 18:58 ` chris at bubblescope dot net
@ 2005-08-12 19:10 ` pinskia at gcc dot gnu dot org
  2005-08-12 23:43   ` Daniel Berlin
  2005-08-12 23:43 ` dberlin at dberlin dot org
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 9+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-12 19:10 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2005-08-12 19:10 -------
See http://gcc.gnu.org/ml/gcc-patches/2005-06/msg02275.html which is the email I was talking 
about.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|                            |1
   Last reconfirmed|0000-00-00 00:00:00         |2005-08-12 19:10:31
               date|                            |


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
                   ` (2 preceding siblings ...)
  2005-08-12 19:10 ` pinskia at gcc dot gnu dot org
@ 2005-08-12 23:43 ` dberlin at dberlin dot org
  2005-08-13 10:01 ` giovannibajo at libero dot it
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: dberlin at dberlin dot org @ 2005-08-12 23:43 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From dberlin at gcc dot gnu dot org  2005-08-12 23:43 -------
Subject: Re:  Can't eliminate empty loops with
	power of two step and variable bounds

On Fri, 2005-08-12 at 19:10 +0000, pinskia at gcc dot gnu dot org wrote:
> ------- Additional Comments From pinskia at gcc dot gnu dot org  2005-08-12 19:10 -------

Personally, i think -funsafe-loop-optimizations should be on by default
in -O3, with a warning for when we rely on it.

It's *incredibly* rare that a user actually intends for a loop counter
to be able to overflow.




-- 


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


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

* Re: [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 19:10 ` pinskia at gcc dot gnu dot org
@ 2005-08-12 23:43   ` Daniel Berlin
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Berlin @ 2005-08-12 23:43 UTC (permalink / raw)
  To: gcc-bugzilla; +Cc: gcc-bugs

On Fri, 2005-08-12 at 19:10 +0000, pinskia at gcc dot gnu dot org wrote:
> ------- Additional Comments From pinskia at gcc dot gnu dot org  2005-08-12 19:10 -------

Personally, i think -funsafe-loop-optimizations should be on by default
in -O3, with a warning for when we rely on it.

It's *incredibly* rare that a user actually intends for a loop counter
to be able to overflow.



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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
                   ` (3 preceding siblings ...)
  2005-08-12 23:43 ` dberlin at dberlin dot org
@ 2005-08-13 10:01 ` giovannibajo at libero dot it
  2005-09-15 13:46 ` bonzini at gcc dot gnu dot org
  2005-09-15 14:02 ` chris at bubblescope dot net
  6 siblings, 0 replies; 9+ messages in thread
From: giovannibajo at libero dot it @ 2005-08-13 10:01 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From giovannibajo at libero dot it  2005-08-13 10:01 -------
One thing is that if 'a' and 'b' are originally pointers of the same type, it 
should be clear the the loop can be removed. When they are lowered to integers, 
instead, we lose the precious alignment information. Can't the empty loop be 
removed before the pointers are lowered?
Or am I missing something?

-- 


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
                   ` (4 preceding siblings ...)
  2005-08-13 10:01 ` giovannibajo at libero dot it
@ 2005-09-15 13:46 ` bonzini at gcc dot gnu dot org
  2005-09-15 14:02 ` chris at bubblescope dot net
  6 siblings, 0 replies; 9+ messages in thread
From: bonzini at gcc dot gnu dot org @ 2005-09-15 13:46 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From bonzini at gcc dot gnu dot org  2005-09-15 13:46 -------
if these ints are signed, you should be able to remove these loops.

-- 


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


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

* [Bug tree-optimization/23361] Can't eliminate empty loops with power of two step and variable bounds
  2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
                   ` (5 preceding siblings ...)
  2005-09-15 13:46 ` bonzini at gcc dot gnu dot org
@ 2005-09-15 14:02 ` chris at bubblescope dot net
  6 siblings, 0 replies; 9+ messages in thread
From: chris at bubblescope dot net @ 2005-09-15 14:02 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From chris at bubblescope dot net  2005-09-15 14:02 -------
Expanding slightly, I tried the following 4 functions. All were removed by -funsafe-loop-optimisations, 
but only foo3 was removed by -O3 without -funsafe-loop-optimisations. I can't see a good reason to 
remove foo3 but not remove foo4?

void foo(int a, int b)
{ for(;a!=b;a+=4); }


void foo2(int a, int b)
{ for(;a<b;a+=4); }

void foo3(int*a, int* b)
{ for(;a<b;a++); }

void foo4(int*a, int*b)
{ for(;a!=b;a++); }

-- 


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


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

end of thread, other threads:[~2005-09-15 14:02 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-12 18:52 [Bug rtl-optimization/23361] New: Can't eliminate empty loops with power of two step and variable bounds chris at bubblescope dot net
2005-08-12 18:57 ` [Bug tree-optimization/23361] " pinskia at gcc dot gnu dot org
2005-08-12 18:58 ` chris at bubblescope dot net
2005-08-12 19:10 ` pinskia at gcc dot gnu dot org
2005-08-12 23:43   ` Daniel Berlin
2005-08-12 23:43 ` dberlin at dberlin dot org
2005-08-13 10:01 ` giovannibajo at libero dot it
2005-09-15 13:46 ` bonzini at gcc dot gnu dot org
2005-09-15 14:02 ` chris at bubblescope dot net

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