mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.ssa] cmd/compile: allocate the flag register in a separate pass
Spilling/restoring flag values is a pain to do during regalloc. Instead, allocate the flag register in a separate pass. Regalloc then operates normally on any flag recomputation instructions. Change-Id: Ia1c3d9e6eff678861193093c0b48a00f90e4156b Reviewed-on: https://go-review.googlesource.com/17694 Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
09ffa0c4c7
commit
c140df0326
6 changed files with 162 additions and 50 deletions
|
|
@ -97,9 +97,10 @@ var passes = [...]pass{
|
|||
{"lowered cse", cse},
|
||||
{"lowered deadcode", deadcode},
|
||||
{"checkLower", checkLower},
|
||||
{"critical", critical}, // remove critical edges
|
||||
{"layout", layout}, // schedule blocks
|
||||
{"schedule", schedule}, // schedule values
|
||||
{"critical", critical}, // remove critical edges
|
||||
{"layout", layout}, // schedule blocks
|
||||
{"schedule", schedule}, // schedule values
|
||||
{"flagalloc", flagalloc}, // allocate flags register
|
||||
{"regalloc", regalloc},
|
||||
{"stackalloc", stackalloc},
|
||||
}
|
||||
|
|
@ -142,6 +143,10 @@ var passOrder = [...]constraint{
|
|||
// checkLower must run after lowering & subsequent dead code elim
|
||||
{"lower", "checkLower"},
|
||||
{"lowered deadcode", "checkLower"},
|
||||
// flagalloc needs instructions to be scheduled.
|
||||
{"schedule", "flagalloc"},
|
||||
// regalloc needs flags to be allocated first.
|
||||
{"flagalloc", "regalloc"},
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue