X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fsparc%2Fbearch_sparc.c;h=5e3fbedfae238a62568625d1aa82192484938586;hb=b151d11c50d89b9dffadfb63f7ccfd81ea8db44f;hp=3adab36849e74819b6bd6510cbf1c945754faf66;hpb=6befda80d676b7db82f7c3c421c6541af872deca;p=libfirm diff --git a/ir/be/sparc/bearch_sparc.c b/ir/be/sparc/bearch_sparc.c index 3adab3684..5e3fbedfa 100644 --- a/ir/be/sparc/bearch_sparc.c +++ b/ir/be/sparc/bearch_sparc.c @@ -117,6 +117,8 @@ static int sparc_get_sp_bias(const ir_node *node) * calculates that! */ assert(attr->immediate_value <= -SPARC_MIN_STACKSIZE); return attr->immediate_value + SPARC_MIN_STACKSIZE; + } else if (is_sparc_RestoreZero(node)) { + return SP_BIAS_RESET; } return 0; } @@ -281,10 +283,12 @@ static void sparc_set_frame_entity(ir_node *node, ir_entity *entity) static void sparc_after_ra(ir_graph *irg) { - be_fec_env_t *fec_env = be_new_frame_entity_coalescer(irg); + be_stack_layout_t *stack_layout = be_get_irg_stack_layout(irg); + bool at_begin = stack_layout->sp_relative ? true : false; + be_fec_env_t *fec_env = be_new_frame_entity_coalescer(irg); irg_walk_graph(irg, NULL, sparc_collect_frame_entity_nodes, fec_env); - be_assign_entities(fec_env, sparc_set_frame_entity); + be_assign_entities(fec_env, sparc_set_frame_entity, at_begin); be_free_frame_entity_coalescer(fec_env); irg_block_walk_graph(irg, NULL, sparc_after_ra_walker, NULL); @@ -537,8 +541,7 @@ static ir_node *sparc_create_set(ir_node *cond) static void sparc_lower_for_target(void) { - int i; - int n_irgs = get_irp_n_irgs(); + size_t i, n_irgs = get_irp_n_irgs(); lower_mode_b_config_t lower_mode_b_config = { mode_Iu, sparc_create_set,