projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
hack to make it possible to mark spill,reload and remat nodes
[libfirm]
/
ir
/
be
/
ia32
/
bearch_ia32.c
diff --git
a/ir/be/ia32/bearch_ia32.c
b/ir/be/ia32/bearch_ia32.c
index
381b91c
..
fdf9abf
100644
(file)
--- a/
ir/be/ia32/bearch_ia32.c
+++ b/
ir/be/ia32/bearch_ia32.c
@@
-971,6
+971,7
@@
static void ia32_prepare_graph(void *self) {
#ifdef FIRM_GRGEN_BE
case TRANSFORMER_PBQP:
#ifdef FIRM_GRGEN_BE
case TRANSFORMER_PBQP:
+ case TRANSFORMER_RAND:
// disable CSE, because of two-step node-construction
set_opt_cse(0);
// disable CSE, because of two-step node-construction
set_opt_cse(0);
@@
-1028,6
+1029,8
@@
static void turn_back_am(ir_node *node)
load_res = new_rd_Proj(dbgi, irg, block, load, mode_Iu, pn_ia32_Load_res);
ia32_copy_am_attrs(load, node);
load_res = new_rd_Proj(dbgi, irg, block, load, mode_Iu, pn_ia32_Load_res);
ia32_copy_am_attrs(load, node);
+ if (is_ia32_is_reload(node))
+ set_ia32_is_reload(load);
set_irn_n(node, n_ia32_mem, new_NoMem());
switch (get_ia32_am_arity(node)) {
set_irn_n(node, n_ia32_mem, new_NoMem());
switch (get_ia32_am_arity(node)) {
@@
-1116,8
+1119,6
@@
static ir_node *flags_remat(ir_node *node, ir_node *after)
/**
* Called before the register allocator.
/**
* Called before the register allocator.
- * Calculate a block schedule here. We need it for the x87
- * simulator and the emitter.
*/
static void ia32_before_ra(void *self) {
ia32_code_gen_t *cg = self;
*/
static void ia32_before_ra(void *self) {
ia32_code_gen_t *cg = self;
@@
-1171,6
+1172,7
@@
static void transform_to_Load(ia32_code_gen_t *cg, ir_node *node) {
set_ia32_ls_mode(new_op, spillmode);
set_ia32_frame_ent(new_op, ent);
set_ia32_use_frame(new_op);
set_ia32_ls_mode(new_op, spillmode);
set_ia32_frame_ent(new_op, ent);
set_ia32_use_frame(new_op);
+ set_ia32_is_reload(new_op);
DBG_OPT_RELOAD2LD(node, new_op);
DBG_OPT_RELOAD2LD(node, new_op);
@@
-1241,6
+1243,7
@@
static void transform_to_Store(ia32_code_gen_t *cg, ir_node *node) {
set_ia32_ls_mode(store, mode);
set_ia32_frame_ent(store, ent);
set_ia32_use_frame(store);
set_ia32_ls_mode(store, mode);
set_ia32_frame_ent(store, ent);
set_ia32_use_frame(store);
+ set_ia32_is_spill(store);
SET_IA32_ORIG_NODE(store, ia32_get_old_node_name(cg, node));
DBG_OPT_SPILL2ST(node, store);
SET_IA32_ORIG_NODE(store, ia32_get_old_node_name(cg, node));
DBG_OPT_SPILL2ST(node, store);
@@
-2119,6
+2122,13
@@
static ir_graph **ia32_get_irg_list(const void *self, ir_graph ***irg_list)
return NULL;
}
return NULL;
}
+static void ia32_mark_remat(const void *self, ir_node *node) {
+ (void) self;
+ if (is_ia32_irn(node)) {
+ set_ia32_is_remat(node);
+ }
+}
+
/**
* Allows or disallows the creation of Psi nodes for the given Phi nodes.
* @return 1 if allowed, 0 otherwise
/**
* Allows or disallows the creation of Psi nodes for the given Phi nodes.
* @return 1 if allowed, 0 otherwise
@@
-2327,6
+2337,7
@@
static const lc_opt_enum_int_items_t transformer_items[] = {
{ "default", TRANSFORMER_DEFAULT },
#ifdef FIRM_GRGEN_BE
{ "pbqp", TRANSFORMER_PBQP },
{ "default", TRANSFORMER_DEFAULT },
#ifdef FIRM_GRGEN_BE
{ "pbqp", TRANSFORMER_PBQP },
+ { "random", TRANSFORMER_RAND },
#endif
{ NULL, 0 }
};
#endif
{ NULL, 0 }
};
@@
-2358,6
+2369,7
@@
const arch_isa_if_t ia32_isa_if = {
ia32_get_allowed_execution_units,
ia32_get_machine,
ia32_get_irg_list,
ia32_get_allowed_execution_units,
ia32_get_machine,
ia32_get_irg_list,
+ ia32_mark_remat,
ia32_parse_asm_constraint,
ia32_is_valid_clobber
};
ia32_parse_asm_constraint,
ia32_is_valid_clobber
};