From: rguenth Date: Mon, 18 Feb 2013 12:11:47 +0000 (+0000) Subject: 2013-02-18 Richard Biener X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e6b37e57d7cd38d9ce2553e47e6c702d0d9f492a;p=thirdparty%2Fgcc.git 2013-02-18 Richard Biener PR tree-optimization/56321 * tree-ssa-reassoc.c (propagate_op_to_single_use): Properly order SSA name release and virtual operand unlinking. * gcc.dg/torture/pr56321.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@196117 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dbf8a1733281..044ca29cfaa9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-02-18 Richard Biener + + PR tree-optimization/56321 + * tree-ssa-reassoc.c (propagate_op_to_single_use): Properly + order SSA name release and virtual operand unlinking. + 2013-02-17 Edgar E. Iglesias * config/microblaze/microblaze.md (save_stack_block): Define. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2377db0a2e88..ac25824326e1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-02-18 Richard Biener + + PR tree-optimization/56321 + * gcc.dg/torture/pr56321.c: New testcase. + 2013-02-16 Edgar E. Iglesias * gcc.dg/20020312-2.c: Define MicroBlaze PIC register diff --git a/gcc/testsuite/gcc.dg/torture/pr56321.c b/gcc/testsuite/gcc.dg/torture/pr56321.c new file mode 100644 index 000000000000..a8c46346595a --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr56321.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-ffast-math" } */ + +void foo(int n, int nreps, float tdgefa, float tdgesl) +{ + float kflops,ops; + ops=((2.0*n*n*n)/3.0+2.0*n*n); + kflops=2.*nreps*ops/(1000.*(tdgefa+tdgesl)); + + __builtin_printf ("%f\n", kflops); +} diff --git a/gcc/tree-ssa-reassoc.c b/gcc/tree-ssa-reassoc.c index eb19f38ee632..f53526b56d39 100644 --- a/gcc/tree-ssa-reassoc.c +++ b/gcc/tree-ssa-reassoc.c @@ -1062,11 +1062,9 @@ propagate_op_to_single_use (tree op, gimple stmt, tree *def) if (TREE_CODE (op) != SSA_NAME) update_stmt (use_stmt); gsi = gsi_for_stmt (stmt); + unlink_stmt_vdef (stmt); gsi_remove (&gsi, true); release_defs (stmt); - - if (is_gimple_call (stmt)) - unlink_stmt_vdef (stmt); } /* Walks the linear chain with result *DEF searching for an operation