X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fbeabi.c;h=1e6cb7196882d6f7fb9b93b959bd6f19339eec73;hb=5474a1c188c9d59eea2c915515980cd9cbab58d8;hp=a71e41a20c23f2313962a92af044d445eaf68f4f;hpb=70c81a6de618b06436219a4e20ccb50fd1e05a1c;p=libfirm diff --git a/ir/be/beabi.c b/ir/be/beabi.c index a71e41a20..1e6cb7196 100644 --- a/ir/be/beabi.c +++ b/ir/be/beabi.c @@ -21,7 +21,6 @@ * @file * @brief Backend ABI implementation. * @author Sebastian Hack, Michael Beck - * @version $Id$ */ #include "config.h" @@ -37,11 +36,11 @@ #include "irgwalk.h" #include "irprintf_t.h" #include "irgopt.h" -#include "irbitset.h" #include "iropt_t.h" +#include "irtools.h" #include "heights.h" #include "pdeq.h" -#include "irtools.h" +#include "util.h" #include "raw_bitset.h" #include "error.h" #include "pset_new.h" @@ -387,7 +386,7 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp) const ir_edge_t *edge; int *reg_param_idxs; int *stack_param_idx; - int i, n, destroy_all_regs; + int i, n; int throws_exception; size_t s; size_t p; @@ -524,20 +523,6 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp) } } - /* check for the return_twice property */ - destroy_all_regs = 0; - if (is_SymConst_addr_ent(call_ptr)) { - ir_entity *ent = get_SymConst_entity(call_ptr); - - if (get_entity_additional_properties(ent) & mtp_property_returns_twice) - destroy_all_regs = 1; - } else { - ir_type *call_tp = get_Call_type(irn); - - if (get_method_additional_properties(call_tp) & mtp_property_returns_twice) - destroy_all_regs = 1; - } - /* Put caller save into the destroyed set and state registers in the states * set */ for (i = 0, n = arch_env->n_register_classes; i < n; ++i) { @@ -558,7 +543,7 @@ static ir_node *adjust_call(be_abi_irg_t *env, ir_node *irn, ir_node *curr_sp) * checking */ continue; } - if (destroy_all_regs || arch_register_is_caller_save(arch_env, reg)) { + if (arch_register_is_caller_save(arch_env, reg)) { if (!(reg->type & arch_register_type_ignore)) { ARR_APP1(const arch_register_t*, destroyed_regs, reg); } @@ -880,7 +865,7 @@ static ir_node *adjust_alloc(be_abi_irg_t *env, ir_node *alloc, ir_node *curr_sp count = get_Alloc_count(alloc); /* we might need to multiply the count with the element size */ - if (type != firm_unknown_type && get_type_size_bytes(type) != 1) { + if (!is_unknown_type(type) && get_type_size_bytes(type) != 1) { ir_mode *mode = get_irn_mode(count); ir_tarval *tv = new_tarval_from_long(get_type_size_bytes(type), mode); @@ -945,7 +930,7 @@ static ir_node *adjust_free(be_abi_irg_t *env, ir_node *free, ir_node *curr_sp) assert(get_Free_where(free) == stack_alloc); /* we might need to multiply the size with the element size */ - if (type != firm_unknown_type && get_type_size_bytes(type) != 1) { + if (!is_unknown_type(type) && get_type_size_bytes(type) != 1) { ir_tarval *tv = new_tarval_from_long(get_type_size_bytes(type), mode_Iu); ir_node *cnst = new_rd_Const(dbg, irg, tv); ir_node *mul = new_rd_Mul(dbg, block, get_Free_count(free),