From c37b68d42af9dfe0561541be06879f6cdb0f0532 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Mon, 6 Oct 2003 23:11:21 +0000 Subject: expr.c (expand_expr ): Handle the void type semantics of COND_EXPR when expanding the "A op 0 ? FOO ... * expr.c (expand_expr ): Handle the void type semantics of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations. From-SVN: r72172 --- gcc/ChangeLog | 5 +++++ gcc/expr.c | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 06ea611..b0a81bc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,9 @@ 2003-10-06 Roger Sayle + + * expr.c (expand_expr ): Handle the void type semantics + of COND_EXPR when expanding the "A op 0 ? FOO : A" optimizations. + +2003-10-06 Roger Sayle Zack Weinberg * optabs.c (prepare_float_lib_cmp): Avoid searching for REG_RETVAL diff --git a/gcc/expr.c b/gcc/expr.c index 26eaab0..edc4290 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8910,8 +8910,12 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode, jumpif (TREE_OPERAND (exp, 0), op0); start_cleanup_deferral (); - store_expr (TREE_OPERAND (exp, 2), temp, - modifier == EXPAND_STACK_PARM ? 2 : 0); + if (TREE_TYPE (TREE_OPERAND (exp, 2)) != void_type_node) + store_expr (TREE_OPERAND (exp, 2), temp, + modifier == EXPAND_STACK_PARM ? 2 : 0); + else + expand_expr (TREE_OPERAND (exp, 2), + ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); op1 = op0; } else if (temp @@ -8931,8 +8935,12 @@ expand_expr (tree exp, rtx target, enum machine_mode tmode, jumpifnot (TREE_OPERAND (exp, 0), op0); start_cleanup_deferral (); - store_expr (TREE_OPERAND (exp, 1), temp, - modifier == EXPAND_STACK_PARM ? 2 : 0); + if (TREE_TYPE (TREE_OPERAND (exp, 1)) != void_type_node) + store_expr (TREE_OPERAND (exp, 1), temp, + modifier == EXPAND_STACK_PARM ? 2 : 0); + else + expand_expr (TREE_OPERAND (exp, 1), + ignore ? const0_rtx : NULL_RTX, VOIDmode, 0); op1 = op0; } else -- cgit v1.1