GCC Middle and Back End API Reference
|
#include <hw-doloop.h>
Data Fields | |
int | loop_no |
hwloop_info | next |
vec< basic_block > | blocks |
bitmap | block_bitmap |
vec< hwloop_info > | loops |
vec< edge, va_gc > * | incoming |
basic_block | incoming_src |
basic_block | incoming_dest |
basic_block | head |
basic_block | tail |
basic_block | successor |
rtx | last_insn |
rtx | loop_end |
rtx | iter_reg |
rtx | start_label |
rtx | end_label |
int | length |
int | depth |
bool | bad |
bool | visited |
bool | has_call |
bool | has_asm |
bool | jumps_within |
bool | jumps_outof |
bool | iter_reg_used |
bool | iter_reg_used_outside |
HARD_REG_SET | regs_set_in_loop |
Information about a loop we have found (or are in the process of finding).
bool hwloop_info_d::bad |
True if we can't optimize this loop.
Referenced by dump_hwloops(), optimize_loop(), scan_loop(), and set_bb_indices().
bitmap hwloop_info_d::block_bitmap |
Same information in a bitmap.
Referenced by add_forwarder_blocks(), discover_loops(), and reorder_loops().
vec<basic_block> hwloop_info_d::blocks |
Vector of blocks only within the loop, including those within inner loops.
Referenced by add_forwarder_blocks(), discover_loops(), and dump_hwloops().
int hwloop_info_d::depth |
The nesting depth of the loop. Innermost loops are given a depth of 1. Only successfully optimized doloops are counted; if an inner loop was marked as bad, it does not increase the depth of its parent loop. This value is valid when the target's optimize function is called.
Referenced by dump_hwloops(), and optimize_loop().
rtx hwloop_info_d::end_label |
The new label placed at the end of the loop.
bool hwloop_info_d::has_asm |
Referenced by scan_loop().
bool hwloop_info_d::has_call |
The following values are collected before calling the target's optimize function and are not valid earlier.
Record information about control flow: whether the loop has calls or asm statements, whether it has edges that jump out of the loop, or edges that jump within the loop.
basic_block hwloop_info_d::head |
First block in the loop. This is the one branched to by the loop_end insn.
Referenced by dump_hwloops(), reorder_loops(), and set_bb_indices().
All edges that jump into the loop.
Referenced by add_forwarder_blocks().
basic_block hwloop_info_d::incoming_dest |
Referenced by process_incoming_edges().
basic_block hwloop_info_d::incoming_src |
The ports currently using this infrastructure can typically handle two cases: all incoming edges have the same destination block, or all incoming edges have the same source block. These two members are set to the common source or destination we found, or NULL if different blocks were found. If both are NULL the loop can't be optimized.
Referenced by process_incoming_edges().
rtx hwloop_info_d::iter_reg |
The iteration register.
Referenced by dump_hwloops(), and scan_loop().
bool hwloop_info_d::iter_reg_used |
True if there is an instruction other than the doloop_end which uses the iteration register.
Referenced by scan_loop().
bool hwloop_info_d::iter_reg_used_outside |
True if the iteration register lives past the doloop instruction.
bool hwloop_info_d::jumps_outof |
Referenced by scan_loop().
bool hwloop_info_d::jumps_within |
Referenced by scan_loop().
rtx hwloop_info_d::last_insn |
The last instruction in the tail.
int hwloop_info_d::length |
The length of the loop.
rtx hwloop_info_d::loop_end |
The loop_end insn.
Referenced by scan_loop().
int hwloop_info_d::loop_no |
loop number, for dumps
Referenced by add_forwarder_blocks(), discover_loops(), and dump_hwloops().
vec<hwloop_info> hwloop_info_d::loops |
Vector of inner loops within this loop. Includes loops of every nesting level.
Referenced by dump_hwloops().
hwloop_info hwloop_info_d::next |
Next loop in the graph.
Referenced by discover_loops(), and set_bb_indices().
HARD_REG_SET hwloop_info_d::regs_set_in_loop |
Hard registers set at any point in the loop, except for the loop counter register's set in the doloop_end instruction.
Referenced by optimize_loop(), and scan_loop().
rtx hwloop_info_d::start_label |
The new label placed at the beginning of the loop.
basic_block hwloop_info_d::successor |
The successor block of the loop. This is the one the loop_end insn falls into.
basic_block hwloop_info_d::tail |
Last block in the loop (the one with the loop_end insn).
Referenced by reorder_loops(), scan_loop(), and set_bb_indices().
bool hwloop_info_d::visited |
True if we have visited this loop during the optimization phase.