Bugfix: add missing NaN handling for Cmp nodes inside combo.
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Fri, 9 Apr 2010 15:34:33 +0000 (15:34 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Fri, 9 Apr 2010 15:34:33 +0000 (15:34 +0000)
This fixes testsuite/backend/floatset.c ...

[r27367]

ir/opt/combo.c

index 73c54fd..f8a5070 100644 (file)
@@ -2302,15 +2302,26 @@ static void compute_Cmp(node_t *node)
        node_t         *r    = get_irn_node(get_Cmp_right(cmp));
        lattice_elem_t a     = l->type;
        lattice_elem_t b     = r->type;
+       ir_mode        *mode = get_irn_mode(get_Cmp_left(cmp));
 
        if (a.tv == tarval_top || b.tv == tarval_top) {
                node->type.tv = tarval_top;
        } else if (r->part == l->part) {
                /* both nodes congruent, we can probably do something */
-               node->type.tv = tarval_b_true;
+               if (mode_is_float(mode)) {
+                       /* beware of NaN's */
+                       node->type.tv = tarval_bottom;
+               } else {
+                       node->type.tv = tarval_b_true;
+               }
        } else if (is_con(a) && is_con(b)) {
                /* both nodes are constants, we can probably do something */
-               node->type.tv = tarval_b_true;
+               if (mode_is_float(mode)) {
+                       /* beware of NaN's */
+                       node->type.tv = tarval_bottom;
+               } else {
+                       node->type.tv = tarval_b_true;
+               }
        } else {
                node->type.tv = tarval_bottom;
        }