From 83795a575d2957185ab9fbb623babd25ef366ff8 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Thu, 14 Sep 2006 14:14:46 +0000 Subject: [PATCH] Push/Pop/AddSP/SubSP always modify ESP --- ir/be/ia32/bearch_ia32.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/ir/be/ia32/bearch_ia32.c b/ir/be/ia32/bearch_ia32.c index 7cef37af6..6a4f64db6 100644 --- a/ir/be/ia32/bearch_ia32.c +++ b/ir/be/ia32/bearch_ia32.c @@ -264,13 +264,19 @@ static arch_irn_flags_t ia32_get_flags(const void *self, const ir_node *irn) { if(is_Proj(irn)) { ir_node *pred = get_Proj_pred(irn); if(is_ia32_Push(pred) && get_Proj_proj(irn) == pn_ia32_Push_stack) { - return arch_irn_flags_modify_sp; + /* Push modifies always ESP, this cannot be changed */ + return arch_irn_flags_modify_sp | arch_irn_flags_ignore; } if(is_ia32_Pop(pred) && get_Proj_proj(irn) == pn_ia32_Pop_stack) { - return arch_irn_flags_modify_sp; + return arch_irn_flags_modify_sp | arch_irn_flags_ignore; } if(is_ia32_AddSP(pred) && get_Proj_proj(irn) == pn_ia32_AddSP_stack) { - return arch_irn_flags_modify_sp; + /* AddSP modifies always ESP, this cannot be changed */ + return arch_irn_flags_modify_sp | arch_irn_flags_ignore; + } + if(is_ia32_SubSP(pred) && get_Proj_proj(irn) == pn_ia32_SubSP_stack) { + /* SubSP modifies always ESP, this cannot be changed */ + return arch_irn_flags_modify_sp | arch_irn_flags_ignore; } } -- 2.20.1