mirror of
https://github.com/golang/go
synced 2024-10-05 18:31:28 -06:00
[dev.ssa] cmd/compile: schedule values dependent on the control later
To reduce the number of spills, give any non-phi values whose argument is the control the same priority as the control. With mask.bash, this reduces regenerated flags from 603 to 240. Change-Id: I26883d69e80357c56b343428fb528102b3f26e7a Reviewed-on: https://go-review.googlesource.com/14042 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
3b7f0c9cba
commit
21e6a055c1
@ -89,9 +89,21 @@ func schedule(f *Func) {
|
||||
// Force the control value to be scheduled at the end,
|
||||
// unless it is a phi value (which must be first).
|
||||
score[b.Control.ID] = 4
|
||||
// TODO: some times control values are used by other values
|
||||
// in the block. So the control value will not appear at
|
||||
// the very end. Decide if this is a problem or not.
|
||||
|
||||
// Schedule values dependent on the control value at the end.
|
||||
// This reduces the number of register spills. We don't find
|
||||
// all values that depend on the control, just values with a
|
||||
// direct dependency. This is cheaper and in testing there
|
||||
// was no difference in the number of spills.
|
||||
for _, v := range b.Values {
|
||||
if v.Op != OpPhi {
|
||||
for _, a := range v.Args {
|
||||
if a == b.Control {
|
||||
score[v.ID] = 4
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize priority queue with schedulable values.
|
||||
|
Loading…
Reference in New Issue
Block a user