GIMPLE sequences are the tuple equivalent of STATEMENT_LIST
’s
used in GENERIC
. They are used to chain statements together, and
when used in conjunction with sequence iterators, provide a
framework for iterating through statements.
GIMPLE sequences are of type struct gimple_sequence
, but are more
commonly passed by reference to functions dealing with sequences.
The type for a sequence pointer is gimple_seq
which is the same
as struct gimple_sequence
*. When declaring a local sequence,
you can define a local variable of type struct gimple_sequence
.
When declaring a sequence allocated on the garbage collected
heap, use the function gimple_seq_alloc
documented below.
There are convenience functions for iterating through sequences in the section entitled Sequence Iterators.
Below is a list of functions to manipulate and query sequences.
void
gimple_seq_add_stmt (gimple_seq *seq, gimple g)
¶Link a gimple statement to the end of the sequence *SEQ
if G
is
not NULL
. If *SEQ
is NULL
, allocate a sequence before linking.
void
gimple_seq_add_seq (gimple_seq *dest, gimple_seq src)
¶Append sequence SRC
to the end of sequence *DEST
if SRC
is not
NULL
. If *DEST
is NULL
, allocate a new sequence before
appending.
gimple_seq
gimple_seq_deep_copy (gimple_seq src)
¶Perform a deep copy of sequence SRC
and return the result.
gimple_seq
gimple_seq_reverse (gimple_seq seq)
¶Reverse the order of the statements in the sequence SEQ
. Return
SEQ
.
gimple
gimple_seq_first (gimple_seq s)
¶Return the first statement in sequence S
.
gimple
gimple_seq_last (gimple_seq s)
¶Return the last statement in sequence S
.
void
gimple_seq_set_last (gimple_seq s, gimple last)
¶Set the last statement in sequence S
to the statement in LAST
.
void
gimple_seq_set_first (gimple_seq s, gimple first)
¶Set the first statement in sequence S
to the statement in FIRST
.
void
gimple_seq_init (gimple_seq s)
¶Initialize sequence S
to an empty sequence.
gimple_seq
gimple_seq_alloc (void)
¶Allocate a new sequence in the garbage collected store and return it.
void
gimple_seq_copy (gimple_seq dest, gimple_seq src)
¶Copy the sequence SRC
into the sequence DEST
.
bool
gimple_seq_empty_p (gimple_seq s)
¶Return true if the sequence S
is empty.
gimple_seq
bb_seq (basic_block bb)
¶Returns the sequence of statements in BB
.
void
set_bb_seq (basic_block bb, gimple_seq seq)
¶Sets the sequence of statements in BB
to SEQ
.
bool
gimple_seq_singleton_p (gimple_seq seq)
¶Determine whether SEQ
contains exactly one statement.