From 62f064cf7cec70263df652c6884fab87d9dd11bb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Christian=20W=C3=BCrdig?= Date: Fri, 11 Aug 2006 13:38:09 +0000 Subject: [PATCH] irn classify now returns a mask --- ir/be/ia32/bearch_ia32.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index fd6badbbd..27077992f 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -229,19 +229,29 @@ static const arch_register_t *ia32_get_irn_reg(const void *self, const ir_node * } static arch_irn_class_t ia32_classify(const void *self, const ir_node *irn) { + arch_irn_class_t classification = arch_irn_class_normal; + irn = my_skip_proj(irn); + if (is_cfop(irn)) - return arch_irn_class_branch; - else if (is_ia32_Cnst(irn)) - return arch_irn_class_const; - else if (is_ia32_Ld(irn)) - return arch_irn_class_load; - else if (is_ia32_St(irn) || is_ia32_Store8Bit(irn)) - return arch_irn_class_store; - else if (is_ia32_irn(irn)) - return arch_irn_class_normal; - else - return 0; + classification |= arch_irn_class_branch; + + if (! is_ia32_irn(irn)) + return classification & ~arch_irn_class_normal; + + if (is_ia32_Cnst(irn)) + classification |= arch_irn_class_const; + + if (is_ia32_Ld(irn)) + classification |= arch_irn_class_load; + + if (is_ia32_St(irn) || is_ia32_Store8Bit(irn)) + classification |= arch_irn_class_store; + + if (is_ia32_got_reload(irn)) + classification |= arch_irn_class_reload; + + return classification; } static arch_irn_flags_t ia32_get_flags(const void *self, const ir_node *irn) { @@ -690,6 +700,7 @@ static void ia32_perform_memory_operand(const void *self, ir_node *irn, ir_node set_ia32_ls_mode(irn, get_irn_mode(reload)); set_ia32_frame_ent(irn, be_get_frame_entity(reload)); set_ia32_use_frame(irn); + set_ia32_got_reload(irn); set_irn_n(irn, 0, be_get_Reload_frame(reload)); set_irn_n(irn, 4, be_get_Reload_mem(reload)); -- 2.20.1