X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbenode_t.h;h=e71d775e347eca91ec0130dba6e1e513575f73e3;hb=504619ba8a1110600cd1e8836044bf8862276ef8;hp=2f6ba3fe8743657fe72df3356676d177f93c4579;hpb=dc3225d50c7056cfacfb244a16264892b75bc983;p=libfirm diff --git a/ir/be/benode_t.h b/ir/be/benode_t.h index 2f6ba3fe8..e71d775e3 100644 --- a/ir/be/benode_t.h +++ b/ir/be/benode_t.h @@ -34,18 +34,17 @@ struct _be_node_factory_t { typedef struct _be_node_factory_t be_node_factory_t; -be_node_factory_t *be_node_factory_init(be_node_factory_t *factory, - const arch_isa_if_t *isa); +be_node_factory_t *be_node_factory_init(be_node_factory_t *factory, const arch_isa_t *isa); const arch_irn_handler_t *be_node_get_irn_handler(const be_node_factory_t *f); ir_node *new_Spill(const be_node_factory_t *factory, const arch_register_class_t *cls, - ir_graph *irg, ir_node *bl, ir_node *node_to_spill); + ir_graph *irg, ir_node *bl, ir_node *node_to_spill, ir_node *ctx); ir_node *new_Reload(const be_node_factory_t *factory, - const arch_register_class_t *cls, - ir_graph *irg, ir_node *bl, ir_node *spill_node); + const arch_register_class_t *cls, ir_graph *irg, + ir_node *bl, ir_mode *mode, ir_node *spill_node); ir_node *new_Perm(const be_node_factory_t *factory, const arch_register_class_t *cls, @@ -55,12 +54,46 @@ ir_node *new_Copy(const be_node_factory_t *factory, const arch_register_class_t *cls, ir_graph *irg, ir_node *block, ir_node *in); -ir_node *be_spill(const be_node_factory_t *factory, const arch_env_t *env, ir_node *irn); -ir_node *be_reload(const be_node_factory_t *factory, const arch_env_t *env, ir_node *irn); +ir_node *be_spill( + const be_node_factory_t *factory, + const arch_env_t *arch_env, + ir_node *irn, + ir_node *spill_ctx); + +ir_node *be_reload( + const be_node_factory_t *factory, + const arch_env_t *arch_env, + const arch_register_class_t *cls, + ir_node *irn, int pos, ir_mode *mode, ir_node *spill); + +int be_is_Spill(const ir_node *irn); +int be_is_Reload(const ir_node *irn); +int be_is_Copy(const ir_node *irn); +int be_is_Perm(const ir_node *irn); + +void set_Spill_offset(ir_node *irn, unsigned offset); +unsigned get_Spill_offset(ir_node *irn); + +ir_node *get_Spill_context(const ir_node *irn); -int is_Spill(const be_node_factory_t *f, const ir_node *irn); -void insert_Perm_after(const be_main_session_env_t *env, - const arch_register_class_t *cls, ir_node *pos); +/** + * Modify the output register requirements of a Perm. + * This function incur register constraints to an output value of a Perm. + * This is used when handling register constraints in general, + * see beconstrperm.c + */ +void be_set_Perm_out_req(ir_node *irn, int pos, const arch_register_req_t *req); + +/** + * Insert a Perm node after a specific node in the schedule. + * The Perm permutes over all values live at the given node. + * This means that all liveness intervals are cut apart at this + * location in the program. + */ +ir_node *insert_Perm_after(const be_main_env_t *env, + const arch_register_class_t *cls, + dom_front_info_t *dom_front, + ir_node *pos); #endif /* _BENODE_T_H */