From: Josh Bleecher Snyder Date: Wed, 5 Aug 2015 23:07:13 +0000 (-0700) Subject: [dev.ssa] cmd/compile: schedule phi control values first X-Git-Tag: go1.7beta1~1623^2^2~301 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=f1401f1a1084327c4f24a4403dbc7003867ee009;p=gostls13.git [dev.ssa] cmd/compile: schedule phi control values first Change-Id: I684440dc316625d5572cc12179adbc206e306429 Reviewed-on: https://go-review.googlesource.com/13263 Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go index d1596f25e8..9c8e9a1156 100644 --- a/src/cmd/compile/internal/ssa/schedule.go +++ b/src/cmd/compile/internal/ssa/schedule.go @@ -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