]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.ssa] cmd/compile: schedule phi control values first
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 5 Aug 2015 23:07:13 +0000 (16:07 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 6 Aug 2015 17:26:34 +0000 (17:26 +0000)
Change-Id: I684440dc316625d5572cc12179adbc206e306429
Reviewed-on: https://go-review.googlesource.com/13263
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/schedule.go

index d1596f25e8170d993b4d231aeac5d790ddac1bfe..9c8e9a11569f721be42e3ca28c4db50aaed8ff66 100644 (file)
@@ -15,7 +15,7 @@ func schedule(f *Func) {
        uses := make([]int, f.NumValues())
 
        // "priority" for a value
-       score := make([]int, f.NumValues())
+       score := make([]uint8, f.NumValues())
 
        // scheduling order.  We queue values in this list in reverse order.
        var order []*Value
@@ -57,8 +57,9 @@ func schedule(f *Func) {
                                score[v.ID] = 1
                        }
                }
-               if b.Control != nil {
-                       // Force the control value to be scheduled at the end.
+               if b.Control != nil && b.Control.Op != OpPhi {
+                       // Force the control value to be scheduled at the end,
+                       // unless it is a phi value (which must be first).
                        score[b.Control.ID] = 3
                        // TODO: some times control values are used by other values
                        // in the block.  So the control value will not appear at