From 004f9b10d631414720ea9c4a86d3f89b742a027e Mon Sep 17 00:00:00 2001 From: Adam Szalkowski Date: Wed, 31 May 2006 15:33:47 +0000 Subject: [PATCH] implemented a function to retrieve estimated costs of an op --- ir/be/ia32/bearch_ia32.c | 51 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index a7e94de87..714c49566 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -456,6 +456,54 @@ static ir_type *ia32_abi_get_between_type(void *self) return env->flags.try_omit_fp ? omit_fp_between_type : between_type; } +/** + * 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 + */ +static int ia32_get_op_estimated_cost(const void *self, const ir_node *irn) +{ + int cost; + switch (get_ia32_irn_opcode(irn)) { + case iro_ia32_xDiv: + case iro_ia32_DivMod: + cost = 8; + break; + + case iro_ia32_xLoad: + case iro_ia32_l_Load: + case iro_ia32_Load: + case iro_ia32_Push: + case iro_ia32_Pop: + cost = 10; + break; + + case iro_ia32_xStore: + case iro_ia32_l_Store: + case iro_ia32_Store: + case iro_ia32_Store8Bit: + cost = 50; + break; + + case iro_ia32_MulS: + case iro_ia32_Mul: + case iro_ia32_Mulh: + case iro_ia32_xMul: + case iro_ia32_l_MulS: + case iro_ia32_l_Mul: + cost = 2; + break; + + default: + cost = 1; + } + + return cost; +} + /** * Returns the inverse operation if @p irn, recalculating the argument at position @p i. * @@ -597,7 +645,8 @@ static const arch_irn_ops_if_t ia32_irn_ops_if = { ia32_get_flags, ia32_get_frame_entity, ia32_set_stack_bias, - ia32_get_inverse + ia32_get_inverse, + ia32_get_op_estimated_cost }; ia32_irn_ops_t ia32_irn_ops = { -- 2.20.1