X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbearch.h;h=9c0e92446fcb063d95ac7c6deeadf8eafa0bcb09;hb=e629e6d582dcf7d83989409bd5701d1725b6c6c1;hp=c287d33cac00533142461188552feb9db54807c4;hpb=e96155a7245cb7eee1de5980f8a158582a8dcff0;p=libfirm diff --git a/ir/be/bearch.h b/ir/be/bearch.h index c287d33ca..9c0e92446 100644 --- a/ir/be/bearch.h +++ b/ir/be/bearch.h @@ -37,7 +37,6 @@ struct _be_node_factory_t; typedef enum _arch_register_type_t { arch_register_type_none = 0, - arch_register_type_write_invariant, arch_register_type_caller_saved, /**< The register must be saved by the caller upon a function call. It thus can be overwritten in the called function. */ @@ -111,13 +110,6 @@ _arch_register_for_index(const arch_register_class_t *cls, int idx) #define arch_register_for_index(cls, idx) \ _arch_register_for_index(cls, idx) -/** - * Get the register set for a register class. - * @param cls The register class. - * @return The set containing all registers in the class. - */ -#define arch_get_register_set_for_class(cls) ((cls)->set) - typedef enum _arch_operand_type_t { arch_operand_type_invalid, arch_operand_type_memory, @@ -163,7 +155,7 @@ typedef struct _arch_register_req_t { arch_register_req_type_t type; /**< The type of the constraint. */ const arch_register_class_t *cls; /**< The register class this constraint belongs to. */ - int (*limited)(const ir_node *irn, int pos, bitset_t *bs); + void (*limited)(const ir_node *irn, int pos, bitset_t *bs); /**< In case of the 'limited' constraint, this function must put all allowable @@ -194,8 +186,9 @@ typedef enum _arch_irn_class_t { * Some flags describing a node in more detail. */ typedef enum _arch_irn_flags_t { - arch_irn_flags_spillable = 1, - arch_irn_flags_rematerializable = 2 + arch_irn_flags_dont_spill = 1, /**< This must not be spilled. */ + arch_irn_flags_rematerializable = 2, /**< This should be replicated instead of spilled/reloaded. */ + arch_irn_flags_ignore = 4, /**< Do not consider the node during register allocation. */ } arch_irn_flags_t; struct _arch_irn_ops_if_t { @@ -355,9 +348,15 @@ extern arch_irn_class_t arch_irn_classify(const arch_env_t *env, const ir_node * */ extern arch_irn_flags_t arch_irn_get_flags(const arch_env_t *env, const ir_node *irn); +#define arch_irn_is_ignore(env, irn) \ + (arch_irn_get_flags(env, irn) == arch_irn_flags_ignore) + #define arch_irn_has_reg_class(env, irn, pos, cls) \ ((cls) == arch_get_irn_reg_class(env, irn, pos)) +#define arch_irn_consider_in_reg_alloc(env, cls, irn) \ + (arch_irn_has_reg_class(env, irn, -1, cls) && !arch_irn_is_ignore(env, irn)) + /** * Somebody who can be asked about nodes. */