Much more aggressive splitting.
authorDavid Given <dg@cowlark.com>
Tue, 13 Dec 2016 23:26:58 +0000 (00:26 +0100)
committerDavid Given <dg@cowlark.com>
Tue, 13 Dec 2016 23:26:58 +0000 (00:26 +0100)
mach/proto/mcg/pass_splitliveranges.c

index 50417d5..b64ad55 100644 (file)
@@ -94,6 +94,12 @@ void pass_split_live_ranges(void)
     {
         current_bb = dominance.preorder.item[i];
 
+        for (j=0; j<current_bb->phis.count; j++)
+        {
+            struct vreg* vreg = current_bb->phis.item[j].left;
+            insert_move_after(0, vreg);
+        }
+
         for (j=0; j<current_bb->hops.count; j++)
         {
             struct hop* hop = current_bb->hops.item[j];
@@ -111,6 +117,12 @@ void pass_split_live_ranges(void)
                     struct vreg* vreg = hop->outs.item[k];
                     insert_move_after(j, vreg);
                 }
+
+                for (k=0; k<hop->ins.count; k++)
+                {
+                    struct vreg* vreg = hop->ins.item[k];
+                    j += insert_move_after(j, vreg);
+                }
             }
         }
     }