From: danglin Date: Mon, 11 Jul 2005 03:56:12 +0000 (+0000) Subject: PR middle-end/22239 X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=c72c75a7ed419cd07fed21fefaf9f9089ffb286b;hp=f2731e4b05fb0215fdda1d22a6c39ccf98d74b30 PR middle-end/22239 PR target/20126 * loop.c (loop_givs_rescan): Use expand_simple_binop instead of gen_rtx_MINUS to handle non-replaceable (plus ((x) (const)). git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101863 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 87a89f443dc..073b6c4efb4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-07-10 John David Anglin + + PR middle-end/22239 + PR target/20126 + * loop.c (loop_givs_rescan): Use expand_simple_binop instead of + gen_rtx_MINUS to handle non-replaceable (plus ((x) (const)). + 2005-07-07 Daniel Berlin * tree-ssa-structalias.c (struct variable_info): Heapify complex. diff --git a/gcc/loop.c b/gcc/loop.c index c0e3272e6d3..ae06307bca9 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -5496,14 +5496,18 @@ loop_givs_rescan (struct loop *loop, struct iv_class *bl, rtx *reg_map) v->new_reg)); else if (GET_CODE (*v->location) == PLUS && REG_P (XEXP (*v->location, 0)) - && REG_P (v->new_reg) && CONSTANT_P (XEXP (*v->location, 1))) - loop_insn_emit_before (loop, 0, v->insn, - gen_move_insn (XEXP (*v->location, 0), - gen_rtx_MINUS - (GET_MODE (*v->location), - v->new_reg, - XEXP (*v->location, 1)))); + { + rtx tem; + start_sequence (); + tem = expand_simple_binop (GET_MODE (*v->location), MINUS, + v->new_reg, XEXP (*v->location, 1), + NULL_RTX, 0, OPTAB_LIB_WIDEN); + emit_move_insn (XEXP (*v->location, 0), tem); + tem = get_insns (); + end_sequence (); + loop_insn_emit_before (loop, 0, v->insn, tem); + } else { /* If it wasn't a reg, create a pseudo and use that. */