re PR tree-optimization/23115 (-ftree-vectorize generates wrong code)
authorDevang Patel <dpatel@apple.com>
Tue, 8 Nov 2005 20:21:15 +0000 (12:21 -0800)
committerDevang Patel <dpatel@gcc.gnu.org>
Tue, 8 Nov 2005 20:21:15 +0000 (12:21 -0800)
       PR tree-optimization/23115
       * tree-if-conv.c (find_phi_replacement_condition): Check domninated_by
       relation.

       * gcc.dg/tree-ssa/pr23115.c: New.

From-SVN: r106653

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr23115.c [new file with mode: 0644]
gcc/tree-if-conv.c

index b8ba8d37c7c2a3e2e03b12cc97717f4953a6c462..4f792d3ecd1ec0824e97b0e8a67a78a18ea5e5b0 100644 (file)
@@ -1,3 +1,9 @@
+2005-11-08  Devang Patel <dpatel@apple.com>
+
+       PR tree-optimization/23115
+       * tree-if-conv.c (find_phi_replacement_condition): Check domninated_by
+       relation.
+
 2005-11-08  Joseph S. Myers  <joseph@codesourcery.com>
 
        * config/rs6000/t-fprules (MULTILIB_MATCHES_FLOAT): Include
index 6d4d60dce2df9823a1a63f4e67608eb03a2223ba..6ea074165f2b3c8616eede6c1fef07d5bf35796a 100644 (file)
@@ -1,3 +1,8 @@
+2005-11-08  Devang Patel <dpatel@apple.com>
+
+       PR tree-optimization/23115
+       * gcc.dg/tree-ssa/pr23115.c: New.
+       
 2005-11-08  David Edelsohn  <edelsohn@gnu.org>
 
        * g++.dg/ext/altivec-{1-13}.C: XFAIL on AIX and SPE.
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr23115.c b/gcc/testsuite/gcc.dg/tree-ssa/pr23115.c
new file mode 100644 (file)
index 0000000..6a52aaf
--- /dev/null
@@ -0,0 +1,29 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -ftree-vectorize" } */
+
+extern void abort (void);
+
+#define MIN2(a,b) (((a)<(b)) ? (a) : (b))
+#define MAX2(a,b) (((a)>(b)) ? (a) : (b))
+
+double p[2] = { 4., 5. };
+
+int main()
+{
+  long j;
+  double R, n, x;
+
+  n = 1.e300;
+  x = -1.e300;
+  for( j=0; j < 2; j++ )
+    {
+      x = MAX2(x,p[j]);
+      n = MIN2(n,p[j]);
+    }
+  R = x-n;
+
+  if( R < 0.1 )
+      abort ();
+
+  return 0;
+}
index 303ae2b659d75b2345e6c762d901064bc8b94940..5d8375d412ed8a932a232740402044a2296f3bb9 100644 (file)
@@ -679,7 +679,7 @@ find_phi_replacement_condition (struct loop *loop,
        S2: x = c ? b : a;
 
        S2 is preferred over S1. Make 'b' first_bb and use its condition.
-
+       
      2) Do not make loop header first_bb.
 
      3)
@@ -691,7 +691,10 @@ find_phi_replacement_condition (struct loop *loop,
        S3: x = (c == d) ? b : a;
 
        S3 is preferred over S1 and S2*, Make 'b' first_bb and use 
-       its condition.  */
+       its condition.  
+
+     4) If  pred B is dominated by pred A then use pred B's condition.
+        See PR23115.  */
 
   /* Select condition that is not TRUTH_NOT_EXPR.  */
   tmp_cond = first_bb->aux;
@@ -703,8 +706,10 @@ find_phi_replacement_condition (struct loop *loop,
       second_bb = tmp_bb;
     }
 
-  /* Check if FIRST_BB is loop header or not.  */
-  if (first_bb == loop->header) 
+  /* Check if FIRST_BB is loop header or not and make sure that
+     FIRST_BB does not dominate SECOND_BB.  */
+  if (first_bb == loop->header
+      || dominated_by_p (CDI_DOMINATORS, second_bb, first_bb))
     {
       tmp_cond = second_bb->aux;
       if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR)