From: Andreas Schwab Date: Fri, 12 Jun 1998 01:26:05 +0000 (+0000) Subject: expr.c (do_jump, [...]): When comparing complex prevent operands from being evaluated... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8d62b411cf5f8c9225388d466934878fc2c8e379;p=gcc.git expr.c (do_jump, [...]): When comparing complex prevent operands from being evaluated twice. * expr.c (do_jump, case EQ_EXPR, NE_EXPR): When comparing complex prevent operands from being evaluated twice. From-SVN: r20440 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c32d284edb..96dc22cbc95 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Jun 12 10:23:36 1998 Andreas Schwab + + * expr.c (do_jump, case EQ_EXPR, NE_EXPR): When comparing complex + prevent operands from being evaluated twice. + Fri Jun 12 00:50:27 1998 Sergey Okhapkin * toplev.c (lang_options): Add -remap as a preprocessor option. diff --git a/gcc/expr.c b/gcc/expr.c index 06d9a4c818d..657737f63e0 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -10007,24 +10007,28 @@ do_jump (exp, if_false_label, if_true_label) do_jump (TREE_OPERAND (exp, 0), if_true_label, if_false_label); else if (GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) - do_jump - (fold - (build (TRUTH_ANDIF_EXPR, TREE_TYPE (exp), - fold (build (EQ_EXPR, TREE_TYPE (exp), - fold (build1 (REALPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 0))), - fold (build1 (REALPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 1))))), - fold (build (EQ_EXPR, TREE_TYPE (exp), - fold (build1 (IMAGPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 0))), - fold (build1 (IMAGPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 1))))))), - if_false_label, if_true_label); + { + tree exp0 = save_expr (TREE_OPERAND (exp, 0)); + tree exp1 = save_expr (TREE_OPERAND (exp, 1)); + do_jump + (fold + (build (TRUTH_ANDIF_EXPR, TREE_TYPE (exp), + fold (build (EQ_EXPR, TREE_TYPE (exp), + fold (build1 (REALPART_EXPR, + TREE_TYPE (inner_type), + exp0)), + fold (build1 (REALPART_EXPR, + TREE_TYPE (inner_type), + exp1)))), + fold (build (EQ_EXPR, TREE_TYPE (exp), + fold (build1 (IMAGPART_EXPR, + TREE_TYPE (inner_type), + exp0)), + fold (build1 (IMAGPART_EXPR, + TREE_TYPE (inner_type), + exp1)))))), + 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); @@ -10041,24 +10045,28 @@ do_jump (exp, 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 (inner_type)) == MODE_COMPLEX_FLOAT || GET_MODE_CLASS (TYPE_MODE (inner_type)) == MODE_COMPLEX_INT) - do_jump - (fold - (build (TRUTH_ORIF_EXPR, TREE_TYPE (exp), - fold (build (NE_EXPR, TREE_TYPE (exp), - fold (build1 (REALPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 0))), - fold (build1 (REALPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 1))))), - fold (build (NE_EXPR, TREE_TYPE (exp), - fold (build1 (IMAGPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 0))), - fold (build1 (IMAGPART_EXPR, - TREE_TYPE (inner_type), - TREE_OPERAND (exp, 1))))))), - if_false_label, if_true_label); + { + tree exp0 = save_expr (TREE_OPERAND (exp, 0)); + tree exp1 = save_expr (TREE_OPERAND (exp, 1)); + do_jump + (fold + (build (TRUTH_ORIF_EXPR, TREE_TYPE (exp), + fold (build (NE_EXPR, TREE_TYPE (exp), + fold (build1 (REALPART_EXPR, + TREE_TYPE (inner_type), + exp0)), + fold (build1 (REALPART_EXPR, + TREE_TYPE (inner_type), + exp1)))), + fold (build (NE_EXPR, TREE_TYPE (exp), + fold (build1 (IMAGPART_EXPR, + TREE_TYPE (inner_type), + exp0)), + fold (build1 (IMAGPART_EXPR, + TREE_TYPE (inner_type), + exp1)))))), + 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);