diff options
Diffstat (limited to 'contrib/gcc/doloop.c')
-rw-r--r-- | contrib/gcc/doloop.c | 63 |
1 files changed, 23 insertions, 40 deletions
diff --git a/contrib/gcc/doloop.c b/contrib/gcc/doloop.c index 67b742c..a82fb16 100644 --- a/contrib/gcc/doloop.c +++ b/contrib/gcc/doloop.c @@ -1,5 +1,6 @@ /* Perform doloop optimizations - Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 + Free Software Foundation, Inc. Contributed by Michael P. Hayes (m.hayes@elec.canterbury.ac.nz) This file is part of GCC. @@ -21,6 +22,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "config.h" #include "system.h" +#include "coretypes.h" +#include "tm.h" #include "rtl.h" #include "flags.h" #include "expr.h" @@ -29,6 +32,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "basic-block.h" #include "toplev.h" #include "tm_p.h" +#include "cfgloop.h" /* This module is used to modify loops with a determinable number of @@ -56,23 +60,18 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #ifdef HAVE_doloop_end -static rtx doloop_condition_get - PARAMS ((rtx)); -static unsigned HOST_WIDE_INT doloop_iterations_max - PARAMS ((const struct loop_info *, enum machine_mode, int)); -static int doloop_valid_p - PARAMS ((const struct loop *, rtx)); -static int doloop_modify - PARAMS ((const struct loop *, rtx, rtx, rtx, rtx, rtx)); -static int doloop_modify_runtime - PARAMS ((const struct loop *, rtx, rtx, rtx, enum machine_mode, rtx)); +static unsigned HOST_WIDE_INT doloop_iterations_max (const struct loop_info *, + enum machine_mode, int); +static int doloop_valid_p (const struct loop *, rtx); +static int doloop_modify (const struct loop *, rtx, rtx, rtx, rtx, rtx); +static int doloop_modify_runtime (const struct loop *, rtx, rtx, rtx, + enum machine_mode, rtx); /* Return the loop termination condition for PATTERN or zero if it is not a decrement and branch jump insn. */ -static rtx -doloop_condition_get (pattern) - rtx pattern; +rtx +doloop_condition_get (rtx pattern) { rtx cmp; rtx inc; @@ -143,10 +142,8 @@ doloop_condition_get (pattern) MODE is the mode of the iteration count and NONNEG is nonzero if the iteration count has been proved to be non-negative. */ static unsigned HOST_WIDE_INT -doloop_iterations_max (loop_info, mode, nonneg) - const struct loop_info *loop_info; - enum machine_mode mode; - int nonneg; +doloop_iterations_max (const struct loop_info *loop_info, + enum machine_mode mode, int nonneg) { unsigned HOST_WIDE_INT n_iterations_max; enum rtx_code code; @@ -252,9 +249,7 @@ doloop_iterations_max (loop_info, mode, nonneg) /* Return nonzero if the loop specified by LOOP is suitable for the use of special low-overhead looping instructions. */ static int -doloop_valid_p (loop, jump_insn) - const struct loop *loop; - rtx jump_insn; +doloop_valid_p (const struct loop *loop, rtx jump_insn) { const struct loop_info *loop_info = LOOP_INFO (loop); @@ -402,14 +397,8 @@ doloop_valid_p (loop, jump_insn) low-overhead looping insn to emit at the end of the loop. This returns nonzero if it was successful. */ static int -doloop_modify (loop, iterations, iterations_max, - doloop_seq, start_label, condition) - const struct loop *loop; - rtx iterations; - rtx iterations_max; - rtx doloop_seq; - rtx start_label; - rtx condition; +doloop_modify (const struct loop *loop, rtx iterations, rtx iterations_max, + rtx doloop_seq, rtx start_label, rtx condition) { rtx counter_reg; rtx count; @@ -485,7 +474,7 @@ doloop_modify (loop, iterations, iterations_max, count = GEN_INT (INTVAL (count) - 1); else count = expand_simple_binop (GET_MODE (counter_reg), MINUS, - count, GEN_INT (1), + count, const1_rtx, 0, 0, OPTAB_LIB_WIDEN); } @@ -542,14 +531,9 @@ doloop_modify (loop, iterations, iterations_max, number of loop iterations. DOLOOP_INSN is the low-overhead looping insn to insert. Returns nonzero if loop successfully modified. */ static int -doloop_modify_runtime (loop, iterations_max, - doloop_seq, start_label, mode, condition) - const struct loop *loop; - rtx iterations_max; - rtx doloop_seq; - rtx start_label; - enum machine_mode mode; - rtx condition; +doloop_modify_runtime (const struct loop *loop, rtx iterations_max, + rtx doloop_seq, rtx start_label, + enum machine_mode mode, rtx condition) { const struct loop_info *loop_info = LOOP_INFO (loop); HOST_WIDE_INT abs_inc; @@ -756,8 +740,7 @@ doloop_modify_runtime (loop, iterations_max, is a candidate for this optimization. Returns nonzero if loop successfully modified. */ int -doloop_optimize (loop) - const struct loop *loop; +doloop_optimize (const struct loop *loop) { struct loop_info *loop_info = LOOP_INFO (loop); rtx initial_value; |