* [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
@ 2012-09-05 22:22 ` pinskia at gcc dot gnu.org
2012-09-06 9:58 ` rguenth at gcc dot gnu.org
` (8 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2012-09-05 22:22 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Keywords| |wrong-code
Last reconfirmed| |2012-09-05
Component|c++ |tree-optimization
Ever Confirmed|0 |1
Summary|incorrect code generation |[4.7/4.8 Regression]
|from g++ -O on x86_64 |incorrect code generation
| |from g++ -O
Target Milestone|--- |4.7.2
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-09-05 22:21:58 UTC ---
Confirmed, here is the source unincluded:
#include <complex>
#include <cstdio>
using namespace std;
class bar_src {
public:
bar_src() : next(0) {}
virtual ~bar_src() { delete next; }
bar_src *next;
};
class foo_src : public bar_src {
public:
foo_src(double f, double fwidth, double s = 5.0);
virtual ~foo_src() {}
private:
double freq, width, peak_time, cutoff;
};
foo_src::foo_src(double f, double fwidth, double s) {
freq = f; width = 1/fwidth; cutoff = s*width; peak_time = cutoff;
}
complex<double> do_ft2(int i) __attribute__ ((noinline));
complex<double> do_ft2(int i) {
return i == 0 ? complex<double>(-491.697,887.05) :
complex<double>(-491.692,887.026);
}
void foo(void) {
complex<double> prev_ft = 0.0, ft = 0.0;
for (int i=0; i < 2; i++) {
prev_ft = ft;
{
foo_src src(1.0, 1.0 / 20);
ft = do_ft2(i);
printf("ft (it = %d) = %g%+gi\n", i, real(ft), imag(ft));
}
if (i > 0)
printf("abs(ft - prev_ft) = %g\n",
abs(ft - prev_ft));
}
}
int main(void) {
foo();
return 0;
}
--- CUT ---
The problem comes from FRE, I think due to how it handles look though copies.
It happens on more than just x86_64.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
2012-09-05 22:22 ` [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O pinskia at gcc dot gnu.org
@ 2012-09-06 9:58 ` rguenth at gcc dot gnu.org
2012-09-06 10:21 ` rguenth at gcc dot gnu.org
` (7 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-06 9:58 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org
|gnu.org |
--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-06 09:58:26 UTC ---
Let me see. We seem to pick up
<bb 2>:
REALPART_EXPR <prev_ft._M_value> = 0.0;
when optimizing
<bb 7>:
D.25613_38 = ft._M_value;
__r$_M_value = D.25613_38;
- D.25615_39 = MEM[(const double &)&prev_ft];
+ D.25615_39 = 0.0;
possibly not realizing that
<bb 3>:
prev_ft = ft;
clobbers it.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
2012-09-05 22:22 ` [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O pinskia at gcc dot gnu.org
2012-09-06 9:58 ` rguenth at gcc dot gnu.org
@ 2012-09-06 10:21 ` rguenth at gcc dot gnu.org
2012-09-06 12:22 ` hjl.tools at gmail dot com
` (6 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-06 10:21 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
--- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-06 10:21:36 UTC ---
Testing
Index: gcc/tree-ssa-alias.c
===================================================================
--- gcc/tree-ssa-alias.c (revision 191016)
+++ gcc/tree-ssa-alias.c (working copy)
@@ -2094,7 +2094,10 @@ walk_non_aliased_vuses (ao_ref *ref, tre
/* Lookup succeeded. */
else if (res != NULL)
break;
- /* Translation succeeded, continue walking. */
+ /* Translation succeeded, continue walking. We have to
+ again visit cycles though. */
+ if (visited)
+ bitmap_clear (visited);
}
vuse = gimple_vuse (def_stmt);
}
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (2 preceding siblings ...)
2012-09-06 10:21 ` rguenth at gcc dot gnu.org
@ 2012-09-06 12:22 ` hjl.tools at gmail dot com
2012-09-06 13:54 ` [Bug tree-optimization/54498] [4.6/4.7/4.8 " rguenth at gcc dot gnu.org
` (5 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: hjl.tools at gmail dot com @ 2012-09-06 12:22 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |NEW
CC| |rguenth at gcc dot gnu.org
--- Comment #4 from H.J. Lu <hjl.tools at gmail dot com> 2012-09-06 12:21:36 UTC ---
It was caused by revision 177672:
http://gcc.gnu.org/ml/gcc-cvs/2011-08/msg00686.html
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6/4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (3 preceding siblings ...)
2012-09-06 12:22 ` hjl.tools at gmail dot com
@ 2012-09-06 13:54 ` rguenth at gcc dot gnu.org
2012-09-06 14:48 ` rguenth at gcc dot gnu.org
` (4 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-06 13:54 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
Target Milestone|4.7.2 |4.6.4
Summary|[4.7/4.8 Regression] |[4.6/4.7/4.8 Regression]
|incorrect code generation |incorrect code generation
|from g++ -O |from g++ -O
--- Comment #5 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-06 13:54:34 UTC ---
Latent in 4.6, too.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6/4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (4 preceding siblings ...)
2012-09-06 13:54 ` [Bug tree-optimization/54498] [4.6/4.7/4.8 " rguenth at gcc dot gnu.org
@ 2012-09-06 14:48 ` rguenth at gcc dot gnu.org
2012-09-06 15:20 ` rguenth at gcc dot gnu.org
` (3 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-06 14:48 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-06 14:47:50 UTC ---
Author: rguenth
Date: Thu Sep 6 14:47:42 2012
New Revision: 191030
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=191030
Log:
2012-09-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54498
* tree-ssa-alias.h (get_continuation_for_phi): Add flag to
abort when reaching an already visited region.
* tree-ssa-alias.c (maybe_skip_until): Likewise. And do it.
(get_continuation_for_phi_1): Likewise.
(walk_non_aliased_vuses): When we translated the reference,
abort when we re-visit a region.
* tree-ssa-pre.c (translate_vuse_through_block): Adjust.
Modified:
trunk/gcc/ChangeLog
trunk/gcc/tree-ssa-alias.c
trunk/gcc/tree-ssa-alias.h
trunk/gcc/tree-ssa-pre.c
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6/4.7/4.8 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (5 preceding siblings ...)
2012-09-06 14:48 ` rguenth at gcc dot gnu.org
@ 2012-09-06 15:20 ` rguenth at gcc dot gnu.org
2012-09-07 8:20 ` [Bug tree-optimization/54498] [4.6 " rguenth at gcc dot gnu.org
` (2 subsequent siblings)
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-06 15:20 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-06 15:20:29 UTC ---
Author: rguenth
Date: Thu Sep 6 15:20:24 2012
New Revision: 191031
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=191031
Log:
2012-09-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/54498
* tree-ssa-alias.h (get_continuation_for_phi): Add flag to
abort when reaching an already visited region.
* tree-ssa-alias.c (maybe_skip_until): Likewise. And do it.
(get_continuation_for_phi_1): Likewise.
(walk_non_aliased_vuses): When we translated the reference,
abort when we re-visit a region.
* tree-ssa-pre.c (translate_vuse_through_block): Adjust.
Modified:
branches/gcc-4_7-branch/gcc/ChangeLog
branches/gcc-4_7-branch/gcc/tree-ssa-alias.c
branches/gcc-4_7-branch/gcc/tree-ssa-alias.h
branches/gcc-4_7-branch/gcc/tree-ssa-pre.c
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (6 preceding siblings ...)
2012-09-06 15:20 ` rguenth at gcc dot gnu.org
@ 2012-09-07 8:20 ` rguenth at gcc dot gnu.org
2013-04-12 16:30 ` jakub at gcc dot gnu.org
2023-03-27 12:32 ` cvs-commit at gcc dot gnu.org
9 siblings, 0 replies; 11+ messages in thread
From: rguenth at gcc dot gnu.org @ 2012-09-07 8:20 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |4.7.2
Summary|[4.6/4.7/4.8 Regression] |[4.6 Regression] incorrect
|incorrect code generation |code generation from g++ -O
|from g++ -O |
--- Comment #8 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-09-07 08:19:52 UTC ---
Sofar fixed on trunk and 4.7 branch.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (7 preceding siblings ...)
2012-09-07 8:20 ` [Bug tree-optimization/54498] [4.6 " rguenth at gcc dot gnu.org
@ 2013-04-12 16:30 ` jakub at gcc dot gnu.org
2023-03-27 12:32 ` cvs-commit at gcc dot gnu.org
9 siblings, 0 replies; 11+ messages in thread
From: jakub at gcc dot gnu.org @ 2013-04-12 16:30 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
CC| |jakub at gcc dot gnu.org
Resolution| |FIXED
Target Milestone|4.6.4 |4.7.2
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> 2013-04-12 16:30:08 UTC ---
The 4.6 branch has been closed, fixed in GCC 4.7.2.
^ permalink raw reply [flat|nested] 11+ messages in thread
* [Bug tree-optimization/54498] [4.6 Regression] incorrect code generation from g++ -O
2012-09-05 21:50 [Bug c++/54498] New: incorrect code generation from g++ -O on x86_64 stevenj at alum dot mit.edu
` (8 preceding siblings ...)
2013-04-12 16:30 ` jakub at gcc dot gnu.org
@ 2023-03-27 12:32 ` cvs-commit at gcc dot gnu.org
9 siblings, 0 replies; 11+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-03-27 12:32 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54498
--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Biener <rguenth@gcc.gnu.org>:
https://gcc.gnu.org/g:bff7c6f70166ee71ff6e42f58663dc255e4bc079
commit r13-6879-gbff7c6f70166ee71ff6e42f58663dc255e4bc079
Author: Richard Biener <rguenther@suse.de>
Date: Mon Mar 27 14:30:47 2023 +0200
tree-optimization/54498 - testcase for the bug
I realized I never added a testcase for the fix of this bug. Now done
after verifying it still fails when reverting the fix.
PR tree-optimization/54498
* g++.dg/torture/pr54498.C: New testcase.
^ permalink raw reply [flat|nested] 11+ messages in thread