GCC Middle and Back End API Reference
hwloop_info_d Struct Reference

#include <hw-doloop.h>

Collaboration diagram for hwloop_info_d:

Data Fields

int loop_no
hwloop_info next
vec< basic_blockblocks
bitmap block_bitmap
vec< hwloop_infoloops
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

Detailed Description

Information about a loop we have found (or are in the process of finding).


Field Documentation

bool hwloop_info_d::bad

True if we can't optimize this loop.

bitmap hwloop_info_d::block_bitmap

Same information in a bitmap.

vec<basic_block> hwloop_info_d::blocks

Vector of blocks only within the loop, including those within inner loops.

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.

rtx hwloop_info_d::end_label

The new label placed at the end of the loop.

bool hwloop_info_d::has_asm
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.

vec<edge, va_gc>* hwloop_info_d::incoming

All edges that jump into the loop.

basic_block hwloop_info_d::incoming_dest
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.

rtx hwloop_info_d::iter_reg

The iteration register.

bool hwloop_info_d::iter_reg_used

True if there is an instruction other than the doloop_end which uses the iteration register.

bool hwloop_info_d::iter_reg_used_outside

True if the iteration register lives past the doloop instruction.

bool hwloop_info_d::jumps_outof
bool hwloop_info_d::jumps_within
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.

int hwloop_info_d::loop_no

loop number, for dumps

vec<hwloop_info> hwloop_info_d::loops

Vector of inner loops within this loop. Includes loops of every nesting level.

hwloop_info hwloop_info_d::next

Next loop in the graph.

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.

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).

bool hwloop_info_d::visited

True if we have visited this loop during the optimization phase.


The documentation for this struct was generated from the following file: