public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug middle-end/28970] New: Wrong code for simple loop test case
@ 2006-09-07 4:58 bergner at vnet dot ibm dot com
2006-09-07 5:01 ` [Bug middle-end/28970] [4.1 Regression] " pinskia at gcc dot gnu dot org
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: bergner at vnet dot ibm dot com @ 2006-09-07 4:58 UTC (permalink / raw)
To: gcc-bugs
We generate bad code for the following test case using the latest 4.1 compiler.
It compiles and runs fine using 4.2. It also compiles and runs fine with my
3.3.3 system compiler. I've tested this on both x86_64 and ppc64 systems, and
the test case fails for both when compiled as a 32-bit app and passes when
compiled as a 64-bit app.
#include <stdio.h>
int tar (int i)
{
printf("expected = %d, actual = %d\n", 36863, i);
return -1;
}
void bug(int q, int bcount)
{
int j = 0;
int outgo = 0;
while(j != -1)
{
outgo++;
if (outgo > q-1)
outgo = q-1;
j = tar (outgo*bcount);
}
}
int main(void)
{
bug(5, 36863);
return 0;
}
bergner@vervain:~> gcc-4.1.2 -O2 bug01.c
bergner@vervain:~> ./a.out
expected = 36863, actual = 184315
--
Summary: Wrong code for simple loop test case
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: middle-end
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bergner at vnet dot ibm dot com
GCC build triplet: powerpc64-linux
GCC host triplet: powerpc64-linux
GCC target triplet: powerpc64-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
@ 2006-09-07 5:01 ` pinskia at gcc dot gnu dot org
2006-09-07 20:26 ` janis at gcc dot gnu dot org
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-09-07 5:01 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from pinskia at gcc dot gnu dot org 2006-09-07 05:01 -------
Confirmed, this is a loop.c bug which is why it is not in 4.2.0 at all.
--
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed|0 |1
GCC build triplet|powerpc64-linux |
GCC host triplet|powerpc64-linux |
GCC target triplet|powerpc64-linux |powerpc-linux, i686-linux-
| |gnu
Keywords| |wrong-code
Known to fail| |4.1.0 4.1.1 4.1.2
Known to work| |4.0.0
Last reconfirmed|0000-00-00 00:00:00 |2006-09-07 05:01:38
date| |
Summary|Wrong code for simple loop |[4.1 Regression] Wrong code
|test case |for simple loop test case
Target Milestone|--- |4.1.2
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
2006-09-07 5:01 ` [Bug middle-end/28970] [4.1 Regression] " pinskia at gcc dot gnu dot org
@ 2006-09-07 20:26 ` janis at gcc dot gnu dot org
2006-10-16 12:07 ` rguenth at gcc dot gnu dot org
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: janis at gcc dot gnu dot org @ 2006-09-07 20:26 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from janis at gcc dot gnu dot org 2006-09-07 20:26 -------
A regression hunt on powerpc-linux identified the following patch:
http://gcc.gnu.org/viewcvs?view=rev&rev=99850
r99850 | rakdver | 2005-05-17 19:55:53 +0000 (Tue, 17 May 2005)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
2006-09-07 5:01 ` [Bug middle-end/28970] [4.1 Regression] " pinskia at gcc dot gnu dot org
2006-09-07 20:26 ` janis at gcc dot gnu dot org
@ 2006-10-16 12:07 ` rguenth at gcc dot gnu dot org
2006-10-27 9:50 ` rguenth at gcc dot gnu dot org
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-10-16 12:07 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from rguenth at gcc dot gnu dot org 2006-10-16 12:07 -------
This is a bug in loop.c
<bb 0>:
pretmp.61 = q - 1;
outgo = 0;
<L0>:;
outgo.62 = outgo + 1;
outgo = MIN_EXPR <pretmp.61, outgo.62>;
j = tar (outgo * bcount);
if (j != -1) goto <L0>; else goto <L4>;
<L4>:;
return;
Bug in biv selection, so strength reduction messes up:
Loop from 45 to 46: 12 real insns.
Biv 60: insn 19 const (reg 59 [ pretmp.26 ])
Biv 60: insn 22 const (1)
Biv 60: verified
Biv 60: initialized at insn 13: initial value (0)
Giv 58: insn 17 src reg 60 benefit 4 lifetime 6
60 is not a Biv:
(insn 19 17 20 1 (set (reg/v:SI 60 [ outgo ])
(reg:SI 59 [ pretmp.26 ])) 40 {*movsi_1} (nil)
(nil))
(insn 20 19 21 1 (set (reg:CCGC 17 flags)
(compare:CCGC (reg/v:SI 60 [ outgo ])
(reg/v:SI 58 [ outgo.27 ]))) 5 {*cmpsi_1_insn} (nil)
(nil))
(jump_insn 21 20 41 1 (set (pc)
(if_then_else (le (reg:CCGC 17 flags)
(const_int 0 [0x0]))
(label_ref 23)
(pc))) 531 {*jcc_1} (nil)
(expr_list:REG_BR_PROB (const_int 5000 [0x1388])
(nil)))
;; End of basic block 1, registers live:
(nil)
;; Start of basic block 2, registers live: (nil)
(note 41 21 22 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 22 41 23 2 (set (reg/v:SI 60 [ outgo ])
(reg/v:SI 58 [ outgo.27 ])) 40 {*movsi_1} (nil)
(nil))
;; End of basic block 2, registers live:
(nil)
;; Start of basic block 3, registers live: (nil)
(code_label 23 22 42 3 3 "" [1 uses])
now strength reduction does:
(insn 19 17 51 1 (set (reg/v:SI 60 [ outgo ])
(reg:SI 59 [ pretmp.26 ])) -1 (nil)
(nil))
(insn 51 19 20 1 (parallel [
(set (reg:SI 66)
(mult:SI (reg:SI 59 [ pretmp.26 ])
(reg/v:SI 63 [ bcount ])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
(insn 20 51 21 1 (set (reg:CCGC 17 flags)
(compare:CCGC (reg/v:SI 60 [ outgo ])
(reg/v:SI 58 [ outgo.27 ]))) -1 (nil)
(nil))
(jump_insn 21 20 41 1 (set (pc)
(if_then_else (le (reg:CCGC 17 flags)
(const_int 0 [0x0]))
(label_ref 23)
(pc))) -1 (nil)
(expr_list:REG_BR_PROB (const_int 5000 [0x1388])
(nil)))
;; End of basic block 1, registers live:
(nil)
;; Start of basic block 2, registers live: (nil)
(note 41 21 22 2 [bb 2] NOTE_INSN_BASIC_BLOCK)
(insn 22 41 50 2 (set (reg/v:SI 60 [ outgo ])
(reg/v:SI 58 [ outgo.27 ])) -1 (nil)
(nil))
(insn 50 22 23 2 (parallel [
(set (reg:SI 66)
(plus:SI (reg:SI 66)
(reg/v:SI 63 [ bcount ])))
(clobber (reg:CC 17 flags))
]) -1 (nil)
(nil))
;; End of basic block 2, registers live:
(nil)
;; Start of basic block 3, registers live: (nil)
(code_label 23 50 42 3 3 "" [1 uses])
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rakdver at gcc dot gnu dot
| |org
Last reconfirmed|2006-09-07 05:01:38 |2006-10-16 12:07:36
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (2 preceding siblings ...)
2006-10-16 12:07 ` rguenth at gcc dot gnu dot org
@ 2006-10-27 9:50 ` rguenth at gcc dot gnu dot org
2006-10-27 16:40 ` janis at gcc dot gnu dot org
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-10-27 9:50 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from rguenth at gcc dot gnu dot org 2006-10-27 09:50 -------
Janis, can you hunt which path introduced this regression relative from 4.0.0
which seems to work?
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |janis at gcc dot gnu dot org
Known to work|4.0.0 |4.0.0 4.0.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (3 preceding siblings ...)
2006-10-27 9:50 ` rguenth at gcc dot gnu dot org
@ 2006-10-27 16:40 ` janis at gcc dot gnu dot org
2006-10-28 11:06 ` rguenth at gcc dot gnu dot org
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: janis at gcc dot gnu dot org @ 2006-10-27 16:40 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from janis at gcc dot gnu dot org 2006-10-27 16:40 -------
The regression hunt results in comment #2 are from mainline during development
of 4.1. Is there some other hunt that would be useful as well?
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug middle-end/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (4 preceding siblings ...)
2006-10-27 16:40 ` janis at gcc dot gnu dot org
@ 2006-10-28 11:06 ` rguenth at gcc dot gnu dot org
2006-10-29 23:06 ` [Bug rtl-optimization/28970] " ebotcazou at gcc dot gnu dot org
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2006-10-28 11:06 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from rguenth at gcc dot gnu dot org 2006-10-28 11:06 -------
Ah, no - I didn't look at the result of this first hunt and though it was the
switch from -floop-optimize to -floop-optimize2. Sorry for the noise.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (5 preceding siblings ...)
2006-10-28 11:06 ` rguenth at gcc dot gnu dot org
@ 2006-10-29 23:06 ` ebotcazou at gcc dot gnu dot org
2006-10-29 23:07 ` ebotcazou at gcc dot gnu dot org
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2006-10-29 23:06 UTC (permalink / raw)
To: gcc-bugs
------- Comment #7 from ebotcazou at gcc dot gnu dot org 2006-10-29 23:06 -------
As per comment #3.
--
ebotcazou at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|middle-end |rtl-optimization
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/28970] [4.1 Regression] Wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (6 preceding siblings ...)
2006-10-29 23:06 ` [Bug rtl-optimization/28970] " ebotcazou at gcc dot gnu dot org
@ 2006-10-29 23:07 ` ebotcazou at gcc dot gnu dot org
2006-10-30 16:01 ` [Bug rtl-optimization/28970] [4.1 regression] wrong " ebotcazou at gcc dot gnu dot org
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2006-10-29 23:07 UTC (permalink / raw)
To: gcc-bugs
------- Comment #8 from ebotcazou at gcc dot gnu dot org 2006-10-29 23:06 -------
Investigating.
--
ebotcazou at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |ebotcazou at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2006-10-16 12:07:36 |2006-10-29 23:06:48
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/28970] [4.1 regression] wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (7 preceding siblings ...)
2006-10-29 23:07 ` ebotcazou at gcc dot gnu dot org
@ 2006-10-30 16:01 ` ebotcazou at gcc dot gnu dot org
2006-11-01 12:11 ` ebotcazou at gcc dot gnu dot org
2006-11-01 12:16 ` ebotcazou at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2006-10-30 16:01 UTC (permalink / raw)
To: gcc-bugs
------- Comment #9 from ebotcazou at gcc dot gnu dot org 2006-10-30 16:01 -------
> Bug in biv selection, so strength reduction messes up:
>
> Loop from 45 to 46: 12 real insns.
> Biv 60: insn 19 const (reg 59 [ pretmp.26 ])
> Biv 60: insn 22 const (1)
> Biv 60: verified
> Biv 60: initialized at insn 13: initial value (0)
>
> 60 is not a Biv:
Yeah, the limitations of loop.c are blatantly exposed by the new dialect
generated by the RTL expanders in 4.x because of the 100 tree-opt passes.
It turns out that 3.x finds the same BIVs:
Biv 61: insn 22 const (1)
Biv 61: insn 28 const (reg 65)
Biv 61: verified
Biv 61: initialized at insn 12: initial value (0)
but the non-constant increment comes after the constant one, which is enough
to prevent the GIV from being eliminated...
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/28970] [4.1 regression] wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (8 preceding siblings ...)
2006-10-30 16:01 ` [Bug rtl-optimization/28970] [4.1 regression] wrong " ebotcazou at gcc dot gnu dot org
@ 2006-11-01 12:11 ` ebotcazou at gcc dot gnu dot org
2006-11-01 12:16 ` ebotcazou at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2006-11-01 12:11 UTC (permalink / raw)
To: gcc-bugs
------- Comment #10 from ebotcazou at gcc dot gnu dot org 2006-11-01 12:11 -------
Subject: Bug 28970
Author: ebotcazou
Date: Wed Nov 1 12:11:18 2006
New Revision: 118379
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=118379
Log:
PR rtl-optimization/28970
* loop.c (loop_giv_reduce_benefit): Take the max of the addition
cost on all the increments of the BIV.
Added:
branches/gcc-4_1-branch/gcc/testsuite/gcc.c-torture/execute/20061101-1.c
Modified:
branches/gcc-4_1-branch/gcc/ChangeLog
branches/gcc-4_1-branch/gcc/loop.c
branches/gcc-4_1-branch/gcc/testsuite/ChangeLog
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Bug rtl-optimization/28970] [4.1 regression] wrong code for simple loop test case
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
` (9 preceding siblings ...)
2006-11-01 12:11 ` ebotcazou at gcc dot gnu dot org
@ 2006-11-01 12:16 ` ebotcazou at gcc dot gnu dot org
10 siblings, 0 replies; 12+ messages in thread
From: ebotcazou at gcc dot gnu dot org @ 2006-11-01 12:16 UTC (permalink / raw)
To: gcc-bugs
------- Comment #11 from ebotcazou at gcc dot gnu dot org 2006-11-01 12:16 -------
More of a kludge than a fix...
--
ebotcazou at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
URL| |http://gcc.gnu.org/ml/gcc-
| |patches/2006-
| |11/msg00010.html
Status|ASSIGNED |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28970
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2006-11-01 12:16 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-09-07 4:58 [Bug middle-end/28970] New: Wrong code for simple loop test case bergner at vnet dot ibm dot com
2006-09-07 5:01 ` [Bug middle-end/28970] [4.1 Regression] " pinskia at gcc dot gnu dot org
2006-09-07 20:26 ` janis at gcc dot gnu dot org
2006-10-16 12:07 ` rguenth at gcc dot gnu dot org
2006-10-27 9:50 ` rguenth at gcc dot gnu dot org
2006-10-27 16:40 ` janis at gcc dot gnu dot org
2006-10-28 11:06 ` rguenth at gcc dot gnu dot org
2006-10-29 23:06 ` [Bug rtl-optimization/28970] " ebotcazou at gcc dot gnu dot org
2006-10-29 23:07 ` ebotcazou at gcc dot gnu dot org
2006-10-30 16:01 ` [Bug rtl-optimization/28970] [4.1 regression] wrong " ebotcazou at gcc dot gnu dot org
2006-11-01 12:11 ` ebotcazou at gcc dot gnu dot org
2006-11-01 12:16 ` ebotcazou 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).