- more work on the Unknown problems: the only
[libfirm] / ir / opt / ldst2.c
index deed71c..4184e30 100644 (file)
  * @author  Christoph Mallon
  * @version $Id: $
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
 
 #include "iroptimize.h"
 
-#include "array.h"
+#include "array_t.h"
 #include "debug.h"
 #include "ircons.h"
 #include "irgraph.h"
@@ -165,6 +163,14 @@ static ir_alias_relation AliasTest(ir_graph* irg, ir_node* addr, ir_mode* mode,
 }
 
 
+static int in_cmp(void const* va, void const* vb)
+{
+       ir_node const* const a = *(ir_node const*const*)va;
+       ir_node const* const b = *(ir_node const*const*)vb;
+       return get_irn_idx(a) - get_irn_idx(b);
+}
+
+
 static ir_node* GenerateSync(ir_graph* irg, ir_node* block, ir_nodeset_t* after_set)
 {
        size_t set_size = ir_nodeset_size(after_set);
@@ -183,6 +189,7 @@ static ir_node* GenerateSync(ir_graph* irg, ir_node* block, ir_nodeset_t* after_
                for (i = 0; i < set_size; i++) {
                        in[i] = ir_nodeset_iterator_next(&iter);
                }
+               qsort(in, set_size, sizeof(*in), in_cmp);
                return new_r_Sync(irg, block, set_size, in);
        }
 }
@@ -361,7 +368,7 @@ static int WalkMem(ir_graph* irg, ir_node* node, ir_node* last_block)
        if (block != last_block) {
                DB((dbg, LEVEL_3, "===> Changing block from %+F to %+F\n", last_block, block));
                block_change = 1;
-               if (Block_not_block_visited(block)) {
+               if (!Block_block_visited(block)) {
                        mark_Block_block_visited(block);
                } else {
                        DB((dbg, LEVEL_2, "===> Hit already visited block at %+F\n", node));
@@ -401,7 +408,7 @@ static int WalkMem(ir_graph* irg, ir_node* node, ir_node* last_block)
                                ir_node* unknown;
 
                                DB((dbg, LEVEL_3, "===> The predecessor was not finished yet\n"));
-                               assert(!Block_not_block_visited(pred_block));
+                               assert(Block_block_visited(pred_block));
 
                                unknown = new_r_Unknown(irg, mode_M);
                                for (i = 0; i < count_addrs; i++) {
@@ -516,7 +523,7 @@ static void Detotalise(ir_graph* irg)
        size_t npreds = get_Block_n_cfgpreds(end_block);
        size_t i;
 
-       unfinished_phis = xmalloc(sizeof(*unfinished_phis) * count_addrs);
+       unfinished_phis = XMALLOCN(ir_node, count_addrs);
        for (i = 0; i < count_addrs; i++) {
                unfinished_phis[i] = NULL;
        }
@@ -779,7 +786,7 @@ static void walker(ir_node *proj, void *env)
        }
 
        n = ir_nodeset_size(&pi.user_mem);
-       if (n != 0) { /* nothing happend otherwise */
+       if (n != 0) { /* nothing happened otherwise */
                ir_graph               *irg  = current_ir_graph;
                ir_node                *sync;
                ir_node               **in;
@@ -829,12 +836,12 @@ static void walker(ir_node *proj, void *env)
 }
 
 
-void opt_ldst2(ir_graph *irg)
+void opt_sync(ir_graph *irg)
 {
-       assure_irg_address_taken_computed(irg);
-       assure_irp_globals_address_taken_computed();
+       //assure_irg_entity_usage_computed(irg);
+       //assure_irp_globals_entity_usage_computed();
 
        irg_walk_graph(irg, NULL, walker, NULL);
-  //optimize_graph_df(irg);
+       //optimize_graph_df(irg);
        //irg_walk_graph(irg, NormaliseSync, NULL, NULL);
 }