This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR58246
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 29 Aug 2013 15:01:39 +0200 (CEST)
- Subject: [PATCH] Fix PR58246
- Authentication-results: sourceware.org; auth=none
The following fixes PR58246 by fixing a dominator check.
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.
Richard.
2013-08-29 Richard Biener <rguenther@suse.de>
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.
Index: gcc/tree-ssa-dce.c
===================================================================
*** gcc/tree-ssa-dce.c (revision 202068)
--- gcc/tree-ssa-dce.c (working copy)
*************** mark_aliased_reaching_defs_necessary_1 (
*** 574,579 ****
--- 574,584 ----
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))
Index: gcc/testsuite/gcc.dg/torture/pr58246.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr58246.c (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr58246.c (working copy)
***************
*** 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;
+ }