call optimize_cf() to delete dead-code that might arise after cond_eval
[libfirm] / ir / opt / funccall.c
index 210ab69..8fb3d0c 100644 (file)
@@ -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);
                }
        }
@@ -711,20 +711,20 @@ static int is_stored(const ir_node *n) {
                        /* ok */
                        break;
                case iro_Store:
-                       if (get_Store_ptr(succ) == n)
-                               return 0;
+                       if (get_Store_value(succ) == n)
+                               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) {