From 0248ce054752e353be11bdf52dae7c5f6d2cb7f0 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 19 Jul 2001 22:42:07 +0000 Subject: simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from old and new operands in `<', `3' and `b'. 2001-07-19 Alexandre Oliva * simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from old and new operands in `<', `3' and `b'. From-SVN: r44164 --- gcc/simplify-rtx.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) (limited to 'gcc/simplify-rtx.c') diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 70b7240..1d090ba 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -247,21 +247,38 @@ simplify_replace_rtx (x, old, new) simplify_replace_rtx (XEXP (x, 0), old, new), simplify_replace_rtx (XEXP (x, 1), old, new)); case '<': - return - simplify_gen_relational (code, mode, - (GET_MODE (XEXP (x, 0)) != VOIDmode - ? GET_MODE (XEXP (x, 0)) - : GET_MODE (XEXP (x, 1))), - simplify_replace_rtx (XEXP (x, 0), old, new), - simplify_replace_rtx (XEXP (x, 1), old, new)); + { + enum machine_mode op_mode = (GET_MODE (XEXP (x, 0)) != VOIDmode + ? GET_MODE (XEXP (x, 0)) + : GET_MODE (XEXP (x, 1))); + rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new); + rtx op1 = simplify_replace_rtx (XEXP (x, 1), old, new); + + return + simplify_gen_relational (code, mode, + (op_mode != VOIDmode + ? op_mode + : GET_MODE (op0) != VOIDmode + ? GET_MODE (op0) + : GET_MODE (op1)), + op0, op1); + } case '3': case 'b': - return - simplify_gen_ternary (code, mode, GET_MODE (XEXP (x, 0)), - simplify_replace_rtx (XEXP (x, 0), old, new), - simplify_replace_rtx (XEXP (x, 1), old, new), - simplify_replace_rtx (XEXP (x, 2), old, new)); + { + enum machine_mode op_mode = GET_MODE (XEXP (x, 0)); + rtx op0 = simplify_replace_rtx (XEXP (x, 0), old, new); + + return + simplify_gen_ternary (code, mode, + (op_mode != VOIDmode + ? op_mode + : GET_MODE (op0)), + op0, + simplify_replace_rtx (XEXP (x, 1), old, new), + simplify_replace_rtx (XEXP (x, 2), old, new)); + } case 'x': /* The only case we try to handle is a SUBREG. */ -- cgit v1.1