tree-ssa-dom.c (record_conditions): Only record "unordered" conditions from floating...
authorRoger Sayle <roger@eyesopen.com>
Thu, 8 Jun 2006 16:48:30 +0000 (16:48 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Thu, 8 Jun 2006 16:48:30 +0000 (16:48 +0000)
* tree-ssa-dom.c (record_conditions): Only record "unordered"
conditions from floating point comparisons.

From-SVN: r114489

gcc/ChangeLog
gcc/tree-ssa-dom.c

index 654c990657eac693948296862cb2c905eedd2d52..33bbfbc2a0b883c170cc93d1eac4f7de3555320a 100644 (file)
@@ -1,3 +1,8 @@
+2006-06-08  Roger Sayle  <roger@eyesopen.com>
+
+       * tree-ssa-dom.c (record_conditions): Only record "unordered"
+       conditions from floating point comparisons.
+
 2006-06-08  Paolo Bonzini  <bonzini@gnu.org>
 
        PR middle-end/27733
index 6574f9bf244149b8cf64ea940fc0bba35c6f6565..085a5d604823890cbfd35b74d2c2026fcc5320c0 100644 (file)
@@ -950,36 +950,61 @@ record_conditions (struct edge_info *edge_info, tree cond, tree inverted)
     {
     case LT_EXPR:
     case GT_EXPR:
-      edge_info->max_cond_equivalences = 12;
-      edge_info->cond_equivalences = XNEWVEC (tree, 12);
+      if (FLOAT_TYPE_P (TREE_TYPE (op0)))
+       {
+         edge_info->max_cond_equivalences = 12;
+         edge_info->cond_equivalences = XNEWVEC (tree, 12);
+         build_and_record_new_cond (ORDERED_EXPR, op0, op1,
+                                    &edge_info->cond_equivalences[8]);
+         build_and_record_new_cond (LTGT_EXPR, op0, op1,
+                                    &edge_info->cond_equivalences[10]);
+       }
+      else
+       {
+         edge_info->max_cond_equivalences = 8;
+         edge_info->cond_equivalences = XNEWVEC (tree, 8);
+       }
+
       build_and_record_new_cond ((TREE_CODE (cond) == LT_EXPR
                                  ? LE_EXPR : GE_EXPR),
                                 op0, op1, &edge_info->cond_equivalences[4]);
-      build_and_record_new_cond (ORDERED_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[6]);
       build_and_record_new_cond (NE_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[8]);
-      build_and_record_new_cond (LTGT_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[10]);
+                                &edge_info->cond_equivalences[6]);
       break;
 
     case GE_EXPR:
     case LE_EXPR:
-      edge_info->max_cond_equivalences = 6;
-      edge_info->cond_equivalences = XNEWVEC (tree, 6);
-      build_and_record_new_cond (ORDERED_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[4]);
+      if (FLOAT_TYPE_P (TREE_TYPE (op0)))
+       {
+         edge_info->max_cond_equivalences = 6;
+         edge_info->cond_equivalences = XNEWVEC (tree, 6);
+         build_and_record_new_cond (ORDERED_EXPR, op0, op1,
+                                    &edge_info->cond_equivalences[4]);
+       }
+      else
+       {
+         edge_info->max_cond_equivalences = 4;
+         edge_info->cond_equivalences = XNEWVEC (tree, 4);
+       }
       break;
 
     case EQ_EXPR:
-      edge_info->max_cond_equivalences = 10;
-      edge_info->cond_equivalences = XNEWVEC (tree, 10);
-      build_and_record_new_cond (ORDERED_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[4]);
+      if (FLOAT_TYPE_P (TREE_TYPE (op0)))
+       {
+         edge_info->max_cond_equivalences = 10;
+         edge_info->cond_equivalences = XNEWVEC (tree, 10);
+         build_and_record_new_cond (ORDERED_EXPR, op0, op1,
+                                    &edge_info->cond_equivalences[8]);
+       }
+      else
+       {
+         edge_info->max_cond_equivalences = 8;
+         edge_info->cond_equivalences = XNEWVEC (tree, 8);
+       }
       build_and_record_new_cond (LE_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[6]);
+                                &edge_info->cond_equivalences[4]);
       build_and_record_new_cond (GE_EXPR, op0, op1,
-                                &edge_info->cond_equivalences[8]);
+                                &edge_info->cond_equivalences[6]);
       break;
 
     case UNORDERED_EXPR: