From: Adam Szalkowski Date: Sat, 20 May 2006 03:48:59 +0000 (+0000) Subject: added callbacks to retrieve the cost of an operation and information about X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=20d29aa3dbb43d8aee6ea35c3303db3c04a7831e;p=libfirm added callbacks to retrieve the cost of an operation and information about memory operands --- diff --git a/ir/be/bearch.c b/ir/be/bearch.c index 747f96786..f12ed017b 100644 --- a/ir/be/bearch.c +++ b/ir/be/bearch.c @@ -117,6 +117,25 @@ arch_inverse_t *arch_get_inverse(const arch_env_t *env, const ir_node *irn, int } } +int arch_get_op_estimated_cost(const arch_env_t *env, const ir_node *irn) +{ + const arch_irn_ops_t *ops = get_irn_ops(env, irn); + if(ops->impl->get_op_estimated_cost) { + return ops->impl->get_op_estimated_cost(ops, irn); + } else { + return 1; + } +} + +int arch_is_possible_memory_operand(const arch_env_t *env, const ir_node *irn, int i) +{ + const arch_irn_ops_t *ops = get_irn_ops(env, irn); + if(ops->impl->possible_memory_operand) { + return ops->impl->possible_memory_operand(ops, irn, i); + } else { + return 0; + } +} int arch_get_allocatable_regs(const arch_env_t *env, const ir_node *irn, int pos, bitset_t *bs) { diff --git a/ir/be/bearch.h b/ir/be/bearch.h index d724a2d45..8fec55db2 100644 --- a/ir/be/bearch.h +++ b/ir/be/bearch.h @@ -292,6 +292,7 @@ struct _arch_irn_ops_if_t { * Returns an inverse operation which yields the i-th argument * of the given node as result. * + * @param self The this pointer. * @param irn The original operation * @param i Index of the argument we want the inverse operation to yield * @param inverse struct to be filled with the resulting inverse op @@ -300,6 +301,27 @@ struct _arch_irn_ops_if_t { */ arch_inverse_t *(*get_inverse)(const void *self, const ir_node *irn, int i, arch_inverse_t *inverse, struct obstack *obstack); + /** + * Get the estimated cycle count for @p irn. + * + * @param self The this pointer. + * @param irn The node. + * + * @return The estimated cycle count for this operation + */ + int (*get_op_estimated_cost)(const void *self, const ir_node *irn); + + /** + * Asks the backend whether operand @p i of @p irn can be loaded form memory internally + * + * @param self The this pointer. + * @param irn The node. + * @param i Index of the argument we would like to know whether @p irn can load it form memory internally + * + * @return nonzero if argument can be loaded or zero otherwise + */ + int (*possible_memory_operand)(const void *self, const ir_node *irn, unsigned int i); + }; /**