From e4b82a55cbf321ae335e47cc08ccad7346d2ca56 Mon Sep 17 00:00:00 2001 From: law Date: Tue, 28 May 2002 23:03:21 +0000 Subject: [PATCH] * optabs.c (expand_binop): Fix nwords sign warnings. generate pseudo for add_optab. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@53976 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 3 +++ gcc/optabs.c | 17 +++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 71abe07471b..d124a7debb6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -78,6 +78,9 @@ Tue May 28 21:16:18 2002 J"orn Rennecke 2002-05-22 David Edelsohn Jeff Law + * optabs.c (expand_binop): Fix nwords sign warnings. + generate pseudo for add_optab. + * sched-deps.c (sched_analyze): Do not clear SCHED_GROUP_P. * haifa-sched.c (move_insn): Clear SCHED_GROUP_P after it is used. diff --git a/gcc/optabs.c b/gcc/optabs.c index da43dd18417..da72ffddac9 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -1210,9 +1210,9 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) { int i; optab otheroptab = binoptab == add_optab ? sub_optab : add_optab; - unsigned int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; + int nwords = GET_MODE_BITSIZE (mode) / BITS_PER_WORD; rtx carry_in = NULL_RTX, carry_out = NULL_RTX; - rtx xop0, xop1; + rtx xop0, xop1, xtarget; /* We can handle either a 1 or -1 value for the carry. If STORE_FLAG value is one of those, use it. Otherwise, use 1 since it is the @@ -1227,19 +1227,20 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) xop0 = force_reg (mode, op0); xop1 = force_reg (mode, op1); - if (target == 0 || GET_CODE (target) != REG - || target == xop0 || target == xop1) - target = gen_reg_rtx (mode); + xtarget = gen_reg_rtx (mode); + + if (target == 0 || GET_CODE (target) != REG) + target = xtarget; /* Indicate for flow that the entire target reg is being set. */ if (GET_CODE (target) == REG) - emit_insn (gen_rtx_CLOBBER (VOIDmode, target)); + emit_insn (gen_rtx_CLOBBER (VOIDmode, xtarget)); /* Do the actual arithmetic. */ for (i = 0; i < nwords; i++) { int index = (WORDS_BIG_ENDIAN ? nwords - i - 1 : i); - rtx target_piece = operand_subword (target, index, 1, mode); + rtx target_piece = operand_subword (xtarget, index, 1, mode); rtx op0_piece = operand_subword_force (xop0, index, mode); rtx op1_piece = operand_subword_force (xop1, index, mode); rtx x; @@ -1299,7 +1300,7 @@ expand_binop (mode, binoptab, op0, op1, target, unsignedp, methods) { if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) { - rtx temp = emit_move_insn (target, target); + rtx temp = emit_move_insn (target, xtarget); set_unique_reg_note (temp, REG_EQUAL, -- 2.11.0