- workround for inline of got inlined: we cannot
[libfirm] / ir / opt / ldstopt.c
index 6d42668..b67bafe 100644 (file)
@@ -586,7 +586,7 @@ static unsigned follow_Mem_chain(ir_node *load, ir_node *curr) {
                                get_irn_mode(get_Store_value(pred)),
                                ptr, load_mode);
                        /* if the might be an alias, we cannot pass this Store */
-                       if (rel != no_alias)
+                       if (rel != ir_no_alias)
                                break;
                        pred = skip_Proj(get_Store_mem(pred));
                } else if (is_Load(pred)) {
@@ -782,7 +782,7 @@ static unsigned optimize_load(ir_node *load)
                                } else {
                                        compound_graph_path *path = get_accessed_path(ptr);
 
-                                       if (path) {
+                                       if (path && !ent->has_initializer) {
                                                ir_node *c;
 
                                                assert(is_proper_compound_graph_path(path, get_compound_graph_path_length(path)-1));
@@ -887,7 +887,7 @@ static unsigned follow_Mem_chain_for_Store(ir_node *store, ir_node *curr) {
                    get_nodes_MacroBlock(pred) == mblk &&
                    is_completely_overwritten(get_irn_mode(get_Store_value(pred)), mode)) {
                        /*
-                        * a Store after a Store in the same block -- a write after write.
+                        * a Store after a Store in the same MacroBlock -- a write after write.
                         * We may remove the first Store, if it does not have an exception handler.
                         *
                         * TODO: What, if both have the same exception handler ???
@@ -924,14 +924,14 @@ static unsigned follow_Mem_chain_for_Store(ir_node *store, ir_node *curr) {
                                get_irn_mode(get_Store_value(pred)),
                                ptr, mode);
                        /* if the might be an alias, we cannot pass this Store */
-                       if (rel != no_alias)
+                       if (rel != ir_no_alias)
                                break;
                        pred = skip_Proj(get_Store_mem(pred));
                } else if (get_irn_op(pred) == op_Load) {
                        ir_alias_relation rel = get_alias_relation(
                                current_ir_graph, get_Load_ptr(pred), get_Load_mode(pred),
                                ptr, mode);
-                       if (rel != no_alias)
+                       if (rel != ir_no_alias)
                                break;
 
                        pred = skip_Proj(get_Load_mem(pred));
@@ -981,6 +981,7 @@ static unsigned optimize_store(ir_node *store) {
 
        /* follow the memory chain as long as there are only Loads */
        INC_MASTER();
+
        return follow_Mem_chain_for_Store(store, skip_Proj(mem));
 }  /* optimize_store */
 
@@ -1375,7 +1376,7 @@ static void move_loads_out_of_loops(scc *pscc, loop_env *env) {
                                                get_irn_mode(get_Store_value(other)),
                                                ptr, load_mode);
                                        /* if the might be an alias, we cannot pass this Store */
-                                       if (rel != no_alias)
+                                       if (rel != ir_no_alias)
                                                break;
                                }
                                /* only pure Calls are allowed here, so ignore them */