From: Matthias Braun Date: Tue, 11 Mar 2008 17:13:58 +0000 (+0000) Subject: fix out flags for mode_T nodes X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=536ef282dbc04bbd6033aaab60801981d0eb5dd7;p=libfirm fix out flags for mode_T nodes [r18072] --- diff --git a/ir/be/arm/arm_spec.pl b/ir/be/arm/arm_spec.pl index 10bae4d65..a9170a55e 100644 --- a/ir/be/arm/arm_spec.pl +++ b/ir/be/arm/arm_spec.pl @@ -1028,8 +1028,8 @@ SubSP => { comment => "construct Sub from stack pointer", reg_req => { in => [ "sp", "gp", "none" ], out => [ "in_r1", "gp", "none" ] }, ins => [ "stack", "size", "mem" ], - emit => '. sub %D0, %S0, %S1'. - '. mov %%sp, %D1', + emit => ". sub %D0, %S0, %S1\n". + ". mov sp, %D1", outs => [ "stack:I|S", "addr", "M" ], }, diff --git a/ir/be/arm/bearch_arm.c b/ir/be/arm/bearch_arm.c index 762908ca8..a5c05b832 100644 --- a/ir/be/arm/bearch_arm.c +++ b/ir/be/arm/bearch_arm.c @@ -204,17 +204,26 @@ static arch_irn_class_t arm_classify(const void *self, const ir_node *irn) static arch_irn_flags_t arm_get_flags(const void *self, const ir_node *irn) { + arch_irn_flags_t flags = arch_irn_flags_none; (void) self; - irn = skip_Proj_const(irn); - if (is_arm_irn(irn)) { - return get_arm_flags(irn); - } - else if (is_Unknown(irn)) { + if(is_Unknown(irn)) { return arch_irn_flags_ignore; } - return 0; + if (is_Proj(irn) && mode_is_datab(get_irn_mode(irn))) { + ir_node *pred = get_Proj_pred(irn); + if (is_arm_irn(pred)) { + flags = get_arm_out_flags(pred, get_Proj_proj(irn)); + } + irn = pred; + } + + if (is_arm_irn(irn)) { + flags |= get_arm_flags(irn); + } + + return flags; } static ir_entity *arm_get_frame_entity(const void *self, const ir_node *irn)