diff options
author | aj <aj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-06 09:56:09 +0000 |
---|---|---|
committer | aj <aj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-06 09:56:09 +0000 |
commit | 3ad4992fcd7ff7630590475a58eb6bc739e60888 (patch) | |
tree | 4fb7a1aaa85c3c4aeda23d46346034b73d069df2 /gcc/loop.c | |
parent | 9aa3a6fa9648268ce13ad83da01c625d7fff695f (diff) | |
download | gcc-3ad4992fcd7ff7630590475a58eb6bc739e60888.tar.gz |
* jump.c: Convert prototypes to ISO C90.
* langhooks-def.h: Likewise. Add extern to prototypes.
* langhooks.c: Likewise.
* langhooks.h: Likewise.
* lcm.c: Likewise.
* local-alloc.c: Likewise.
* loop-init.c: Likewise.
* loop-unroll.c: Likewise.
* loop-unswitch.c: Likewise.
* loop.c: Likewise.
* loop.h: Likewise. Add extern to prototypes.
* machmode.h: Likewise.
* main.c: Likewise.
* mbchar.c: Likewise.
* mbchar.h: Likewise.
* mkdeps.c: Likewise.
* mkdeps.h: Likewise.
* optabs.c: Likewise.
* optabs.h: Likewise.
* output.h: Likewise.
* gccspec.c: Likwise.
* postreload.c: Likewise.
* prefix.c: Likewise.
* prefix.h: Likewise.
* print-rtl.c: Likewise.
* print-tree.c: Likewise.
* profile.c: Likewise.
* read-rtl.c: Likewise.
* real.c: Likewise.
* real.h: Likewise.
* recog.c: Likewise.
* recog.h: Likewise.
* reg-stack.c: Likewise.
* regclass.c: Likewise.
* regmove.c: Likewise.
* regrename.c: Likewise.
* regs.h: Likewise.
* reload.c: Likewise.
* reload.h: Likewise.
* reload1.c: Likewise.
* reorg.c: Likewise.
* resource.c: Likewise.
* resource.h: Likewise.
* rtl-error.c: Likewise.
* rtl.c: Likewise.
* rtl.h: Likewise.
* rtlanal.c: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68998 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop.c')
-rw-r--r-- | gcc/loop.c | 927 |
1 files changed, 321 insertions, 606 deletions
diff --git a/gcc/loop.c b/gcc/loop.c index 265bfb40d74..b3c55170927 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -204,7 +204,7 @@ struct movable short savings; /* Number of insns we can move for this reg, including other movables that force this or match this one. */ - ENUM_BITFIELD(machine_mode) savemode : 8; /* Nonzero means it is a mode for + ENUM_BITFIELD(machine_mode) savemode : 8; /* Nonzero means it is a mode for a low part that we should avoid changing when clearing the rest of the reg. */ unsigned int cond : 1; /* 1 if only conditionally movable */ @@ -236,133 +236,120 @@ FILE *loop_dump_stream; /* Forward declarations. */ -static void invalidate_loops_containing_label PARAMS ((rtx)); -static void find_and_verify_loops PARAMS ((rtx, struct loops *)); -static void mark_loop_jump PARAMS ((rtx, struct loop *)); -static void prescan_loop PARAMS ((struct loop *)); -static int reg_in_basic_block_p PARAMS ((rtx, rtx)); -static int consec_sets_invariant_p PARAMS ((const struct loop *, - rtx, int, rtx)); -static int labels_in_range_p PARAMS ((rtx, int)); -static void count_one_set PARAMS ((struct loop_regs *, rtx, rtx, rtx *)); -static void note_addr_stored PARAMS ((rtx, rtx, void *)); -static void note_set_pseudo_multiple_uses PARAMS ((rtx, rtx, void *)); -static int loop_reg_used_before_p PARAMS ((const struct loop *, rtx, rtx)); -static void scan_loop PARAMS ((struct loop*, int)); +static void invalidate_loops_containing_label (rtx); +static void find_and_verify_loops (rtx, struct loops *); +static void mark_loop_jump (rtx, struct loop *); +static void prescan_loop (struct loop *); +static int reg_in_basic_block_p (rtx, rtx); +static int consec_sets_invariant_p (const struct loop *, rtx, int, rtx); +static int labels_in_range_p (rtx, int); +static void count_one_set (struct loop_regs *, rtx, rtx, rtx *); +static void note_addr_stored (rtx, rtx, void *); +static void note_set_pseudo_multiple_uses (rtx, rtx, void *); +static int loop_reg_used_before_p (const struct loop *, rtx, rtx); +static void scan_loop (struct loop*, int); #if 0 -static void replace_call_address PARAMS ((rtx, rtx, rtx)); +static void replace_call_address (rtx, rtx, rtx); #endif -static rtx skip_consec_insns PARAMS ((rtx, int)); -static int libcall_benefit PARAMS ((rtx)); -static void ignore_some_movables PARAMS ((struct loop_movables *)); -static void force_movables PARAMS ((struct loop_movables *)); -static void combine_movables PARAMS ((struct loop_movables *, - struct loop_regs *)); -static int num_unmoved_movables PARAMS ((const struct loop *)); -static int regs_match_p PARAMS ((rtx, rtx, struct loop_movables *)); -static int rtx_equal_for_loop_p PARAMS ((rtx, rtx, struct loop_movables *, - struct loop_regs *)); -static void add_label_notes PARAMS ((rtx, rtx)); -static void move_movables PARAMS ((struct loop *loop, struct loop_movables *, - int, int)); -static void loop_movables_add PARAMS((struct loop_movables *, - struct movable *)); -static void loop_movables_free PARAMS((struct loop_movables *)); -static int count_nonfixed_reads PARAMS ((const struct loop *, rtx)); -static void loop_bivs_find PARAMS((struct loop *)); -static void loop_bivs_init_find PARAMS((struct loop *)); -static void loop_bivs_check PARAMS((struct loop *)); -static void loop_givs_find PARAMS((struct loop *)); -static void loop_givs_check PARAMS((struct loop *)); -static int loop_biv_eliminable_p PARAMS((struct loop *, struct iv_class *, - int, int)); -static int loop_giv_reduce_benefit PARAMS((struct loop *, struct iv_class *, - struct induction *, rtx)); -static void loop_givs_dead_check PARAMS((struct loop *, struct iv_class *)); -static void loop_givs_reduce PARAMS((struct loop *, struct iv_class *)); -static void loop_givs_rescan PARAMS((struct loop *, struct iv_class *, - rtx *)); -static void loop_ivs_free PARAMS((struct loop *)); -static void strength_reduce PARAMS ((struct loop *, int)); -static void find_single_use_in_loop PARAMS ((struct loop_regs *, rtx, rtx)); -static int valid_initial_value_p PARAMS ((rtx, rtx, int, rtx)); -static void find_mem_givs PARAMS ((const struct loop *, rtx, rtx, int, int)); -static void record_biv PARAMS ((struct loop *, struct induction *, - rtx, rtx, rtx, rtx, rtx *, - int, int)); -static void check_final_value PARAMS ((const struct loop *, - struct induction *)); -static void loop_ivs_dump PARAMS((const struct loop *, FILE *, int)); -static void loop_iv_class_dump PARAMS((const struct iv_class *, FILE *, int)); -static void loop_biv_dump PARAMS((const struct induction *, FILE *, int)); -static void loop_giv_dump PARAMS((const struct induction *, FILE *, int)); -static void record_giv PARAMS ((const struct loop *, struct induction *, - rtx, rtx, rtx, rtx, rtx, rtx, int, - enum g_types, int, int, rtx *)); -static void update_giv_derive PARAMS ((const struct loop *, rtx)); -static void check_ext_dependent_givs PARAMS ((struct iv_class *, - struct loop_info *)); -static int basic_induction_var PARAMS ((const struct loop *, rtx, - enum machine_mode, rtx, rtx, - rtx *, rtx *, rtx **)); -static rtx simplify_giv_expr PARAMS ((const struct loop *, rtx, rtx *, int *)); -static int general_induction_var PARAMS ((const struct loop *loop, rtx, rtx *, - rtx *, rtx *, rtx *, int, int *, - enum machine_mode)); -static int consec_sets_giv PARAMS ((const struct loop *, int, rtx, - rtx, rtx, rtx *, rtx *, rtx *, rtx *)); -static int check_dbra_loop PARAMS ((struct loop *, int)); -static rtx express_from_1 PARAMS ((rtx, rtx, rtx)); -static rtx combine_givs_p PARAMS ((struct induction *, struct induction *)); -static int cmp_combine_givs_stats PARAMS ((const void *, const void *)); -static void combine_givs PARAMS ((struct loop_regs *, struct iv_class *)); -static int product_cheap_p PARAMS ((rtx, rtx)); -static int maybe_eliminate_biv PARAMS ((const struct loop *, struct iv_class *, - int, int, int)); -static int maybe_eliminate_biv_1 PARAMS ((const struct loop *, rtx, rtx, - struct iv_class *, int, - basic_block, rtx)); -static int last_use_this_basic_block PARAMS ((rtx, rtx)); -static void record_initial PARAMS ((rtx, rtx, void *)); -static void update_reg_last_use PARAMS ((rtx, rtx)); -static rtx next_insn_in_loop PARAMS ((const struct loop *, rtx)); -static void loop_regs_scan PARAMS ((const struct loop *, int)); -static int count_insns_in_loop PARAMS ((const struct loop *)); -static int find_mem_in_note_1 PARAMS ((rtx *, void *)); -static rtx find_mem_in_note PARAMS ((rtx)); -static void load_mems PARAMS ((const struct loop *)); -static int insert_loop_mem PARAMS ((rtx *, void *)); -static int replace_loop_mem PARAMS ((rtx *, void *)); -static void replace_loop_mems PARAMS ((rtx, rtx, rtx, int)); -static int replace_loop_reg PARAMS ((rtx *, void *)); -static void replace_loop_regs PARAMS ((rtx insn, rtx, rtx)); -static void note_reg_stored PARAMS ((rtx, rtx, void *)); -static void try_copy_prop PARAMS ((const struct loop *, rtx, unsigned int)); -static void try_swap_copy_prop PARAMS ((const struct loop *, rtx, - unsigned int)); -static rtx check_insn_for_givs PARAMS((struct loop *, rtx, int, int)); -static rtx check_insn_for_bivs PARAMS((struct loop *, rtx, int, int)); -static rtx gen_add_mult PARAMS ((rtx, rtx, rtx, rtx)); -static void loop_regs_update PARAMS ((const struct loop *, rtx)); -static int iv_add_mult_cost PARAMS ((rtx, rtx, rtx, rtx)); - -static rtx loop_insn_emit_after PARAMS((const struct loop *, basic_block, - rtx, rtx)); -static rtx loop_call_insn_emit_before PARAMS((const struct loop *, - basic_block, rtx, rtx)); -static rtx loop_call_insn_hoist PARAMS((const struct loop *, rtx)); -static rtx loop_insn_sink_or_swim PARAMS((const struct loop *, rtx)); - -static void loop_dump_aux PARAMS ((const struct loop *, FILE *, int)); -static void loop_delete_insns PARAMS ((rtx, rtx)); -static HOST_WIDE_INT remove_constant_addition PARAMS ((rtx *)); -static rtx gen_load_of_final_value PARAMS ((rtx, rtx)); -void debug_ivs PARAMS ((const struct loop *)); -void debug_iv_class PARAMS ((const struct iv_class *)); -void debug_biv PARAMS ((const struct induction *)); -void debug_giv PARAMS ((const struct induction *)); -void debug_loop PARAMS ((const struct loop *)); -void debug_loops PARAMS ((const struct loops *)); +static rtx skip_consec_insns (rtx, int); +static int libcall_benefit (rtx); +static void ignore_some_movables (struct loop_movables *); +static void force_movables (struct loop_movables *); +static void combine_movables (struct loop_movables *, struct loop_regs *); +static int num_unmoved_movables (const struct loop *); +static int regs_match_p (rtx, rtx, struct loop_movables *); +static int rtx_equal_for_loop_p (rtx, rtx, struct loop_movables *, + struct loop_regs *); +static void add_label_notes (rtx, rtx); +static void move_movables (struct loop *loop, struct loop_movables *, int, + int); +static void loop_movables_add (struct loop_movables *, struct movable *); +static void loop_movables_free (struct loop_movables *); +static int count_nonfixed_reads (const struct loop *, rtx); +static void loop_bivs_find (struct loop *); +static void loop_bivs_init_find (struct loop *); +static void loop_bivs_check (struct loop *); +static void loop_givs_find (struct loop *); +static void loop_givs_check (struct loop *); +static int loop_biv_eliminable_p (struct loop *, struct iv_class *, int, int); +static int loop_giv_reduce_benefit (struct loop *, struct iv_class *, + struct induction *, rtx); +static void loop_givs_dead_check (struct loop *, struct iv_class *); +static void loop_givs_reduce (struct loop *, struct iv_class *); +static void loop_givs_rescan (struct loop *, struct iv_class *, rtx *); +static void loop_ivs_free (struct loop *); +static void strength_reduce (struct loop *, int); +static void find_single_use_in_loop (struct loop_regs *, rtx, rtx); +static int valid_initial_value_p (rtx, rtx, int, rtx); +static void find_mem_givs (const struct loop *, rtx, rtx, int, int); +static void record_biv (struct loop *, struct induction *, rtx, rtx, rtx, + rtx, rtx *, int, int); +static void check_final_value (const struct loop *, struct induction *); +static void loop_ivs_dump (const struct loop *, FILE *, int); +static void loop_iv_class_dump (const struct iv_class *, FILE *, int); +static void loop_biv_dump (const struct induction *, FILE *, int); +static void loop_giv_dump (const struct induction *, FILE *, int); +static void record_giv (const struct loop *, struct induction *, rtx, rtx, + rtx, rtx, rtx, rtx, int, enum g_types, int, int, + rtx *); +static void update_giv_derive (const struct loop *, rtx); +static void check_ext_dependent_givs (struct iv_class *, struct loop_info *); +static int basic_induction_var (const struct loop *, rtx, enum machine_mode, + rtx, rtx, rtx *, rtx *, rtx **); +static rtx simplify_giv_expr (const struct loop *, rtx, rtx *, int *); +static int general_induction_var (const struct loop *loop, rtx, rtx *, rtx *, + rtx *, rtx *, int, int *, enum machine_mode); +static int consec_sets_giv (const struct loop *, int, rtx, rtx, rtx, rtx *, + rtx *, rtx *, rtx *); +static int check_dbra_loop (struct loop *, int); +static rtx express_from_1 (rtx, rtx, rtx); +static rtx combine_givs_p (struct induction *, struct induction *); +static int cmp_combine_givs_stats (const void *, const void *); +static void combine_givs (struct loop_regs *, struct iv_class *); +static int product_cheap_p (rtx, rtx); +static int maybe_eliminate_biv (const struct loop *, struct iv_class *, int, + int, int); +static int maybe_eliminate_biv_1 (const struct loop *, rtx, rtx, + struct iv_class *, int, basic_block, rtx); +static int last_use_this_basic_block (rtx, rtx); +static void record_initial (rtx, rtx, void *); +static void update_reg_last_use (rtx, rtx); +static rtx next_insn_in_loop (const struct loop *, rtx); +static void loop_regs_scan (const struct loop *, int); +static int count_insns_in_loop (const struct loop *); +static int find_mem_in_note_1 (rtx *, void *); +static rtx find_mem_in_note (rtx); +static void load_mems (const struct loop *); +static int insert_loop_mem (rtx *, void *); +static int replace_loop_mem (rtx *, void *); +static void replace_loop_mems (rtx, rtx, rtx, int); +static int replace_loop_reg (rtx *, void *); +static void replace_loop_regs (rtx insn, rtx, rtx); +static void note_reg_stored (rtx, rtx, void *); +static void try_copy_prop (const struct loop *, rtx, unsigned int); +static void try_swap_copy_prop (const struct loop *, rtx, unsigned int); +static rtx check_insn_for_givs (struct loop *, rtx, int, int); +static rtx check_insn_for_bivs (struct loop *, rtx, int, int); +static rtx gen_add_mult (rtx, rtx, rtx, rtx); +static void loop_regs_update (const struct loop *, rtx); +static int iv_add_mult_cost (rtx, rtx, rtx, rtx); + +static rtx loop_insn_emit_after (const struct loop *, basic_block, rtx, rtx); +static rtx loop_call_insn_emit_before (const struct loop *, basic_block, + rtx, rtx); +static rtx loop_call_insn_hoist (const struct loop *, rtx); +static rtx loop_insn_sink_or_swim (const struct loop *, rtx); + +static void loop_dump_aux (const struct loop *, FILE *, int); +static void loop_delete_insns (rtx, rtx); +static HOST_WIDE_INT remove_constant_addition (rtx *); +static rtx gen_load_of_final_value (rtx, rtx); +void debug_ivs (const struct loop *); +void debug_iv_class (const struct iv_class *); +void debug_biv (const struct induction *); +void debug_giv (const struct induction *); +void debug_loop (const struct loop *); +void debug_loops (const struct loops *); typedef struct loop_replace_args { @@ -379,13 +366,12 @@ typedef struct loop_replace_args /* Indirect_jump_in_function is computed once per function. */ static int indirect_jump_in_function; -static int indirect_jump_in_function_p PARAMS ((rtx)); +static int indirect_jump_in_function_p (rtx); -static int compute_luids PARAMS ((rtx, rtx, int)); +static int compute_luids (rtx, rtx, int); -static int biv_elimination_giv_has_0_offset PARAMS ((struct induction *, - struct induction *, - rtx)); +static int biv_elimination_giv_has_0_offset (struct induction *, + struct induction *, rtx); /* Benefit penalty, if a giv is not replaceable, i.e. must emit an insn to copy the value of the strength reduced giv to its original register. */ @@ -395,7 +381,7 @@ static int copy_cost; static int reg_address_cost; void -init_loop () +init_loop (void) { rtx reg = gen_rtx_REG (word_mode, LAST_VIRTUAL_REGISTER + 1); @@ -410,9 +396,7 @@ init_loop () Start at insn START and stop just before END. Assign LUIDs starting with PREV_LUID + 1. Return the last assigned LUID + 1. */ static int -compute_luids (start, end, prev_luid) - rtx start, end; - int prev_luid; +compute_luids (rtx start, rtx end, int prev_luid) { int i; rtx insn; @@ -439,11 +423,7 @@ compute_luids (start, end, prev_luid) (or 0 if none should be output). */ void -loop_optimize (f, dumpfile, flags) - /* f is the first instruction of a chain of insns for one function */ - rtx f; - FILE *dumpfile; - int flags; +loop_optimize (rtx f, FILE *dumpfile, int flags) { rtx insn; int i; @@ -566,9 +546,7 @@ loop_optimize (f, dumpfile, flags) bottom. */ static rtx -next_insn_in_loop (loop, insn) - const struct loop *loop; - rtx insn; +next_insn_in_loop (const struct loop *loop, rtx insn) { insn = NEXT_INSN (insn); @@ -598,9 +576,7 @@ next_insn_in_loop (loop, insn) write, then we can also mark the memory read as invariant. */ static void -scan_loop (loop, flags) - struct loop *loop; - int flags; +scan_loop (struct loop *loop, int flags) { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -824,7 +800,7 @@ scan_loop (loop, flags) && (maybe_never || loop_reg_used_before_p (loop, set, p))) /* It is unsafe to move the set. However, it may be OK to - move the source into a new pseudo, and substitute a + move the source into a new pseudo, and substitute a reg-to-reg copy for the original insn. This code used to consider it OK to move a set of a variable @@ -850,7 +826,7 @@ scan_loop (loop, flags) - if the mode doesn't support copy operations (obviously), - if the source is already a reg (the motion will gain nothing), - if the source is a legitimate constant (likewise). */ - else if (insert_temp + else if (insert_temp && (optimize_size || ! can_copy_p (GET_MODE (SET_SRC (set))) || GET_CODE (SET_SRC (set)) == REG @@ -1131,10 +1107,10 @@ scan_loop (loop, flags) Store 0 in regs->array[I].set_in_loop for each reg I that is moved. For machines with few registers this increases code size, so do not - move moveables when optimizing for code size on such machines. + move moveables when optimizing for code size on such machines. (The 18 below is the value for i386.) */ - if (!optimize_size + if (!optimize_size || (reg_class_size[GENERAL_REGS] > 18 && !loop_info->has_call)) { move_movables (loop, movables, threshold, insn_count); @@ -1210,9 +1186,7 @@ scan_loop (loop, flags) mentioned in IN_THIS but not mentioned in NOT_IN_THIS. */ void -record_excess_regs (in_this, not_in_this, output) - rtx in_this, not_in_this; - rtx *output; +record_excess_regs (rtx in_this, rtx not_in_this, rtx *output) { enum rtx_code code; const char *fmt; @@ -1266,8 +1240,7 @@ record_excess_regs (in_this, not_in_this, output) If there are one or more, return an EXPR_LIST containing all of them. */ rtx -libcall_other_reg (insn, equiv) - rtx insn, equiv; +libcall_other_reg (rtx insn, rtx equiv) { rtx note = find_reg_note (insn, REG_RETVAL, NULL_RTX); rtx p = XEXP (note, 0); @@ -1291,8 +1264,7 @@ libcall_other_reg (insn, equiv) are between INSN and the end of the basic block. */ static int -reg_in_basic_block_p (insn, reg) - rtx insn, reg; +reg_in_basic_block_p (rtx insn, rtx reg) { int regno = REGNO (reg); rtx p; @@ -1345,8 +1317,7 @@ reg_in_basic_block_p (insn, reg) value directly or can contain a library call. */ static int -libcall_benefit (last) - rtx last; +libcall_benefit (rtx last) { rtx insn; int benefit = 0; @@ -1369,9 +1340,7 @@ libcall_benefit (last) /* Skip COUNT insns from INSN, counting library calls as 1 insn. */ static rtx -skip_consec_insns (insn, count) - rtx insn; - int count; +skip_consec_insns (rtx insn, int count) { for (; count > 0; count--) { @@ -1398,8 +1367,7 @@ skip_consec_insns (insn, count) was made later and so appears later on the chain. */ static void -ignore_some_movables (movables) - struct loop_movables *movables; +ignore_some_movables (struct loop_movables *movables) { struct movable *m, *m1; @@ -1430,8 +1398,7 @@ ignore_some_movables (movables) since the second can be moved only if the first is. */ static void -force_movables (movables) - struct loop_movables *movables; +force_movables (struct loop_movables *movables) { struct movable *m, *m1; @@ -1470,9 +1437,7 @@ force_movables (movables) one register. */ static void -combine_movables (movables, regs) - struct loop_movables *movables; - struct loop_regs *regs; +combine_movables (struct loop_movables *movables, struct loop_regs *regs) { struct movable *m; char *matched_regs = (char *) xmalloc (regs->num); @@ -1597,8 +1562,7 @@ combine_movables (movables, regs) moved outside the loop. */ static int -num_unmoved_movables (loop) - const struct loop *loop; +num_unmoved_movables (const struct loop *loop) { int num = 0; struct movable *m; @@ -1614,9 +1578,7 @@ num_unmoved_movables (loop) /* Return 1 if regs X and Y will become the same if moved. */ static int -regs_match_p (x, y, movables) - rtx x, y; - struct loop_movables *movables; +regs_match_p (rtx x, rtx y, struct loop_movables *movables) { unsigned int xn = REGNO (x); unsigned int yn = REGNO (y); @@ -1643,10 +1605,8 @@ regs_match_p (x, y, movables) equivalent constant, consider them equal. */ static int -rtx_equal_for_loop_p (x, y, movables, regs) - rtx x, y; - struct loop_movables *movables; - struct loop_regs *regs; +rtx_equal_for_loop_p (rtx x, rtx y, struct loop_movables *movables, + struct loop_regs *regs) { int i; int j; @@ -1762,9 +1722,7 @@ rtx_equal_for_loop_p (x, y, movables, regs) references is incremented once for each added note. */ static void -add_label_notes (x, insns) - rtx x; - rtx insns; +add_label_notes (rtx x, rtx insns) { enum rtx_code code = GET_CODE (x); int i, j; @@ -1804,11 +1762,8 @@ add_label_notes (x, insns) other throughout. */ static void -move_movables (loop, movables, threshold, insn_count) - struct loop *loop; - struct loop_movables *movables; - int threshold; - int insn_count; +move_movables (struct loop *loop, struct loop_movables *movables, + int threshold, int insn_count) { struct loop_regs *regs = LOOP_REGS (loop); int nregs = regs->num; @@ -1984,7 +1939,7 @@ move_movables (loop, movables, threshold, insn_count) /* Replace the original insn with a move from our newly created temp. */ start_sequence (); - emit_move_insn (m->set_dest, newreg); + emit_move_insn (m->set_dest, newreg); seq = get_insns (); end_sequence (); emit_insn_before (seq, p); @@ -1992,7 +1947,7 @@ move_movables (loop, movables, threshold, insn_count) } start_sequence (); - emit_move_insn (m->insert_temp ? newreg : m->set_dest, + emit_move_insn (m->insert_temp ? newreg : m->set_dest, m->set_src); seq = get_insns (); end_sequence (); @@ -2165,14 +2120,14 @@ move_movables (loop, movables, threshold, insn_count) } else if (m->insert_temp) { - rtx *reg_map2 = (rtx *) xcalloc (REGNO (newreg), + rtx *reg_map2 = (rtx *) xcalloc (REGNO (newreg), sizeof(rtx)); reg_map2 [m->regno] = newreg; i1 = loop_insn_hoist (loop, copy_rtx (PATTERN (p))); replace_regs (i1, reg_map2, REGNO (newreg), 1); free (reg_map2); - } + } else i1 = loop_insn_hoist (loop, PATTERN (p)); @@ -2228,7 +2183,7 @@ move_movables (loop, movables, threshold, insn_count) /* Replace the original insn with a move from our newly created temp. */ start_sequence (); - emit_move_insn (m->set_dest, newreg); + emit_move_insn (m->set_dest, newreg); seq = get_insns (); end_sequence (); emit_insn_before (seq, p); @@ -2355,9 +2310,7 @@ move_movables (loop, movables, threshold, insn_count) static void -loop_movables_add (movables, m) - struct loop_movables *movables; - struct movable *m; +loop_movables_add (struct loop_movables *movables, struct movable *m) { if (movables->head == 0) movables->head = m; @@ -2368,8 +2321,7 @@ loop_movables_add (movables, m) static void -loop_movables_free (movables) - struct loop_movables *movables; +loop_movables_free (struct loop_movables *movables) { struct movable *m; struct movable *m_next; @@ -2386,8 +2338,7 @@ loop_movables_free (movables) REG is the address that MEM should have before the replacement. */ static void -replace_call_address (x, reg, addr) - rtx x, reg, addr; +replace_call_address (rtx x, rtx reg, rtx addr) { enum rtx_code code; int i; @@ -2449,9 +2400,7 @@ replace_call_address (x, reg, addr) in the rtx X. */ static int -count_nonfixed_reads (loop, x) - const struct loop *loop; - rtx x; +count_nonfixed_reads (const struct loop *loop, rtx x) { enum rtx_code code; int i; @@ -2505,8 +2454,7 @@ count_nonfixed_reads (loop, x) list `store_mems' in LOOP. */ static void -prescan_loop (loop) - struct loop *loop; +prescan_loop (struct loop *loop) { int level = 1; rtx insn; @@ -2582,8 +2530,8 @@ prescan_loop (loop) later references. */ { rtx fusage_entry; - - for (fusage_entry = CALL_INSN_FUNCTION_USAGE (insn); + + for (fusage_entry = CALL_INSN_FUNCTION_USAGE (insn); fusage_entry; fusage_entry = XEXP (fusage_entry, 1)) { rtx fusage = XEXP (fusage_entry, 0); @@ -2715,8 +2663,7 @@ prescan_loop (loop) /* Invalidate all loops containing LABEL. */ static void -invalidate_loops_containing_label (label) - rtx label; +invalidate_loops_containing_label (rtx label) { struct loop *loop; for (loop = uid_loop[INSN_UID (label)]; loop; loop = loop->outer) @@ -2728,9 +2675,7 @@ invalidate_loops_containing_label (label) to from outside the loop. */ static void -find_and_verify_loops (f, loops) - rtx f; - struct loops *loops; +find_and_verify_loops (rtx f, struct loops *loops) { rtx insn; rtx label; @@ -3066,9 +3011,7 @@ find_and_verify_loops (f, loops) For speed, we assume that X is part of a pattern of a JUMP_INSN. */ static void -mark_loop_jump (x, loop) - rtx x; - struct loop *loop; +mark_loop_jump (rtx x, struct loop *loop) { struct loop *dest_loop; struct loop *outer_loop; @@ -3214,9 +3157,7 @@ mark_loop_jump (x, loop) been previously created by loop.c). */ static int -labels_in_range_p (insn, end) - rtx insn; - int end; +labels_in_range_p (rtx insn, int end) { while (insn && INSN_LUID (insn) <= end) { @@ -3231,10 +3172,8 @@ labels_in_range_p (insn, end) /* Record that a memory reference X is being set. */ static void -note_addr_stored (x, y, data) - rtx x; - rtx y ATTRIBUTE_UNUSED; - void *data ATTRIBUTE_UNUSED; +note_addr_stored (rtx x, rtx y ATTRIBUTE_UNUSED, + void *data ATTRIBUTE_UNUSED) { struct loop_info *loop_info = data; @@ -3266,10 +3205,7 @@ note_addr_stored (x, y, data) used more than once. DATA is a pointer to a loop_regs structure. */ static void -note_set_pseudo_multiple_uses (x, y, data) - rtx x; - rtx y ATTRIBUTE_UNUSED; - void *data; +note_set_pseudo_multiple_uses (rtx x, rtx y ATTRIBUTE_UNUSED, void *data) { struct loop_regs *regs = (struct loop_regs *) data; @@ -3301,9 +3237,7 @@ note_set_pseudo_multiple_uses (x, y, data) with anything stored in `loop_info->store_mems'. */ int -loop_invariant_p (loop, x) - const struct loop *loop; - rtx x; +loop_invariant_p (const struct loop *loop, rtx x) { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -3441,10 +3375,8 @@ loop_invariant_p (loop, x) and that its source is invariant. */ static int -consec_sets_invariant_p (loop, reg, n_sets, insn) - const struct loop *loop; - int n_sets; - rtx reg, insn; +consec_sets_invariant_p (const struct loop *loop, rtx reg, int n_sets, + rtx insn) { struct loop_regs *regs = LOOP_REGS (loop); rtx p = insn; @@ -3517,9 +3449,7 @@ consec_sets_invariant_p (loop, reg, n_sets, insn) that set REG are invariant according to TABLE. */ static int -all_sets_invariant_p (reg, insn, table) - rtx reg, insn; - short *table; +all_sets_invariant_p (rtx reg, rtx insn, short *table) { rtx p = insn; int regno = REGNO (reg); @@ -3547,10 +3477,7 @@ all_sets_invariant_p (reg, insn, table) a different insn, set USAGE[REGNO] to const0_rtx. */ static void -find_single_use_in_loop (regs, insn, x) - struct loop_regs *regs; - rtx insn; - rtx x; +find_single_use_in_loop (struct loop_regs *regs, rtx insn, rtx x) { enum rtx_code code = GET_CODE (x); const char *fmt = GET_RTX_FORMAT (code); @@ -3588,10 +3515,7 @@ find_single_use_in_loop (regs, insn, x) in X. */ static void -count_one_set (regs, insn, x, last_set) - struct loop_regs *regs; - rtx insn, x; - rtx *last_set; +count_one_set (struct loop_regs *regs, rtx insn, rtx x, rtx *last_set) { if (GET_CODE (x) == CLOBBER && GET_CODE (XEXP (x, 0)) == REG) /* Don't move a reg that has an explicit clobber. @@ -3643,9 +3567,7 @@ count_one_set (regs, insn, x, last_set) from an inner loop past two loops. */ static int -loop_reg_used_before_p (loop, set, insn) - const struct loop *loop; - rtx set, insn; +loop_reg_used_before_p (const struct loop *loop, rtx set, rtx insn) { rtx reg = SET_DEST (set); rtx p; @@ -3693,16 +3615,14 @@ struct check_store_data int mem_write; }; -static void check_store PARAMS ((rtx, rtx, void *)); -static void emit_prefetch_instructions PARAMS ((struct loop *)); -static int rtx_equal_for_prefetch_p PARAMS ((rtx, rtx)); +static void check_store (rtx, rtx, void *); +static void emit_prefetch_instructions (struct loop *); +static int rtx_equal_for_prefetch_p (rtx, rtx); /* Set mem_write when mem_address is found. Used as callback to note_stores. */ static void -check_store (x, pat, data) - rtx x, pat ATTRIBUTE_UNUSED; - void *data; +check_store (rtx x, rtx pat ATTRIBUTE_UNUSED, void *data) { struct check_store_data *d = (struct check_store_data *) data; @@ -3718,8 +3638,7 @@ check_store (x, pat, data) It can be nice to develop some common way to handle this. */ static int -rtx_equal_for_prefetch_p (x, y) - rtx x, y; +rtx_equal_for_prefetch_p (rtx x, rtx y) { int i; int j; @@ -3801,8 +3720,7 @@ rtx_equal_for_prefetch_p (x, y) and return it. */ static HOST_WIDE_INT -remove_constant_addition (x) - rtx *x; +remove_constant_addition (rtx *x) { HOST_WIDE_INT addval = 0; rtx exp = *x; @@ -3864,8 +3782,7 @@ remove_constant_addition (x) controlled by defined symbols that can be overridden for each target. */ static void -emit_prefetch_instructions (loop) - struct loop *loop; +emit_prefetch_instructions (struct loop *loop) { int num_prefetches = 0; int num_real_prefetches = 0; @@ -4240,8 +4157,8 @@ emit_prefetch_instructions (loop) { rtx reg = gen_reg_rtx (Pmode); loop_iv_add_mult_emit_before (loop, loc, const1_rtx, - GEN_INT (bytes_ahead), reg, - 0, before_insn); + GEN_INT (bytes_ahead), reg, + 0, before_insn); loc = reg; } @@ -4362,9 +4279,7 @@ static rtx addr_placeholder; loop iteration. */ void -for_each_insn_in_loop (loop, fncall) - struct loop *loop; - loop_insn_callback fncall; +for_each_insn_in_loop (struct loop *loop, loop_insn_callback fncall) { int not_every_iteration = 0; int maybe_multiple = 0; @@ -4502,8 +4417,7 @@ for_each_insn_in_loop (loop, fncall) } static void -loop_bivs_find (loop) - struct loop *loop; +loop_bivs_find (struct loop *loop) { struct loop_regs *regs = LOOP_REGS (loop); struct loop_ivs *ivs = LOOP_IVS (loop); @@ -4551,8 +4465,7 @@ loop_bivs_find (loop) /* Determine how BIVS are initialized by looking through pre-header extended basic block. */ static void -loop_bivs_init_find (loop) - struct loop *loop; +loop_bivs_init_find (struct loop *loop) { struct loop_ivs *ivs = LOOP_IVS (loop); /* Temporary list pointers for traversing ivs->list. */ @@ -4607,8 +4520,7 @@ loop_bivs_init_find (loop) initial value from any initializing insns set up above. (This is done in two passes to avoid missing SETs in a PARALLEL.) */ static void -loop_bivs_check (loop) - struct loop *loop; +loop_bivs_check (struct loop *loop) { struct loop_ivs *ivs = LOOP_IVS (loop); /* Temporary list pointers for traversing ivs->list. */ @@ -4663,8 +4575,7 @@ loop_bivs_check (loop) /* Search the loop for general induction variables. */ static void -loop_givs_find (loop) - struct loop* loop; +loop_givs_find (struct loop* loop) { for_each_insn_in_loop (loop, check_insn_for_givs); } @@ -4675,8 +4586,7 @@ loop_givs_find (loop) can be calculated. */ static void -loop_givs_check (loop) - struct loop *loop; +loop_givs_check (struct loop *loop) { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *bl; @@ -4698,11 +4608,8 @@ loop_givs_check (loop) be. */ static int -loop_biv_eliminable_p (loop, bl, threshold, insn_count) - struct loop *loop; - struct iv_class *bl; - int threshold; - int insn_count; +loop_biv_eliminable_p (struct loop *loop, struct iv_class *bl, + int threshold, int insn_count) { /* For architectures with a decrement_and_branch_until_zero insn, don't do this if we put a REG_NONNEG note on the endtest for this @@ -4750,9 +4657,7 @@ loop_biv_eliminable_p (loop, bl, threshold, insn_count) /* Reduce each giv of BL that we have decided to reduce. */ static void -loop_givs_reduce (loop, bl) - struct loop *loop; - struct iv_class *bl; +loop_givs_reduce (struct loop *loop, struct iv_class *bl) { struct induction *v; @@ -4889,9 +4794,7 @@ loop_givs_reduce (loop, bl) eliminate a biv. */ static void -loop_givs_dead_check (loop, bl) - struct loop *loop ATTRIBUTE_UNUSED; - struct iv_class *bl; +loop_givs_dead_check (struct loop *loop ATTRIBUTE_UNUSED, struct iv_class *bl) { struct induction *v; @@ -4915,10 +4818,7 @@ loop_givs_dead_check (loop, bl) static void -loop_givs_rescan (loop, bl, reg_map) - struct loop *loop; - struct iv_class *bl; - rtx *reg_map; +loop_givs_rescan (struct loop *loop, struct iv_class *bl, rtx *reg_map) { struct induction *v; @@ -4994,13 +4894,13 @@ loop_givs_rescan (loop, bl, reg_map) gen_move_insn (v->dest_reg, v->new_reg)); - /* The original insn may have a REG_EQUAL note. This note is - now incorrect and may result in invalid substitutions later. - The original insn is dead, but may be part of a libcall - sequence, which doesn't seem worth the bother of handling. */ - note = find_reg_note (original_insn, REG_EQUAL, NULL_RTX); - if (note) - remove_note (original_insn, note); + /* The original insn may have a REG_EQUAL note. This note is + now incorrect and may result in invalid substitutions later. + The original insn is dead, but may be part of a libcall + sequence, which doesn't seem worth the bother of handling. */ + note = find_reg_note (original_insn, REG_EQUAL, NULL_RTX); + if (note) + remove_note (original_insn, note); } /* When a loop is reversed, givs which depend on the reversed @@ -5029,11 +4929,9 @@ loop_givs_rescan (loop, bl, reg_map) static int -loop_giv_reduce_benefit (loop, bl, v, test_reg) - struct loop *loop ATTRIBUTE_UNUSED; - struct iv_class *bl; - struct induction *v; - rtx test_reg; +loop_giv_reduce_benefit (struct loop *loop ATTRIBUTE_UNUSED, + struct iv_class *bl, struct induction *v, + rtx test_reg) { int add_cost; int benefit; @@ -5106,8 +5004,7 @@ loop_giv_reduce_benefit (loop, bl, v, test_reg) /* Free IV structures for LOOP. */ static void -loop_ivs_free (loop) - struct loop *loop; +loop_ivs_free (struct loop *loop) { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *iv = ivs->list; @@ -5147,9 +5044,7 @@ loop_ivs_free (loop) must check regnos to make sure they are in bounds. */ static void -strength_reduce (loop, flags) - struct loop *loop; - int flags; +strength_reduce (struct loop *loop, int flags) { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -5463,11 +5358,8 @@ strength_reduce (loop, flags) /*Record all basic induction variables calculated in the insn. */ static rtx -check_insn_for_bivs (loop, p, not_every_iteration, maybe_multiple) - struct loop *loop; - rtx p; - int not_every_iteration; - int maybe_multiple; +check_insn_for_bivs (struct loop *loop, rtx p, int not_every_iteration, + int maybe_multiple) { struct loop_ivs *ivs = LOOP_IVS (loop); rtx set; @@ -5511,11 +5403,8 @@ check_insn_for_bivs (loop, p, not_every_iteration, maybe_multiple) A register is a giv if: it is only set once, it is a function of a biv and a constant (or invariant), and it is not a biv. */ static rtx -check_insn_for_givs (loop, p, not_every_iteration, maybe_multiple) - struct loop *loop; - rtx p; - int not_every_iteration; - int maybe_multiple; +check_insn_for_givs (struct loop *loop, rtx p, int not_every_iteration, + int maybe_multiple) { struct loop_regs *regs = LOOP_REGS (loop); @@ -5600,11 +5489,7 @@ check_insn_for_givs (loop, p, not_every_iteration, maybe_multiple) INSN is the insn containing X. */ static int -valid_initial_value_p (x, insn, call_seen, loop_start) - rtx x; - rtx insn; - int call_seen; - rtx loop_start; +valid_initial_value_p (rtx x, rtx insn, int call_seen, rtx loop_start) { if (CONSTANT_P (x)) return 1; @@ -5637,11 +5522,8 @@ valid_initial_value_p (x, insn, call_seen, loop_start) more than once in each loop iteration. */ static void -find_mem_givs (loop, x, insn, not_every_iteration, maybe_multiple) - const struct loop *loop; - rtx x; - rtx insn; - int not_every_iteration, maybe_multiple; +find_mem_givs (const struct loop *loop, rtx x, rtx insn, + int not_every_iteration, int maybe_multiple) { int i, j; enum rtx_code code; @@ -5731,17 +5613,9 @@ find_mem_givs (loop, x, insn, not_every_iteration, maybe_multiple) executed exactly once per iteration. */ static void -record_biv (loop, v, insn, dest_reg, inc_val, mult_val, location, - not_every_iteration, maybe_multiple) - struct loop *loop; - struct induction *v; - rtx insn; - rtx dest_reg; - rtx inc_val; - rtx mult_val; - rtx *location; - int not_every_iteration; - int maybe_multiple; +record_biv (struct loop *loop, struct induction *v, rtx insn, rtx dest_reg, + rtx inc_val, rtx mult_val, rtx *location, + int not_every_iteration, int maybe_multiple) { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *bl; @@ -5832,18 +5706,10 @@ record_biv (loop, v, insn, dest_reg, inc_val, mult_val, location, LOCATION points to the place where this giv's value appears in INSN. */ static void -record_giv (loop, v, insn, src_reg, dest_reg, mult_val, add_val, ext_val, - benefit, type, not_every_iteration, maybe_multiple, location) - const struct loop *loop; - struct induction *v; - rtx insn; - rtx src_reg; - rtx dest_reg; - rtx mult_val, add_val, ext_val; - int benefit; - enum g_types type; - int not_every_iteration, maybe_multiple; - rtx *location; +record_giv (const struct loop *loop, struct induction *v, rtx insn, + rtx src_reg, rtx dest_reg, rtx mult_val, rtx add_val, + rtx ext_val, int benefit, enum g_types type, + int not_every_iteration, int maybe_multiple, rtx *location) { struct loop_ivs *ivs = LOOP_IVS (loop); struct induction *b; @@ -6046,9 +5912,7 @@ record_giv (loop, v, insn, src_reg, dest_reg, mult_val, add_val, ext_val, have been identified. */ static void -check_final_value (loop, v) - const struct loop *loop; - struct induction *v; +check_final_value (const struct loop *loop, struct induction *v) { rtx final_value = 0; @@ -6196,9 +6060,7 @@ check_final_value (loop, v) The cases we look at are when a label or an update to a biv is passed. */ static void -update_giv_derive (loop, p) - const struct loop *loop; - rtx p; +update_giv_derive (const struct loop *loop, rtx p) { struct loop_ivs *ivs = LOOP_IVS (loop); struct iv_class *bl; @@ -6329,15 +6191,9 @@ update_giv_derive (loop, p) If we cannot find a biv, we return 0. */ static int -basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) - const struct loop *loop; - rtx x; - enum machine_mode mode; - rtx dest_reg; - rtx p; - rtx *inc_val; - rtx *mult_val; - rtx **location; +basic_induction_var (const struct loop *loop, rtx x, enum machine_mode mode, + rtx dest_reg, rtx p, rtx *inc_val, rtx *mult_val, + rtx **location) { enum rtx_code code; rtx *argp, arg; @@ -6507,17 +6363,10 @@ basic_induction_var (loop, x, mode, dest_reg, p, inc_val, mult_val, location) such that the value of X is biv * mult + add; */ static int -general_induction_var (loop, x, src_reg, add_val, mult_val, ext_val, - is_addr, pbenefit, addr_mode) - const struct loop *loop; - rtx x; - rtx *src_reg; - rtx *add_val; - rtx *mult_val; - rtx *ext_val; - int is_addr; - int *pbenefit; - enum machine_mode addr_mode; +general_induction_var (const struct loop *loop, rtx x, rtx *src_reg, + rtx *add_val, rtx *mult_val, rtx *ext_val, + int is_addr, int *pbenefit, + enum machine_mode addr_mode) { struct loop_ivs *ivs = LOOP_IVS (loop); rtx orig_x = x; @@ -6616,15 +6465,11 @@ general_induction_var (loop, x, src_reg, add_val, mult_val, ext_val, *BENEFIT will be incremented by the benefit of any sub-giv encountered. */ -static rtx sge_plus PARAMS ((enum machine_mode, rtx, rtx)); -static rtx sge_plus_constant PARAMS ((rtx, rtx)); +static rtx sge_plus (enum machine_mode, rtx, rtx); +static rtx sge_plus_constant (rtx, rtx); static rtx -simplify_giv_expr (loop, x, ext_val, benefit) - const struct loop *loop; - rtx x; - rtx *ext_val; - int *benefit; +simplify_giv_expr (const struct loop *loop, rtx x, rtx *ext_val, int *benefit) { struct loop_ivs *ivs = LOOP_IVS (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -7049,8 +6894,7 @@ simplify_giv_expr (loop, x, ext_val, benefit) CONST_INT in the summation. It is only used by simplify_giv_expr. */ static rtx -sge_plus_constant (x, c) - rtx x, c; +sge_plus_constant (rtx x, rtx c) { if (GET_CODE (x) == CONST_INT) return GEN_INT (INTVAL (x) + INTVAL (c)); @@ -7075,9 +6919,7 @@ sge_plus_constant (x, c) } static rtx -sge_plus (mode, x, y) - enum machine_mode mode; - rtx x, y; +sge_plus (enum machine_mode mode, rtx x, rtx y) { while (GET_CODE (y) == PLUS) { @@ -7115,17 +6957,9 @@ sge_plus (mode, x, y) *MULT_VAL and *ADD_VAL. */ static int -consec_sets_giv (loop, first_benefit, p, src_reg, dest_reg, - add_val, mult_val, ext_val, last_consec_insn) - const struct loop *loop; - int first_benefit; - rtx p; - rtx src_reg; - rtx dest_reg; - rtx *add_val; - rtx *mult_val; - rtx *ext_val; - rtx *last_consec_insn; +consec_sets_giv (const struct loop *loop, int first_benefit, rtx p, + rtx src_reg, rtx dest_reg, rtx *add_val, rtx *mult_val, + rtx *ext_val, rtx *last_consec_insn) { struct loop_ivs *ivs = LOOP_IVS (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -7231,8 +7065,7 @@ consec_sets_giv (loop, first_benefit, p, src_reg, dest_reg, subtracting variables. */ static rtx -express_from_1 (a, b, mult) - rtx a, b, mult; +express_from_1 (rtx a, rtx b, rtx mult) { /* If MULT is zero, then A*MULT is zero, and our expression is B. */ @@ -7330,8 +7163,7 @@ express_from_1 (a, b, mult) } rtx -express_from (g1, g2) - struct induction *g1, *g2; +express_from (struct induction *g1, struct induction *g2) { rtx mult, add; @@ -7412,8 +7244,7 @@ express_from (g1, g2) used to represent G1. */ static rtx -combine_givs_p (g1, g2) - struct induction *g1, *g2; +combine_givs_p (struct induction *g1, struct induction *g2) { rtx comb, ret; @@ -7455,9 +7286,7 @@ combine_givs_p (g1, g2) make the giv illegal. */ static void -check_ext_dependent_givs (bl, loop_info) - struct iv_class *bl; - struct loop_info *loop_info; +check_ext_dependent_givs (struct iv_class *bl, struct loop_info *loop_info) { int ze_ok = 0, se_ok = 0, info_ok = 0; enum machine_mode biv_mode = GET_MODE (bl->biv->src_reg); @@ -7617,9 +7446,7 @@ check_ext_dependent_givs (bl, loop_info) /* Generate a version of VALUE in a mode appropriate for initializing V. */ rtx -extend_value_for_giv (v, value) - struct induction *v; - rtx value; +extend_value_for_giv (struct induction *v, rtx value) { rtx ext_dep = v->ext_dependent; @@ -7644,9 +7471,7 @@ struct combine_givs_stats }; static int -cmp_combine_givs_stats (xp, yp) - const void *xp; - const void *yp; +cmp_combine_givs_stats (const void *xp, const void *yp) { const struct combine_givs_stats * const x = (const struct combine_givs_stats *) xp; @@ -7666,9 +7491,7 @@ cmp_combine_givs_stats (xp, yp) giv. Also, update BENEFIT and related fields for cost/benefit analysis. */ static void -combine_givs (regs, bl) - struct loop_regs *regs; - struct iv_class *bl; +combine_givs (struct loop_regs *regs, struct iv_class *bl) { /* Additional benefit to add for being combined multiple times. */ const int extra_benefit = 3; @@ -7836,14 +7659,12 @@ restart: free (can_combine); } -/* Generate sequence for REG = B * M + A. */ +/* Generate sequence for REG = B * M + A. B is the initial value of + the basic induction variable, M a multiplicative constant, A an + additive constant and REG the destination register. */ static rtx -gen_add_mult (b, m, a, reg) - rtx b; /* initial value of basic induction variable */ - rtx m; /* multiplicative constant */ - rtx a; /* additive constant */ - rtx reg; /* destination register */ +gen_add_mult (rtx b, rtx m, rtx a, rtx reg) { rtx seq; rtx result; @@ -7863,9 +7684,7 @@ gen_add_mult (b, m, a, reg) /* Update registers created in insn sequence SEQ. */ static void -loop_regs_update (loop, seq) - const struct loop *loop ATTRIBUTE_UNUSED; - rtx seq; +loop_regs_update (const struct loop *loop ATTRIBUTE_UNUSED, rtx seq) { rtx insn; @@ -7893,17 +7712,14 @@ loop_regs_update (loop, seq) } -/* EMIT code before BEFORE_BB/BEFORE_INSN to set REG = B * M + A. */ +/* EMIT code before BEFORE_BB/BEFORE_INSN to set REG = B * M + A. B + is the initial value of the basic induction variable, M a + multiplicative constant, A an additive constant and REG the + destination register. */ void -loop_iv_add_mult_emit_before (loop, b, m, a, reg, before_bb, before_insn) - const struct loop *loop; - rtx b; /* initial value of basic induction variable */ - rtx m; /* multiplicative constant */ - rtx a; /* additive constant */ - rtx reg; /* destination register */ - basic_block before_bb; - rtx before_insn; +loop_iv_add_mult_emit_before (const struct loop *loop, rtx b, rtx m, rtx a, + rtx reg, basic_block before_bb, rtx before_insn) { rtx seq; @@ -7929,15 +7745,13 @@ loop_iv_add_mult_emit_before (loop, b, m, a, reg, before_bb, before_insn) } -/* Emit insns in loop pre-header to set REG = B * M + A. */ +/* Emit insns in loop pre-header to set REG = B * M + A. B is the + initial value of the basic induction variable, M a multiplicative + constant, A an additive constant and REG the destination + register. */ void -loop_iv_add_mult_sink (loop, b, m, a, reg) - const struct loop *loop; - rtx b; /* initial value of basic induction variable */ - rtx m; /* multiplicative constant */ - rtx a; /* additive constant */ - rtx reg; /* destination register */ +loop_iv_add_mult_sink (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg) { rtx seq; @@ -7958,15 +7772,12 @@ loop_iv_add_mult_sink (loop, b, m, a, reg) } -/* Emit insns after loop to set REG = B * M + A. */ +/* Emit insns after loop to set REG = B * M + A. B is the initial + value of the basic induction variable, M a multiplicative constant, + A an additive constant and REG the destination register. */ void -loop_iv_add_mult_hoist (loop, b, m, a, reg) - const struct loop *loop; - rtx b; /* initial value of basic induction variable */ - rtx m; /* multiplicative constant */ - rtx a; /* additive constant */ - rtx reg; /* destination register */ +loop_iv_add_mult_hoist (const struct loop *loop, rtx b, rtx m, rtx a, rtx reg) { rtx seq; @@ -7986,11 +7797,7 @@ loop_iv_add_mult_hoist (loop, b, m, a, reg) sequence. */ static int -iv_add_mult_cost (b, m, a, reg) - rtx b; /* initial value of basic induction variable */ - rtx m; /* multiplicative constant */ - rtx a; /* additive constant */ - rtx reg; /* destination register */ +iv_add_mult_cost (rtx b, rtx m, rtx a, rtx reg) { int cost = 0; rtx last, result; @@ -8020,9 +7827,7 @@ iv_add_mult_cost (b, m, a, reg) ??? thing, generate wasted RTL just to see if something is possible. */ static int -product_cheap_p (a, b) - rtx a; - rtx b; +product_cheap_p (rtx a, rtx b) { rtx tmp; int win, n_insns; @@ -8098,9 +7903,7 @@ product_cheap_p (a, b) final_[bg]iv_value. */ static int -check_dbra_loop (loop, insn_count) - struct loop *loop; - int insn_count; +check_dbra_loop (struct loop *loop, int insn_count) { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -8695,11 +8498,8 @@ check_dbra_loop (loop, insn_count) start of the loop. */ static int -maybe_eliminate_biv (loop, bl, eliminate_p, threshold, insn_count) - const struct loop *loop; - struct iv_class *bl; - int eliminate_p; - int threshold, insn_count; +maybe_eliminate_biv (const struct loop *loop, struct iv_class *bl, + int eliminate_p, int threshold, int insn_count) { struct loop_ivs *ivs = LOOP_IVS (loop); rtx reg = bl->biv->dest_reg; @@ -8772,8 +8572,7 @@ maybe_eliminate_biv (loop, bl, eliminate_p, threshold, insn_count) Return nonzero if INSN is first. */ int -loop_insn_first_p (insn, reference) - rtx insn, reference; +loop_insn_first_p (rtx insn, rtx reference) { rtx p, q; @@ -8806,9 +8605,8 @@ loop_insn_first_p (insn, reference) the offset that we have to take into account due to auto-increment / div derivation is zero. */ static int -biv_elimination_giv_has_0_offset (biv, giv, insn) - struct induction *biv, *giv; - rtx insn; +biv_elimination_giv_has_0_offset (struct induction *biv, + struct induction *giv, rtx insn) { /* If the giv V had the auto-inc address optimization applied to it, and INSN occurs between the giv insn and the biv @@ -8836,13 +8634,9 @@ biv_elimination_giv_has_0_offset (biv, giv, insn) start of the loop (when WHERE_INSN is zero). */ static int -maybe_eliminate_biv_1 (loop, x, insn, bl, eliminate_p, where_bb, where_insn) - const struct loop *loop; - rtx x, insn; - struct iv_class *bl; - int eliminate_p; - basic_block where_bb; - rtx where_insn; +maybe_eliminate_biv_1 (const struct loop *loop, rtx x, rtx insn, + struct iv_class *bl, int eliminate_p, + basic_block where_bb, rtx where_insn) { enum rtx_code code = GET_CODE (x); rtx reg = bl->biv->dest_reg; @@ -9211,9 +9005,7 @@ maybe_eliminate_biv_1 (loop, x, insn, bl, eliminate_p, where_bb, where_insn) is in an insn following INSN in the same basic block. */ static int -last_use_this_basic_block (reg, insn) - rtx reg; - rtx insn; +last_use_this_basic_block (rtx reg, rtx insn) { rtx n; for (n = insn; @@ -9230,10 +9022,7 @@ last_use_this_basic_block (reg, insn) just record the location of the set and process it later. */ static void -record_initial (dest, set, data) - rtx dest; - rtx set; - void *data ATTRIBUTE_UNUSED; +record_initial (rtx dest, rtx set, void *data ATTRIBUTE_UNUSED) { struct loop_ivs *ivs = (struct loop_ivs *) data; struct iv_class *bl; @@ -9259,9 +9048,7 @@ record_initial (dest, set, data) use it. X must be a source expression only. */ static void -update_reg_last_use (x, insn) - rtx x; - rtx insn; +update_reg_last_use (rtx x, rtx insn) { /* Check for the case where INSN does not have a valid luid. In this case, there is no need to modify the regno_last_uid, as this can only happen @@ -9314,12 +9101,8 @@ update_reg_last_use (x, insn) further. */ rtx -canonicalize_condition (insn, cond, reverse, earliest, want_reg) - rtx insn; - rtx cond; - int reverse; - rtx *earliest; - rtx want_reg; +canonicalize_condition (rtx insn, rtx cond, int reverse, rtx *earliest, + rtx want_reg) { enum rtx_code code; rtx prev = insn; @@ -9563,9 +9346,7 @@ canonicalize_condition (insn, cond, reverse, earliest, want_reg) insn and we will be sure that the inputs are still valid. */ rtx -get_condition (jump, earliest) - rtx jump; - rtx *earliest; +get_condition (rtx jump, rtx *earliest) { rtx cond; int reverse; @@ -9592,9 +9373,7 @@ get_condition (jump, earliest) unless both operands are invariants. */ rtx -get_condition_for_loop (loop, x) - const struct loop *loop; - rtx x; +get_condition_for_loop (const struct loop *loop, rtx x) { rtx comparison = get_condition (x, (rtx*) 0); @@ -9612,8 +9391,7 @@ get_condition_for_loop (loop, x) This is taken mostly from flow.c; similar code exists elsewhere in the compiler. It may be useful to put this into rtlanal.c. */ static int -indirect_jump_in_function_p (start) - rtx start; +indirect_jump_in_function_p (rtx start) { rtx insn; @@ -9629,9 +9407,7 @@ indirect_jump_in_function_p (start) This function is called from prescan_loop via for_each_rtx. */ static int -insert_loop_mem (mem, data) - rtx *mem; - void *data ATTRIBUTE_UNUSED; +insert_loop_mem (rtx *mem, void *data ATTRIBUTE_UNUSED) { struct loop_info *loop_info = data; int i; @@ -9719,9 +9495,7 @@ insert_loop_mem (mem, data) optimize register I. */ static void -loop_regs_scan (loop, extra_size) - const struct loop *loop; - int extra_size; +loop_regs_scan (const struct loop *loop, int extra_size) { struct loop_regs *regs = LOOP_REGS (loop); int old_nregs; @@ -9791,8 +9565,8 @@ loop_regs_scan (loop, extra_size) if (GET_CODE (insn) == CALL_INSN) { rtx link; - for (link = CALL_INSN_FUNCTION_USAGE (insn); - link; + for (link = CALL_INSN_FUNCTION_USAGE (insn); + link; link = XEXP (link, 1)) { rtx op, reg; @@ -9836,8 +9610,7 @@ loop_regs_scan (loop, extra_size) /* Returns the number of real INSNs in the LOOP. */ static int -count_insns_in_loop (loop) - const struct loop *loop; +count_insns_in_loop (const struct loop *loop) { int count = 0; rtx insn; @@ -9853,8 +9626,7 @@ count_insns_in_loop (loop) /* Move MEMs into registers for the duration of the loop. */ static void -load_mems (loop) - const struct loop *loop; +load_mems (const struct loop *loop) { struct loop_info *loop_info = LOOP_INFO (loop); struct loop_regs *regs = LOOP_REGS (loop); @@ -10211,9 +9983,7 @@ struct note_reg_stored_arg /* Called via note_stores, record in SET_SEEN whether X, which is written, is equal to ARG. */ static void -note_reg_stored (x, setter, arg) - rtx x, setter ATTRIBUTE_UNUSED; - void *arg; +note_reg_stored (rtx x, rtx setter ATTRIBUTE_UNUSED, void *arg) { struct note_reg_stored_arg *t = (struct note_reg_stored_arg *) arg; if (t->reg == x) @@ -10226,10 +9996,7 @@ note_reg_stored (x, setter, arg) is not used after the loop. */ static void -try_copy_prop (loop, replacement, regno) - const struct loop *loop; - rtx replacement; - unsigned int regno; +try_copy_prop (const struct loop *loop, rtx replacement, unsigned int regno) { /* This is the reg that we are copying from. */ rtx reg_rtx = regno_reg_rtx[regno]; @@ -10326,9 +10093,7 @@ try_copy_prop (loop, replacement, regno) with NOTE_INSN_DELETED notes. */ static void -loop_delete_insns (first, last) - rtx first; - rtx last; +loop_delete_insns (rtx first, rtx last) { while (1) { @@ -10352,10 +10117,8 @@ loop_delete_insns (first, last) this pseudo followed immediately by a move insn that sets REPLACEMENT with REGNO. */ static void -try_swap_copy_prop (loop, replacement, regno) - const struct loop *loop; - rtx replacement; - unsigned int regno; +try_swap_copy_prop (const struct loop *loop, rtx replacement, + unsigned int regno) { rtx insn; rtx set = NULL_RTX; @@ -10436,9 +10199,7 @@ try_swap_copy_prop (loop, replacement, regno) /* Worker function for find_mem_in_note, called via for_each_rtx. */ static int -find_mem_in_note_1 (x, data) - rtx *x; - void *data; +find_mem_in_note_1 (rtx *x, void *data) { if (*x != NULL_RTX && GET_CODE (*x) == MEM) { @@ -10452,23 +10213,20 @@ find_mem_in_note_1 (x, data) /* Returns the first MEM found in NOTE by depth-first search. */ static rtx -find_mem_in_note (note) - rtx note; +find_mem_in_note (rtx note) { if (note && for_each_rtx (¬e, find_mem_in_note_1, ¬e)) return note; return NULL_RTX; } - + /* Replace MEM with its associated pseudo register. This function is called from load_mems via for_each_rtx. DATA is actually a pointer to a structure describing the instruction currently being scanned and the MEM we are currently replacing. */ static int -replace_loop_mem (mem, data) - rtx *mem; - void *data; +replace_loop_mem (rtx *mem, void *data) { loop_replace_args *args = (loop_replace_args *) data; rtx m = *mem; @@ -10502,11 +10260,7 @@ replace_loop_mem (mem, data) } static void -replace_loop_mems (insn, mem, reg, written) - rtx insn; - rtx mem; - rtx reg; - int written; +replace_loop_mems (rtx insn, rtx mem, rtx reg, int written) { loop_replace_args args; @@ -10542,9 +10296,7 @@ replace_loop_mems (insn, mem, reg, written) a structure of arguments. */ static int -replace_loop_reg (px, data) - rtx *px; - void *data; +replace_loop_reg (rtx *px, void *data) { rtx x = *px; loop_replace_args *args = (loop_replace_args *) data; @@ -10559,10 +10311,7 @@ replace_loop_reg (px, data) } static void -replace_loop_regs (insn, reg, replacement) - rtx insn; - rtx reg; - rtx replacement; +replace_loop_regs (rtx insn, rtx reg, rtx replacement) { loop_replace_args args; @@ -10577,11 +10326,9 @@ replace_loop_regs (insn, reg, replacement) (ignored in the interim). */ static rtx -loop_insn_emit_after (loop, where_bb, where_insn, pattern) - const struct loop *loop ATTRIBUTE_UNUSED; - basic_block where_bb ATTRIBUTE_UNUSED; - rtx where_insn; - rtx pattern; +loop_insn_emit_after (const struct loop *loop ATTRIBUTE_UNUSED, + basic_block where_bb ATTRIBUTE_UNUSED, rtx where_insn, + rtx pattern) { return emit_insn_after (pattern, where_insn); } @@ -10592,11 +10339,9 @@ loop_insn_emit_after (loop, where_bb, where_insn, pattern) otherwise hoist PATTERN into the loop pre-header. */ rtx -loop_insn_emit_before (loop, where_bb, where_insn, pattern) - const struct loop *loop; - basic_block where_bb ATTRIBUTE_UNUSED; - rtx where_insn; - rtx pattern; +loop_insn_emit_before (const struct loop *loop, + basic_block where_bb ATTRIBUTE_UNUSED, + rtx where_insn, rtx pattern) { if (! where_insn) return loop_insn_hoist (loop, pattern); @@ -10608,11 +10353,9 @@ loop_insn_emit_before (loop, where_bb, where_insn, pattern) WHERE_BB (ignored in the interim) within the loop. */ static rtx -loop_call_insn_emit_before (loop, where_bb, where_insn, pattern) - const struct loop *loop ATTRIBUTE_UNUSED; - basic_block where_bb ATTRIBUTE_UNUSED; - rtx where_insn; - rtx pattern; +loop_call_insn_emit_before (const struct loop *loop ATTRIBUTE_UNUSED, + basic_block where_bb ATTRIBUTE_UNUSED, + rtx where_insn, rtx pattern) { return emit_call_insn_before (pattern, where_insn); } @@ -10621,9 +10364,7 @@ loop_call_insn_emit_before (loop, where_bb, where_insn, pattern) /* Hoist insn for PATTERN into the loop pre-header. */ rtx -loop_insn_hoist (loop, pattern) - const struct loop *loop; - rtx pattern; +loop_insn_hoist (const struct loop *loop, rtx pattern) { return loop_insn_emit_before (loop, 0, loop->start, pattern); } @@ -10632,9 +10373,7 @@ loop_insn_hoist (loop, pattern) /* Hoist call insn for PATTERN into the loop pre-header. */ static rtx -loop_call_insn_hoist (loop, pattern) - const struct loop *loop; - rtx pattern; +loop_call_insn_hoist (const struct loop *loop, rtx pattern) { return loop_call_insn_emit_before (loop, 0, loop->start, pattern); } @@ -10643,9 +10382,7 @@ loop_call_insn_hoist (loop, pattern) /* Sink insn for PATTERN after the loop end. */ rtx -loop_insn_sink (loop, pattern) - const struct loop *loop; - rtx pattern; +loop_insn_sink (const struct loop *loop, rtx pattern) { return loop_insn_emit_before (loop, 0, loop->sink, pattern); } @@ -10653,8 +10390,7 @@ loop_insn_sink (loop, pattern) /* bl->final_value can be either general_operand or PLUS of general_operand and constant. Emit sequence of instructions to load it into REG. */ static rtx -gen_load_of_final_value (reg, final_value) - rtx reg, final_value; +gen_load_of_final_value (rtx reg, rtx final_value) { rtx seq; start_sequence (); @@ -10672,9 +10408,7 @@ gen_load_of_final_value (reg, final_value) since this is slightly more efficient. */ static rtx -loop_insn_sink_or_swim (loop, pattern) - const struct loop *loop; - rtx pattern; +loop_insn_sink_or_swim (const struct loop *loop, rtx pattern) { if (loop->exit_count) return loop_insn_hoist (loop, pattern); @@ -10683,10 +10417,7 @@ loop_insn_sink_or_swim (loop, pattern) } static void -loop_ivs_dump (loop, file, verbose) - const struct loop *loop; - FILE *file; - int verbose; +loop_ivs_dump (const struct loop *loop, FILE *file, int verbose) { struct iv_class *bl; int iv_num = 0; @@ -10708,10 +10439,8 @@ loop_ivs_dump (loop, file, verbose) static void -loop_iv_class_dump (bl, file, verbose) - const struct iv_class *bl; - FILE *file; - int verbose ATTRIBUTE_UNUSED; +loop_iv_class_dump (const struct iv_class *bl, FILE *file, + int verbose ATTRIBUTE_UNUSED) { struct induction *v; rtx incr; @@ -10773,10 +10502,7 @@ loop_iv_class_dump (bl, file, verbose) static void -loop_biv_dump (v, file, verbose) - const struct induction *v; - FILE *file; - int verbose; +loop_biv_dump (const struct induction *v, FILE *file, int verbose) { if (! v || ! file) return; @@ -10799,10 +10525,7 @@ loop_biv_dump (v, file, verbose) static void -loop_giv_dump (v, file, verbose) - const struct induction *v; - FILE *file; - int verbose; +loop_giv_dump (const struct induction *v, FILE *file, int verbose) { if (! v || ! file) return; @@ -10863,32 +10586,28 @@ loop_giv_dump (v, file, verbose) void -debug_ivs (loop) - const struct loop *loop; +debug_ivs (const struct loop *loop) { loop_ivs_dump (loop, stderr, 1); } void -debug_iv_class (bl) - const struct iv_class *bl; +debug_iv_class (const struct iv_class *bl) { loop_iv_class_dump (bl, stderr, 1); } void -debug_biv (v) - const struct induction *v; +debug_biv (const struct induction *v) { loop_biv_dump (v, stderr, 1); } void -debug_giv (v) - const struct induction *v; +debug_giv (const struct induction *v) { loop_giv_dump (v, stderr, 1); } @@ -10907,10 +10626,8 @@ debug_giv (v) #define LOOP_INSN_UID(INSN) ((INSN) ? INSN_UID (INSN) : -1) static void -loop_dump_aux (loop, file, verbose) - const struct loop *loop; - FILE *file; - int verbose ATTRIBUTE_UNUSED; +loop_dump_aux (const struct loop *loop, FILE *file, + int verbose ATTRIBUTE_UNUSED) { rtx label; @@ -10974,8 +10691,7 @@ loop_dump_aux (loop, file, verbose) /* Call this function from the debugger to dump LOOP. */ void -debug_loop (loop) - const struct loop *loop; +debug_loop (const struct loop *loop) { flow_loop_dump (loop, stderr, loop_dump_aux, 1); } @@ -10983,8 +10699,7 @@ debug_loop (loop) /* Call this function from the debugger to dump LOOPS. */ void -debug_loops (loops) - const struct loops *loops; +debug_loops (const struct loops *loops) { flow_loops_dump (loops, stderr, loop_dump_aux, 1); } |