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

— GIMPLE function: 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.

— GIMPLE function: 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 function: gimple_seq gimple_seq_deep_copy (gimple_seq src)

Perform a deep copy of sequence SRC and return the result.

— GIMPLE function: gimple_seq gimple_seq_reverse (gimple_seq seq)

Reverse the order of the statements in the sequence SEQ. Return SEQ.

— GIMPLE function: gimple gimple_seq_first (gimple_seq s)

Return the first statement in sequence S.

— GIMPLE function: gimple gimple_seq_last (gimple_seq s)

Return the last statement in sequence S.

— GIMPLE function: void gimple_seq_set_last (gimple_seq s, gimple last)

Set the last statement in sequence S to the statement in LAST.

— GIMPLE function: void gimple_seq_set_first (gimple_seq s, gimple first)

Set the first statement in sequence S to the statement in FIRST.

— GIMPLE function: void gimple_seq_init (gimple_seq s)

Initialize sequence S to an empty sequence.

— GIMPLE function: gimple_seq gimple_seq_alloc (void)

Allocate a new sequence in the garbage collected store and return it.

— GIMPLE function: void gimple_seq_copy (gimple_seq dest, gimple_seq src)

Copy the sequence SRC into the sequence DEST.

— GIMPLE function: bool gimple_seq_empty_p (gimple_seq s)

Return true if the sequence S is empty.

— GIMPLE function: gimple_seq bb_seq (basic_block bb)

Returns the sequence of statements in BB.

— GIMPLE function: void set_bb_seq (basic_block bb, gimple_seq seq)

Sets the sequence of statements in BB to SEQ.

— GIMPLE function: bool gimple_seq_singleton_p (gimple_seq seq)

Determine whether SEQ contains exactly one statement.