aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop.h
diff options
context:
space:
mode:
authorMichael Hayes <m.hayes@elec.canterbury.ac.nz>1999-08-29 10:09:29 +0000
committerJeff Law <law@gcc.gnu.org>1999-08-29 04:09:29 -0600
commit3c748bb6de9b66e09e269e20c07107a3f120b4e4 (patch)
tree081581dadb1ace2082aa33467e7eb70198b0dc67 /gcc/loop.h
parentceb45eb8971b1325c407e74d0aa914c916a822c5 (diff)
downloadgcc-3c748bb6de9b66e09e269e20c07107a3f120b4e4.zip
gcc-3c748bb6de9b66e09e269e20c07107a3f120b4e4.tar.gz
gcc-3c748bb6de9b66e09e269e20c07107a3f120b4e4.tar.bz2
loop.c (this_loop_info): New variable.
* loop.c (this_loop_info): New variable. (loop_has_call, loop_has_volatile, loop_has_tablejump, loop_continue, loops_enclosed): Replace with fields in this_loop_info. All uses updated. (prescan_loop, strength_reduce): New argument loop_info. All callers updated. (scan_loop): New variable loop_info, initialise to address of this_loop_info. (prescan_loop): Set loop_info->vtop if find NOTE_INSN_LOOP_VTOP. Delete variable loop_has_multiple_exit targets and replace with field in this_loop_info. (find_and_verify_loops): Rename this_loop to this_loop_num. (strength_reduce): Delete loop_iteration_info. Replace variable loop_info with function argument of same name. (insert_bct): Rework test for loop being completely unrolled. * loop.h (struct loop_info): New fields num, loops_enclosed, has_call, has_volatile, has_tablejump, has_multiple_exit_targets, has_indirect_jump, and cont. Redefine use of unroll_number. (loop_unroll_number): Delete. * unroll.c (unroll_loop): Store loop unroll count in unroll_number field of loop_info. (loop_iterations): Delete variable vtop and instead use loop_info->vtop computed in prescan_loop. From-SVN: r28961
Diffstat (limited to 'gcc/loop.h')
-rw-r--r--gcc/loop.h30
1 files changed, 22 insertions, 8 deletions
diff --git a/gcc/loop.h b/gcc/loop.h
index e164428..2578956 100644
--- a/gcc/loop.h
+++ b/gcc/loop.h
@@ -158,6 +158,22 @@ struct iv_class {
struct loop_info
{
+ /* Loop number. */
+ int num;
+ /* Loops enclosed by this loop including itself. */
+ int loops_enclosed;
+ /* Nonzero if there is a subroutine call in the current loop. */
+ int has_call;
+ /* Nonzero if there is a volatile memory reference in the current
+ loop. */
+ int has_volatile;
+ /* Nonzero if there is a tablejump in the current loop. */
+ int has_tablejump;
+ /* Nonzero if there are ways to leave the loop other than falling
+ off the end. */
+ int has_multiple_exit_targets;
+ /* Nonzero if there is an indirect jump in the current function. */
+ int has_indirect_jump;
/* Register or constant initial loop value. */
rtx initial_value;
/* Register or constant value used for comparison test. */
@@ -181,15 +197,13 @@ struct loop_info
wider iterator, this number will be zero if the number of loop
iterations is too large for an unsigned integer to hold. */
unsigned HOST_WIDE_INT n_iterations;
- /* The loop unrolling factor.
- Potential values:
- 0: unrolled
- 1: not unrolled.
- -1: completely unrolled
- >0: holds the unroll exact factor. */
+ /* The number of times the loop body was unrolled. */
unsigned int unroll_number;
/* Non-zero if the loop has a NOTE_INSN_LOOP_VTOP. */
rtx vtop;
+ /* Non-zero if the loop has a NOTE_INSN_LOOP_CONT.
+ A continue statement will generate a branch to NEXT_INSN (cont). */
+ rtx cont;
};
/* Definitions used by the basic induction variable discovery code. */
@@ -240,10 +254,10 @@ rtx final_giv_value PROTO((struct induction *, rtx, rtx,
unsigned HOST_WIDE_INT));
void emit_unrolled_add PROTO((rtx, rtx, rtx));
int back_branch_in_range_p PROTO((rtx, rtx, rtx));
-int loop_insn_first_p PROTO((rtx, rtx));
-extern int *loop_unroll_number;
+int loop_insn_first_p PROTO((rtx, rtx));
/* Forward declarations for non-static functions declared in stmt.c. */
void find_loop_tree_blocks PROTO((void));
void unroll_block_trees PROTO((void));
+