X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbenode_t.h;h=2cad672bfeff422e094672cde007226bc07f57cc;hb=1ef3d57f913e2f533aba0ab6b22f4d66223b86ed;hp=45e4dc3d356a0433cb458108dd1ef658842d0960;hpb=9d771b942da18ee0b220ade731b35852cdff759e;p=libfirm diff --git a/ir/be/benode_t.h b/ir/be/benode_t.h index 45e4dc3d3..2cad672bf 100644 --- a/ir/be/benode_t.h +++ b/ir/be/benode_t.h @@ -366,36 +366,25 @@ ir_node *be_new_Barrier(ir_graph *irg, ir_node *bl, int n, ir_node *in[]); */ ir_node *be_Barrier_append_node(ir_node *barrier, ir_node *node); -/** - * Appends a register out requirement to a RegParams node - * - * @returns the proj node for the new register - */ -ir_node *be_RegParams_append_out_reg(ir_node *regparams, - const arch_env_t *arch_env, - const arch_register_t *reg); - /** * Make a spill node. * - * @param arch_env The architecture environment. * @param irn The node to be spilled. * @param spill_ctx The context in which the spill is introduced (This is mostly == irn up to the case of Phis). * @return The new spill node. */ -ir_node *be_spill(const arch_env_t *arch_env, ir_node *block, ir_node *irn); +ir_node *be_spill(ir_node *block, ir_node *irn); /** * Make a reload and insert it into the schedule. * - * @param arch_env The architecture environment. * @param cls The register class of the reloaded value. * @param insert The node in the schedule in front of which the reload is inserted. * @param mode The mode of the original (spilled) value. * @param spill The spill node corresponding to this reload. * @return A freshly made reload. */ -ir_node *be_reload(const arch_env_t *arch_env, const arch_register_class_t *cls, ir_node *insert, ir_mode *mode, ir_node *spill); +ir_node *be_reload(const arch_register_class_t *cls, ir_node *insert, ir_mode *mode, ir_node *spill); enum { be_pos_CopyKeep_op = 0 @@ -463,10 +452,13 @@ int be_get_MemPerm_entity_arity(const ir_node *irn); /** * Impose a register constraint on a backend node. * @param irn The node. - * @param pos The position of the argument/result. Results range from -1..-m and arguments form 0..n + * @param pos The position of the argument. * @param reg The register which is admissible for that node, argument/result and position. */ -void be_set_constr_single_reg(ir_node *irn, int pos, const arch_register_t *reg); +void be_set_constr_single_reg_in(ir_node *irn, int pos, + const arch_register_t *reg, arch_register_req_type_t additional_flags); +void be_set_constr_single_reg_out(ir_node *irn, int pos, + const arch_register_t *reg, arch_register_req_type_t additional_flags); /** * Impose register constraints on a backend node. @@ -478,23 +470,14 @@ void be_set_constr_single_reg(ir_node *irn, int pos, const arch_register_t *reg) */ void be_set_constr_limited(ir_node *irn, int pos, const arch_register_req_t *req); -/** - * Set the flags of a node. - * @param irn The node itself. - * @param pos The position (0..n) for arguments, (-1..-m) for results. - * @param flags The flags to set for that node and position. - */ -void be_node_set_flags(ir_node *irn, int pos, arch_irn_flags_t flags); - -void be_node_add_flags(ir_node *irn, int pos, arch_irn_flags_t flags); - /** * Set the register class of a node. * @param irn The node itself. - * @param pos The position (0..n) for arguments, (-1..-m) for results. + * @param pos The position (0..n) for arguments * @param flags The register class to set for that node and position. */ -void be_node_set_reg_class(ir_node *irn, int pos, const arch_register_class_t *cls); +void be_node_set_reg_class_in(ir_node *irn, int pos, const arch_register_class_t *cls); +void be_node_set_reg_class_out(ir_node *irn, int pos, const arch_register_class_t *cls); /** * Set the register requirement type of a node. @@ -506,54 +489,46 @@ void be_node_set_req_type(ir_node *irn, int pos, arch_register_req_type_t type); /** * Initialize the Phi handler. - * @param env The be_main environment. */ -void be_phi_handler_new(be_main_env_t *env); +void be_phi_handler_new(void); /** * Destroy the Phi handler. - * @param env The be_main environment. */ -void be_phi_handler_free(be_main_env_t *env); +void be_phi_handler_free(void); /** * Reset the register data in the Phi handler. * This should be called on each new graph and deletes the register information of the current graph. */ -void be_phi_handler_reset(be_main_env_t *env); +void be_phi_handler_reset(void); /** * Set the register requirements for a phi node. */ -void be_set_phi_reg_req(const arch_env_t *arch_env, ir_node *phi, - const arch_register_req_t *req); - -/* - * Set flags for a phi node - */ -void be_set_phi_flags(const arch_env_t *arch_env, ir_node *phi, - arch_irn_flags_t flags); - -/** - * irn handler for common be nodes. - */ -extern const arch_irn_handler_t be_node_irn_handler; - -static INLINE int be_is_Spill (const ir_node *irn) { return get_irn_opcode(irn) == beo_Spill ; } -static INLINE int be_is_Reload (const ir_node *irn) { return get_irn_opcode(irn) == beo_Reload ; } -static INLINE int be_is_Copy (const ir_node *irn) { return get_irn_opcode(irn) == beo_Copy ; } -static INLINE int be_is_CopyKeep (const ir_node *irn) { return get_irn_opcode(irn) == beo_CopyKeep ; } -static INLINE int be_is_Perm (const ir_node *irn) { return get_irn_opcode(irn) == beo_Perm ; } -static INLINE int be_is_MemPerm (const ir_node *irn) { return get_irn_opcode(irn) == beo_MemPerm ; } -static INLINE int be_is_Keep (const ir_node *irn) { return get_irn_opcode(irn) == beo_Keep ; } -static INLINE int be_is_Call (const ir_node *irn) { return get_irn_opcode(irn) == beo_Call ; } -static INLINE int be_is_Return (const ir_node *irn) { return get_irn_opcode(irn) == beo_Return ; } -static INLINE int be_is_IncSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_IncSP ; } -static INLINE int be_is_AddSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_AddSP ; } -static INLINE int be_is_SubSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_SubSP ; } -static INLINE int be_is_RegParams(const ir_node *irn) { return get_irn_opcode(irn) == beo_RegParams; } -static INLINE int be_is_FrameAddr(const ir_node *irn) { return get_irn_opcode(irn) == beo_FrameAddr; } -static INLINE int be_is_Barrier (const ir_node *irn) { return get_irn_opcode(irn) == beo_Barrier ; } -static INLINE int be_is_Unwind (const ir_node *irn) { return get_irn_opcode(irn) == beo_Unwind ; } +void be_set_phi_reg_req(ir_node *phi, const arch_register_req_t *req, + arch_register_req_type_t additional_types); + +/** + * irn handler for common be nodes and Phi's. + */ +const void *be_node_get_irn_ops(const ir_node *irn); + +static inline int be_is_Spill (const ir_node *irn) { return get_irn_opcode(irn) == beo_Spill ; } +static inline int be_is_Reload (const ir_node *irn) { return get_irn_opcode(irn) == beo_Reload ; } +static inline int be_is_Copy (const ir_node *irn) { return get_irn_opcode(irn) == beo_Copy ; } +static inline int be_is_CopyKeep (const ir_node *irn) { return get_irn_opcode(irn) == beo_CopyKeep ; } +static inline int be_is_Perm (const ir_node *irn) { return get_irn_opcode(irn) == beo_Perm ; } +static inline int be_is_MemPerm (const ir_node *irn) { return get_irn_opcode(irn) == beo_MemPerm ; } +static inline int be_is_Keep (const ir_node *irn) { return get_irn_opcode(irn) == beo_Keep ; } +static inline int be_is_Call (const ir_node *irn) { return get_irn_opcode(irn) == beo_Call ; } +static inline int be_is_Return (const ir_node *irn) { return get_irn_opcode(irn) == beo_Return ; } +static inline int be_is_IncSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_IncSP ; } +static inline int be_is_AddSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_AddSP ; } +static inline int be_is_SubSP (const ir_node *irn) { return get_irn_opcode(irn) == beo_SubSP ; } +static inline int be_is_RegParams(const ir_node *irn) { return get_irn_opcode(irn) == beo_RegParams; } +static inline int be_is_FrameAddr(const ir_node *irn) { return get_irn_opcode(irn) == beo_FrameAddr; } +static inline int be_is_Barrier (const ir_node *irn) { return get_irn_opcode(irn) == beo_Barrier ; } +static inline int be_is_Unwind (const ir_node *irn) { return get_irn_opcode(irn) == beo_Unwind ; } #endif /* FIRM_BE_BENODE_T_H */