From 874f6a6d1f62dd04490e67f5c19e4621902e9dfa Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 11 Sep 2002 18:29:21 -0700 Subject: [PATCH] optabs.c (expand_binop): Minor cleanup. * optabs.c (expand_binop): Minor cleanup. (expand_twoval_binop): Convert CONST_INTs like in expand_binop. From-SVN: r57046 --- gcc/ChangeLog | 5 +++++ gcc/optabs.c | 36 ++++++++++++++++++++++-------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 07a8622684a..200f20f64fe 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-09-09 Eric Botcazou ebotcazou@libertysurf.fr + + * optabs.c (expand_binop): Minor cleanup. + (expand_twoval_binop): Convert CONST_INTs like in expand_binop. + 2002-09-11 Dan Nicolaescu * print-tree.c (print_node): Print the restrict qualifier. diff --git a/gcc/optabs.c b/gcc/optabs.c index a7dae46dbcb..f098aa6a092 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -783,24 +783,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) seem that we don't need to convert CONST_INTs, but we do, so that they're properly zero-extended or sign-extended for their modes; shift operations are an exception, because the second - operand needs not be extended to the mode of the result. */ + operand need not be extended to the mode of the result. */ - if (GET_MODE (op0) != mode0 - && mode0 != VOIDmode) + if (GET_MODE (op0) != mode0 && mode0 != VOIDmode) xop0 = convert_modes (mode0, GET_MODE (op0) != VOIDmode ? GET_MODE (op0) : mode, xop0, unsignedp); - if (GET_MODE (xop1) != mode1 - && mode1 != VOIDmode) + if (GET_MODE (op1) != mode1 && mode1 != VOIDmode) xop1 = convert_modes (mode1, GET_MODE (op1) != VOIDmode ? GET_MODE (op1) - : ! shift_op - ? mode - : mode1, + : (shift_op ? mode1 : mode), xop1, unsignedp); /* Now, if insn's predicates don't allow our operands, put them into @@ -2235,13 +2231,25 @@ expand_twoval_binop (binoptab, op0, op1, targ0, targ1, unsignedp) rtx pat; rtx xop0 = op0, xop1 = op1; - /* In case this insn wants input operands in modes different from the - result, convert the operands. */ - if (GET_MODE (op0) != VOIDmode && GET_MODE (op0) != mode0) - xop0 = convert_to_mode (mode0, xop0, unsignedp); + /* In case the insn wants input operands in modes different from + those of the actual operands, convert the operands. It would + seem that we don't need to convert CONST_INTs, but we do, so + that they're properly zero-extended or sign-extended for their + modes. */ + + if (GET_MODE (op0) != mode0 && mode0 != VOIDmode) + xop0 = convert_modes (mode0, + GET_MODE (op0) != VOIDmode + ? GET_MODE (op0) + : mode, + xop0, unsignedp); - if (GET_MODE (op1) != VOIDmode && GET_MODE (op1) != mode1) - xop1 = convert_to_mode (mode1, xop1, unsignedp); + if (GET_MODE (op1) != mode1 && mode1 != VOIDmode) + xop1 = convert_modes (mode1, + GET_MODE (op1) != VOIDmode + ? GET_MODE (op1) + : mode, + xop1, unsignedp); /* Now, if insn doesn't accept these operands, put them into pseudos. */ if (! (*insn_data[icode].operand[1].predicate) (xop0, mode0)) -- 2.30.2