#include "benode.h"
-typedef struct _usage_stats_t {
+typedef struct usage_stats_t {
ir_node *irn;
- struct _usage_stats_t *next;
+ struct usage_stats_t *next;
int max_hops;
int uses_in_block; /**< Number of uses inside the current block. */
int already_consumed; /**< Number of insns using this value already
return res;
}
-static void *reg_pressure_graph_init(const list_sched_selector_t *vtab, const be_irg_t *birg)
+static void *reg_pressure_graph_init(const list_sched_selector_t *vtab, ir_graph *irg)
{
reg_pressure_main_env_t *main_env = XMALLOC(reg_pressure_main_env_t);
main_env->vtab = vtab;
- irg_walk_graph(be_get_birg_irg(birg), firm_clear_link, NULL, NULL);
+ irg_walk_graph(irg, firm_clear_link, NULL, NULL);
return main_env;
}
-static inline int must_appear_in_schedule(const list_sched_selector_t *sel, void *block_env, const ir_node *irn)
-{
- int res = -1;
-
- if (sel->to_appear_in_schedule)
- res = sel->to_appear_in_schedule(block_env, irn);
-
- return res >= 0 ? res : (to_appear_in_schedule(irn) || be_is_Keep(irn) || be_is_CopyKeep(irn) || be_is_Start(irn));
-}
-
static void *reg_pressure_block_init(void *graph_env, ir_node *bl)
{
ir_node *irn;
* Collect usage statistics.
*/
sched_foreach(bl, irn) {
- if (must_appear_in_schedule(env->main_env->vtab, env, irn)) {
+ if (to_appear_in_schedule(irn)) {
int i, n;
for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
//ir_node *op = get_irn_n(irn, i);
- if (must_appear_in_schedule(env->main_env->vtab, env, irn)) {
+ if (to_appear_in_schedule(irn)) {
usage_stats_t *us = get_or_set_usage_stats(env, irn);
#if 0 /* Liveness is not computed here! */
if (is_live_end(bl, op))
for (i = 0, n = get_irn_arity(irn); i < n; ++i) {
ir_node *op = get_irn_n(irn, i);
- if (must_appear_in_schedule(env->main_env->vtab, env, op))
+ if (to_appear_in_schedule(op))
sum += compute_max_hops(env, op);
}
reg_pressure_graph_init,
reg_pressure_block_init,
reg_pressure_select,
- NULL, /* to_appear_in_schedule */
NULL, /* node_ready */
NULL, /* node_selected */
NULL, /* exectime */