X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fopt%2Ffunccall.c;h=8fb3d0cdff60bd910120dc3ae9c9354c8520c124;hb=c7dc950ac0cdd7d24acffb798b5867d0db5dd7c8;hp=1640ddf529d05d1ed577c78d519143822795f47c;hpb=46e024b6e0be49950fba1f24834b7198faac02ec;p=libfirm diff --git a/ir/opt/funccall.c b/ir/opt/funccall.c index 1640ddf52..8fb3d0cdf 100644 --- a/ir/opt/funccall.c +++ b/ir/opt/funccall.c @@ -90,8 +90,8 @@ static void collect_const_and_pure_calls(ir_node *node, void *env) { /* set the link to NULL for all non-const/pure calls */ set_irn_link(call, NULL); ptr = get_Call_ptr(call); - if (is_SymConst_addr_ent(ptr)) { - ent = get_SymConst_entity(ptr); + if (is_Global(ptr)) { + ent = get_Global_entity(ptr); prop = get_entity_additional_properties(ent); if ((prop & (mtp_property_const|mtp_property_pure)) == 0) @@ -261,8 +261,8 @@ static void collect_nothrow_calls(ir_node *node, void *env) { /* set the link to NULL for all non-const/pure calls */ set_irn_link(call, NULL); ptr = get_Call_ptr(call); - if (is_SymConst_addr_ent(ptr)) { - ent = get_SymConst_entity(ptr); + if (is_Global(ptr)) { + ent = get_Global_entity(ptr); prop = get_entity_additional_properties(ent); if ((prop & mtp_property_nothrow) == 0) @@ -677,8 +677,8 @@ static int is_malloc_call_result(const ir_node *node) { if (is_alloc_entity != NULL && is_Call(node)) { ir_node *ptr = get_Call_ptr(node); - if (is_SymConst_addr_ent(ptr)) { - ir_entity *ent = get_SymConst_entity(ptr); + if (is_Global(ptr)) { + ir_entity *ent = get_Global_entity(ptr); return is_alloc_entity(ent); } } @@ -712,19 +712,19 @@ static int is_stored(const ir_node *n) { break; case iro_Store: if (get_Store_value(succ) == n) - return 0; + return 1; /* ok if its only the address input */ break; case iro_Sel: case iro_Cast: case iro_Confirm: if (is_stored(succ)) - return 0; + return 1; break; case iro_Call: ptr = get_Call_ptr(succ); - if (is_SymConst_addr_ent(ptr)) { - ir_entity *ent = get_SymConst_entity(ptr); + if (is_Global(ptr)) { + ir_entity *ent = get_Global_entity(ptr); int i; /* we know the called entity */ @@ -733,19 +733,21 @@ static int is_stored(const ir_node *n) { /* n is the i'th param of the call */ if (get_method_param_access(ent, i) & ptr_access_store) { /* n is store in ent */ - return 0; + return 1; } } } } else { - return 0; + /* unknown call address */ + return 1; } break; default: /* bad, potential alias */ - return 0; + return 1; } } + return 0; } /* is_stored */ /** @@ -765,9 +767,9 @@ static unsigned check_stored_result(ir_graph *irg) { if (! is_Return(pred)) continue; for (j = get_Return_n_ress(pred) - 1; j >= 0; --j) { - const ir_node *res = get_Return_res(pred, j); + const ir_node *irn = get_Return_res(pred, j); - if (is_stored(res)) { + if (is_stored(irn)) { /* bad, might create an alias */ res = ~mtp_property_malloc; goto finish; @@ -829,9 +831,9 @@ static unsigned check_nothrow_or_malloc(ir_graph *irg, int top) { } else if (is_Call(res)) { ir_node *ptr = get_Call_ptr(res); - if (is_SymConst_addr_ent(ptr)) { + if (is_Global(ptr)) { /* a direct call */ - ir_entity *ent = get_SymConst_entity(ptr); + ir_entity *ent = get_Global_entity(ptr); ir_graph *callee = get_entity_irg(ent); if (callee == irg) { @@ -885,9 +887,9 @@ static unsigned check_nothrow_or_malloc(ir_graph *irg, int top) { if (is_Call(pred)) { ir_node *ptr = get_Call_ptr(pred); - if (is_SymConst_addr_ent(ptr)) { + if (is_Global(ptr)) { /* a direct call */ - ir_entity *ent = get_SymConst_entity(ptr); + ir_entity *ent = get_Global_entity(ptr); ir_graph *callee = get_entity_irg(ent); if (callee == irg) {