diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-29 10:09:29 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-29 10:09:29 +0000 |
commit | 1f8922d42c4fd9e1f09dbfe74614788f85d1e4c5 (patch) | |
tree | 081581dadb1ace2082aa33467e7eb70198b0dc67 /gcc/loop.h | |
parent | 880d0dfecb1f913ba10879bd9a3a04558c512887 (diff) | |
download | gcc-1f8922d42c4fd9e1f09dbfe74614788f85d1e4c5.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28961 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/loop.h')
-rw-r--r-- | gcc/loop.h | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/gcc/loop.h b/gcc/loop.h index e164428d861..2578956bd95 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)); + |