diff options
author | Alexandre Oliva <aoliva@redhat.com> | 2001-07-19 22:42:07 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2001-07-19 22:42:07 +0000 |
commit | 0248ce054752e353be11bdf52dae7c5f6d2cb7f0 (patch) | |
tree | 0ba44d7828040d98fc8b57247fc9e7f1558682ef /gcc/simplify-rtx.c | |
parent | e1772ac0583495ca8fbc949988dd51dbfc83b8fa (diff) | |
download | gcc-0248ce054752e353be11bdf52dae7c5f6d2cb7f0.tar.gz |
simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from old and new operands in `<', `3' and `b'.
2001-07-19 Alexandre Oliva <aoliva@redhat.com>
* simplify-rtx.c (simplify_replace_rtx): Try to obtain mode from
old and new operands in `<', `3' and `b'.
From-SVN: r44164
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r-- | gcc/simplify-rtx.c | 41 |
1 files changed, 29 insertions, 12 deletions
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. */ |