This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR58246


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;
+ }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]