sparc: be more conservative when moving memops around
authorMatthias Braun <matze@braunis.de>
Fri, 31 Aug 2012 11:33:07 +0000 (13:33 +0200)
committerMatthias Braun <matze@braunis.de>
Fri, 31 Aug 2012 11:33:25 +0000 (13:33 +0200)
ir/be/bepeephole.c

index d58171d..cc26a63 100644 (file)
@@ -303,6 +303,14 @@ bool be_can_move_up(ir_heights_t *heights, const ir_node *node,
                /* currently we can move up exactly 1 block */
                assert(get_Block_cfgpred_block(node_block, 0) == after_block);
                ir_node *first = sched_first(node_block);
+
+               /* do not move nodes changing memory */
+               if (is_memop(node)) {
+                       ir_node *meminput = get_memop_mem(node);
+                       if (!is_NoMem(meminput))
+                               return false;
+               }
+
                /* make sure we can move to the beginning of the succ block */
                if (node != first && !be_can_move_up(heights, node, sched_prev(first)))
                        return false;