n1_reg = arch_get_irn_register(arch_env, n1);
if (!arch_reg_is_allocatable(arch_env, n1, -1, n1_reg)) {
DBG((dbg, 0, "Register %s assigned to %+F is not allowed\n", n1_reg->name, n1));
-// assert(0 && "Register constraint does not hold");
+ assert(0 && "Register constraint does not hold");
}
for (o = i+1, n2 = nodes[o]; n2; n2 = nodes[++o]) {
n2_reg = arch_get_irn_register(arch_env, n2);
* A default implementation of to_appear_in_schedule,
* as required in list_sched_selector_t.
*/
-extern be_default_to_appear_in_schedule(void *env, const ir_node *irn);
+extern int be_default_to_appear_in_schedule(void *env, const ir_node *irn);
/**
* A trivial selector, that just selects the first ready node.
/* register allocators */
static const lc_opt_enum_const_ptr_items_t ra_items[] = {
{ "chordal", &be_ra_chordal_allocator },
+ { "external", &be_ra_external_allocator },
{ NULL, NULL }
};
{
#ifdef WITH_LIBCORE
int i;
+ lc_opt_entry_t *be_grp_ra;
be_grp_root = lc_opt_get_grp(firm_opt_get_root(), "be");
+ be_grp_ra = lc_opt_get_grp(be_grp_root, "ra");
lc_opt_add_table(be_grp_root, be_main_options);
- /* register register allocator options */
+ /* register allocator options */
for(i = 0; ra_items[i].name != NULL; ++i) {
const be_ra_t *ra = ra_items[i].value;
- ra->register_options(be_grp_root);
+ ra->register_options(be_grp_ra);
}
/* register isa options */
* The external register allocator is a program taking 2 arguments:
* 1) An input file in which the cfg is defined
* 2) An output file containing the essential actions performed during allocation
- */
+ *
-#if 0
The input file format
----------------------
edge ::= 'cf-edge' block-nr block-nr . // Steuerflusskante src-->tgt
insn ::= gen-insn // Befehl in einem block
- | copy-insn
+ | copy-insn .
gen-insn ::= 'insn' insn-nr '{' uses defs '}' .
copy-insn ::= 'copy' insn-nr '{' uses defs '}' .
uses ::= 'use' var-list .
var-list ::= var-ref
- | var-ref var-list
+ | var-ref var-list .
var-ref ::= var-nr
| var-nr '<' reg-nr '>' . // reg-nr gibt register constraint an.
-ident ::= non-whitespace-char*
-regcount, block-nr, insn-nr, reg-nr, var-nr ::= integer
+ident ::= non-whitespace-char* .
+regcount, block-nr, insn-nr, reg-nr, var-nr ::= integer .
The output file format
-----------------------
-outputfile ::= 'actions' '{' action-list '}'
-TODO
+outputfile ::= action* .
-#endif /* documentation of file formats */
+action ::= 'spill' loc var-nr // insert a spill spill(var-nr);
+ | 'reload' loc var-nr var-nr // insert a reload var-nr[1] := reload(var-nr[2]);
+ | 'copy' loc var-nr var-nr // insert a copy var-nr[1] := var-nr[2];
+ | 'assign' var-nr reg-nr . // assign var-nr the register reg-nr
+
+loc ::= 'before' insn-nr
+ | 'after' insn-nr .
+
+TODO
+ *
+ * End of file format docu */
#ifdef HAVE_CONFIG_H
#include "config.h"
//TODO irg_block_walk_graph(irg, ssa_destr_rastello, NULL, &raenv);
}
-/******************************************************************************
- __ __ _ ___ __ __
- \ \ / / | | |__ \ \ \ / /
- \ \ / /_ _| |_ _ ___ ___ ) | \ \ / /_ _ _ __
- \ \/ / _` | | | | |/ _ \/ __| / / \ \/ / _` | '__|
- \ / (_| | | |_| | __/\__ \ / /_ \ / (_| | |
- \/ \__,_|_|\__,_|\___||___/ |____| \/ \__,_|_|
- *****************************************************************************/
/**
* Define variables (numbers) for all SSA-values.