From 48d79c431ebc7d3b5e41ffc3d331cce06ca6a8c0 Mon Sep 17 00:00:00 2001 From: Jan Hubicka <jh@suse.cz> Date: Fri, 25 Jan 2002 22:46:07 +0100 Subject: [PATCH] unroll.c (unroll_loop): Lower final_value to nonmemory operand; avoid it's copies. * unroll.c (unroll_loop): Lower final_value to nonmemory operand; avoid it's copies. From-SVN: r49224 --- gcc/ChangeLog | 5 +++++ gcc/unroll.c | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 713d6258a69c..43048011771b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Jan 25 22:42:49 CET 2002 Jan Hubicka <jh@suse.cz> + + * unroll.c (unroll_loop): Lower final_value to nonmemory operand; + avoid it's copies. + Fri Jan 25 08:26:19 2002 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> * builtins.c (expand_builtin_strncpy): Use integer_zerop instead diff --git a/gcc/unroll.c b/gcc/unroll.c index ecddc3154c94..9a0cfcf6871c 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -930,6 +930,19 @@ unroll_loop (loop, insn_count, strength_reduce_p) start_sequence (); + /* Final value may have form of (PLUS val1 const1_rtx). We need + to convert it into general operand, so compute the real value. */ + + if (GET_CODE (final_value) == PLUS) + { + final_value = expand_simple_binop (mode, PLUS, + copy_rtx (XEXP (final_value, 0)), + copy_rtx (XEXP (final_value, 1)), + NULL_RTX, 0, OPTAB_LIB_WIDEN); + } + if (!nonmemory_operand (final_value, VOIDmode)) + final_value = force_reg (mode, copy_rtx (final_value)); + /* Calculate the difference between the final and initial values. Final value may be a (plus (reg x) (const_int 1)) rtx. Let the following cse pass simplify this if initial value is @@ -949,7 +962,7 @@ unroll_loop (loop, insn_count, strength_reduce_p) so we can pretend that the overflow value is 0/~0. */ if (cc == NE || less_p != neg_inc) - diff = expand_simple_binop (mode, MINUS, copy_rtx (final_value), + diff = expand_simple_binop (mode, MINUS, final_value, copy_rtx (initial_value), NULL_RTX, 0, OPTAB_LIB_WIDEN); else -- GitLab