GIMPLE sequences#

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.