Commit 0e8c9172 by Richard Kenner

(do_jump, case EQ_EXPR, NE_EXPR): Properly compare complex.

From-SVN: r9577
parent 0d481071
...@@ -9095,32 +9095,64 @@ do_jump (exp, if_false_label, if_true_label) ...@@ -9095,32 +9095,64 @@ do_jump (exp, if_false_label, if_true_label)
break; break;
case EQ_EXPR: case EQ_EXPR:
if (integer_zerop (TREE_OPERAND (exp, 1))) {
do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label); tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
else if (((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
== MODE_INT) if (integer_zerop (TREE_OPERAND (exp, 1)))
&& do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
!can_compare_p (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))) else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (TYPE_MODE (inner_type) == MODE_COMPLEX_INT))
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_INT) do_jump
do_jump_by_parts_equality (exp, if_false_label, if_true_label); (fold
else (build (TRUTH_ANDIF_EXPR, TREE_TYPE (exp),
comparison = compare (exp, EQ, EQ); fold (build (EQ_EXPR, TREE_TYPE (exp),
break; fold (build1 (REALPART_EXPR, inner_type,
TREE_OPERAND (exp, 0))),
fold (build1 (REALPART_EXPR, inner_type,
TREE_OPERAND (exp, 1))))),
fold (build (EQ_EXPR, TREE_TYPE (exp),
fold (build1 (IMAGPART_EXPR, inner_type,
TREE_OPERAND (exp, 0))),
fold (build1 (IMAGPART_EXPR, inner_type,
TREE_OPERAND (exp, 1))))))),
if_false_label, if_true_label);
else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
&& !can_compare_p (TYPE_MODE (inner_type)))
do_jump_by_parts_equality (exp, if_false_label, if_true_label);
else
comparison = compare (exp, EQ, EQ);
break;
}
case NE_EXPR: case NE_EXPR:
if (integer_zerop (TREE_OPERAND (exp, 1))) {
do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label); tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
else if (((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
== MODE_INT) if (integer_zerop (TREE_OPERAND (exp, 1)))
&& do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
!can_compare_p (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))) else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (TYPE_MODE (inner_type) == MODE_COMPLEX_INT))
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_INT) do_jump
do_jump_by_parts_equality (exp, if_true_label, if_false_label); (fold
else (build (TRUTH_ORIF_EXPR, TREE_TYPE (exp),
comparison = compare (exp, NE, NE); fold (build (NE_EXPR, TREE_TYPE (exp),
break; fold (build1 (REALPART_EXPR, inner_type,
TREE_OPERAND (exp, 0))),
fold (build1 (REALPART_EXPR, inner_type,
TREE_OPERAND (exp, 1))))),
fold (build (NE_EXPR, TREE_TYPE (exp),
fold (build1 (IMAGPART_EXPR, inner_type,
TREE_OPERAND (exp, 0))),
fold (build1 (IMAGPART_EXPR, inner_type,
TREE_OPERAND (exp, 1))))))),
if_false_label, if_true_label);
else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_INT
&& !can_compare_p (TYPE_MODE (inner_type)))
do_jump_by_parts_equality (exp, if_true_label, if_false_label);
else
comparison = compare (exp, NE, NE);
break;
}
case LT_EXPR: case LT_EXPR:
if ((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) if ((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment