-/**
- * Perform simple SSA-destruction with copies.
- * The order of processing _must_ be
- * for all positions {
- * for all phis {
- * doit
- * }
- * }
- * else the magic to keep track of processed phi-positions will fail in
- * function 'insert_copies'
- */
-static void ssa_destr_simple_walker(ir_node *blk, void *env) {
- be_raext_env_t *raenv = env;
- int pos, max;
- ir_node *phi;
-
- /* for all argument positions of the phis */
- for (pos=0, max=get_irn_arity(blk); pos<max; ++pos) {
-
- /* for all phi nodes (which are scheduled first) */
- sched_foreach(blk, phi) {
- if (!is_Phi(phi))
- break;
-
- raenv->cls = arch_get_irn_reg_class(raenv->aenv, phi, -1);
- insert_copies(raenv, phi, pos, phi);
- }
- }
-}
-
-
-static void ssa_destr_simple(be_raext_env_t *raenv) {
- be_clear_links(raenv->irg);
- irg_block_walk_graph(raenv->irg, ssa_destr_simple_walker, NULL, raenv);
-}
-
-
-static void ssa_destr_rastello(be_raext_env_t *raenv) {
- assert(0 && "NYI");
- exit(0xDeadBeef);
- /*
- phi_class_compute(raenv->irg);
- irg_block_walk_graph(irg, ssa_destr_rastello, NULL, &raenv);
- */
-}
-
-/******************************************************************************
- __ __ _ ___ __ __
- \ \ / / | | |__ \ \ \ / /
- \ \ / /_ _| |___ ) | \ \ / /_ _ _ __ ___
- \ \/ / _` | / __| / / \ \/ / _` | '__/ __|
- \ / (_| | \__ \ / /_ \ / (_| | | \__ \
- \/ \__,_|_|___/ |____| \/ \__,_|_| |___/
- *****************************************************************************/
-
-/**
- * This struct maps a variable (nr) to the values belonging to this variable
- */
-struct _var_info_t {
- int var_nr; /* the key */
- pset *values; /* the ssa-values belonging to this variable */
-};
-
-#define SET_REMOVED -1
-
-/**
- * The link field of an irn points to the var_info struct
- * representing the corresponding variable.
- */
-#define set_var_info(irn, vi) set_irn_link(irn, vi)
-#define get_var_info(irn) ((var_info_t *)get_irn_link(irn))
-
-#define HASH_VAR_NR(var_nr) var_nr
-
-static int compare_var_infos(const void *e1, const void *e2, size_t size) {
- const var_info_t *v1 = e1;
- const var_info_t *v2 = e2;
-
- if (v1->var_nr == SET_REMOVED || v2->var_nr == SET_REMOVED)
- return 1;
-
- return v1->var_nr != v2->var_nr;
-}
-
-static INLINE var_info_t *var_find(set *vars, int var_nr) {
- var_info_t vi;
- vi.var_nr = var_nr;
-
- return set_find(vars, &vi, sizeof(vi), HASH_VAR_NR(var_nr));
-}
-
-static INLINE var_info_t *var_find_or_insert(set *vars, int var_nr) {
- var_info_t vi, *found;
- memset(&vi, 0, sizeof(vi));
- vi.var_nr = var_nr;
-
- found = set_insert(vars, &vi, sizeof(vi), HASH_VAR_NR(var_nr));