From 0248ce054752e353be11bdf52dae7c5f6d2cb7f0 Mon Sep 17 00:00:00 2001 From: Alexandre Oliva Date: Thu, 19 Jul 2001 22:42:07 +0000 Subject: [PATCH] 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/ChangeLog | 5 +++++ gcc/simplify-rtx.c | 41 +++++++++++++++++++++++++++++------------ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d7ab64223b..e427ce579af 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-07-19 Alexandre Oliva + + * simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from + old and new operands in `<', `3' and `b'. + 2001-07-19 Neil Booth * Makefile.in (emit-rtl.o, c-decl.o): Depend on debug.h. diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 70b7240301f..1d090ba7783 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. */ -- 2.30.2