From a1d4a5098f1bff28df1bc3f6340de62b424e0016 Mon Sep 17 00:00:00 2001 From: rguenth Date: Thu, 29 Aug 2013 13:04:19 +0000 Subject: [PATCH] 2013-08-29 Richard Biener PR tree-optimization/58246 * tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): Properly handle the dominance check inside a basic-block. * gcc.dg/torture/pr58246.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@202071 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr58246.c | 21 +++++++++++++++++++++ gcc/tree-ssa-dce.c | 5 +++++ 4 files changed, 37 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/pr58246.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ad77502..30caf6e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2013-08-29 Richard Biener + PR tree-optimization/58246 + * tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): Properly + handle the dominance check inside a basic-block. + +2013-08-29 Richard Biener + PR middle-end/57287 * tree-ssa-copy.c (may_propagate_copy): Allow propagating of default defs that appear in abnormal PHI nodes. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3d54682..1f34c2d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-08-29 Richard Biener + + PR tree-optimization/58246 + * gcc.dg/torture/pr58246.c: New testcase. + 2013-08-29 Thomas Koenig PR fortran/52243 diff --git a/gcc/testsuite/gcc.dg/torture/pr58246.c b/gcc/testsuite/gcc.dg/torture/pr58246.c new file mode 100644 index 0000000..5417abf --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr58246.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ + +extern void abort (void); + +int a, b; + +int main () +{ + int t[2] = {1,1}; + + for (a = 0; a < 2; a++) + { + b ^= t[a]; + t[a] = t[1] = 0; + } + + if (b != 1) + abort (); + + return 0; +} diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 4fd3cd8..22ae50b 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -574,6 +574,11 @@ mark_aliased_reaching_defs_necessary_1 (ao_ref *ref, tree vdef, void *data) in the references (gcc.c-torture/execute/pr42142.c). The simplest way is to check if the kill dominates the use. */ + /* But when both are in the same block we cannot + easily tell whether we came from a backedge + unless we decide to compute stmt UIDs + (see PR58246). */ + && (basic_block) data != gimple_bb (def_stmt) && dominated_by_p (CDI_DOMINATORS, (basic_block) data, gimple_bb (def_stmt)) && operand_equal_p (ref->ref, lhs, 0)) -- 2.7.4