From: Michael Beck Date: Thu, 14 Sep 2006 14:14:46 +0000 (+0000) Subject: Push/Pop/AddSP/SubSP always modify ESP X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=83795a575d2957185ab9fbb623babd25ef366ff8;p=libfirm Push/Pop/AddSP/SubSP always modify ESP --- 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; } }