becopyilp: Inline struct size_red_t into struct ilp_env_t.
[libfirm] / ir / kaps / optimal.h
1 /*
2  * This file is part of libFirm.
3  * Copyright (C) 2012 University of Karlsruhe.
4  */
5
6 /**
7  * @file
8  * @brief   Heuristic PBQP solver.
9  * @date    28.12.2009
10  * @author  Sebastian Buchwald
11  */
12 #ifndef KAPS_OPTIMAL_H
13 #define KAPS_OPTIMAL_H
14
15 #include "pbqp_t.h"
16
17 extern pbqp_edge_t **edge_bucket;
18 extern pbqp_node_t **node_buckets[4];
19 extern pbqp_node_t **reduced_bucket;
20 extern pbqp_node_t  *merged_node;
21
22 void apply_edge(pbqp_t *pbqp);
23
24 void apply_RI(pbqp_t *pbqp);
25 void apply_RII(pbqp_t *pbqp);
26 void apply_RM(pbqp_t *pbqp, pbqp_node_t *node);
27
28 void back_propagate(pbqp_t *pbqp);
29 num determine_solution(pbqp_t *pbqp);
30 void fill_node_buckets(pbqp_t *pbqp);
31 void free_buckets(void);
32 unsigned get_local_minimal_alternative(pbqp_t *pbqp, pbqp_node_t *node);
33 pbqp_node_t *get_node_with_max_degree(void);
34 void initial_simplify_edges(pbqp_t *pbqp);
35 void select_alternative(pbqp_node_t *node, unsigned selected_index);
36 void simplify_edge(pbqp_t *pbqp, pbqp_edge_t *edge);
37 void reorder_node_after_edge_deletion(pbqp_node_t *node);
38 void reorder_node_after_edge_insertion(pbqp_node_t *node);
39
40 int node_is_reduced(pbqp_node_t *node);
41
42 #endif /* KAPS_OPTIMAL_H */