PIPS
control.c File Reference
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "linear.h"
#include "genC.h"
#include "ri.h"
#include "ri-util.h"
#include "misc.h"
+ Include dependency graph for control.c:

Go to the source code of this file.

Functions

void control_map_get_blocs (control c, list *l)
 Build recursively the list of all controls reachable from a control of an unstructured. More...
 
void find_a_control_path (control b, control e, list *pp, list *vp, int dir)
 Build recursively a control path from b to e. More...
 
void backward_control_map_get_blocs (c, l)
 Build recursively the list of all controls backward-reachable from a control of an unstructured. More...
 
void backward_control_map_get_blocs_but (control c, control f, list *l)
 Transitive closure of c's predecessors, but for control f. More...
 
void forward_control_map_get_blocs (c, l)
 Build recursively the list of all controls forward-reachable from a control of an unstructured. More...
 
void forward_control_map_get_blocs_but (control c, control f, list *l)
 Transitive closure of c's successors, but for control f. More...
 
void wide_forward_control_map_get_blocs (c, l)
 Same as above, but follows successors by minimal path lengths. More...
 
bool is_control_in_list_p (control c, list cs)
 Test if a control node is in a list of control nodes. More...
 
int occurences_in_control_list (control c, list cs)
 Count the number of occurences of a control node in a list of control nodes. More...
 
void control_list_patch (list l, control c_old, control c_new)
 Replace in a list of control nodes all the instance of a control node by another one. More...
 
void transfer_control_predecessor (control old_node, control new_node, control c)
 Transfer a control node as a predecessor from one node to another one. More...
 
void transfer_control_successor (control old_node, control new_node, control c)
 Transfer a control node as a successor of one node to another one. More...
 
void replace_control_related_to_a_list (control old_node, control new_node, list controls)
 Replace all the references to a control node by a new one in the successors & predecessors of a list of controls. More...
 
void check_control_coherency (control c)
 Test the coherency of a control node network from a control node. More...
 
void print_control_node (control c)
 
void print_control_nodes (list l)
 Display identification of a list of control nodes. More...
 
void display_address_of_control_nodes (list cs)
 Display the adresses a list of control nodes. More...
 
void display_linked_control_nodes (control c)
 Display all the control nodes reached or reachable from c for debugging purpose. More...
 
void remove_unreachable_following_control (control c, control do_not_delete_node, control do_not_delete_node_either)
 Remove all the control nodes (with their statements) from c in the successor tree of c up to the nodes with more than 1 predecessor, that is when it reach another flow. More...
 
void remove_some_unreachable_controls_of_an_unstructured (unstructured u)
 Remove all the control sequences that are unreachable and that begin with a node without any predecessor. More...
 
void remove_all_unreachable_controls_of_an_unstructured (unstructured u)
 Remove all control nodes that are not forward reachable from the entry node. More...
 
void remove_a_control_from_a_list_and_relink (control c, list a_source_control_list_of_c, list a_dest_control_list_of_c, remove_a_control_from_a_list_and_relink_direction which_way)
 Replace each occurence of c in a_source_control_list_of_c with a a_dest_control_list_of_c: More...
 
void remove_a_control_from_an_unstructured (control c)
 Remove a control node from a control graph. More...
 
void remove_a_control_from_an_unstructured_without_relinking (control c)
 It removes a control node from its successor and predecessor. More...
 
void discard_an_unstructured_without_its_statements (unstructured u)
 Used to discard an unstructured without touching its statements. More...
 
void free_a_control_without_its_statement (control c)
 Remove a control node without touching its statement, its predecessors and successors, if any. More...
 
void discard_a_control_sequence_without_its_statements (control begin, control end)
 Remove a control sequence without touching its statements. More...
 
list generate_a_statement_list_from_a_control_sequence (control begin, control end)
 Take a control sequence and return a list of all the statements in the sequence (in the same order... More...
 
void link_2_control_nodes (control source, control target)
 Add an edge between 2 control nodes. More...
 
void link_3_control_nodes (control c_test, control c_then, control c_else)
 Add an edge between 2 control nodes. More...
 
void unlink_2_control_nodes (control source, control target)
 Remove all edged between 2 control nodes. More...
 
void insert_control_in_arc (control c, control before, control after)
 Insert a control node between 2 connected control nodes. More...
 
void fuse_2_control_nodes (control first, control second)
 Fuse a 2 control nodes. More...
 

Variables

char vcid_ri_util_control [] = "$Id: control.c 23065 2016-03-02 09:05:50Z coelho $"
 Some utilities to deal with the control graph. More...
 

Variable Documentation

◆ vcid_ri_util_control

char vcid_ri_util_control[] = "$Id: control.c 23065 2016-03-02 09:05:50Z coelho $"

Some utilities to deal with the control graph.

control.c

It is mainly used by my unspaghettify and the controlizer.

Ronan Keryell.

Definition at line 34 of file control.c.