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:
{
tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
if (integer_zerop (TREE_OPERAND (exp, 1))) if (integer_zerop (TREE_OPERAND (exp, 1)))
do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label); do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label);
else if (((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
== MODE_INT) || GET_MODE_CLASS (TYPE_MODE (inner_type) == MODE_COMPLEX_INT))
&& do_jump
!can_compare_p (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))) (fold
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_FLOAT (build (TRUTH_ANDIF_EXPR, TREE_TYPE (exp),
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_INT) fold (build (EQ_EXPR, TREE_TYPE (exp),
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); do_jump_by_parts_equality (exp, if_false_label, if_true_label);
else else
comparison = compare (exp, EQ, EQ); comparison = compare (exp, EQ, EQ);
break; break;
}
case NE_EXPR: case NE_EXPR:
{
tree inner_type = TREE_TYPE (TREE_OPERAND (exp, 0));
if (integer_zerop (TREE_OPERAND (exp, 1))) if (integer_zerop (TREE_OPERAND (exp, 1)))
do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label); do_jump (TREE_OPERAND (exp, 0), if_false_label, if_true_label);
else if (((GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT
== MODE_INT) || GET_MODE_CLASS (TYPE_MODE (inner_type) == MODE_COMPLEX_INT))
&& do_jump
!can_compare_p (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))) (fold
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_FLOAT (build (TRUTH_ORIF_EXPR, TREE_TYPE (exp),
|| GET_MODE_CLASS (TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == MODE_COMPLEX_INT) fold (build (NE_EXPR, TREE_TYPE (exp),
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); do_jump_by_parts_equality (exp, if_true_label, if_false_label);
else else
comparison = compare (exp, NE, NE); comparison = compare (exp, NE, NE);
break; 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