Commit cff0c6ad authored by Todd Neal's avatar Todd Neal

[dev.ssa] cmd/compile: add instrumentation to regalloc

Change-Id: Ice206f7e94af4a148d9dd9a7570f5ed21722bedc
Reviewed-on: https://go-review.googlesource.com/14075Reviewed-by: default avatarJosh Bleecher Snyder <josharian@gmail.com>
parent 451eca22
......@@ -105,6 +105,7 @@ import (
)
const regDebug = false
const logSpills = false
// regalloc performs register allocation on f. It sets f.RegAlloc
// to the resulting allocation.
......@@ -402,6 +403,9 @@ func (s *regAllocState) allocValToReg(v *Value, mask regMask, nospill bool) *Val
// Instead, we regenerate the flags register by issuing the same instruction again.
// This requires (possibly) spilling and reloading that instruction's args.
case v.Type.IsFlags():
if logSpills {
fmt.Println("regalloc: regenerating flags")
}
ns := s.nospill
// Place v's arguments in registers, spilling and loading as needed
args := make([]*Value, 0, len(v.Args))
......@@ -429,9 +433,15 @@ func (s *regAllocState) allocValToReg(v *Value, mask regMask, nospill bool) *Val
// Load v from its spill location.
// TODO: rematerialize if we can.
case vi.spill2 != nil:
if logSpills {
fmt.Println("regallog: load spill2")
}
c = s.curBlock.NewValue1(v.Line, OpLoadReg, v.Type, vi.spill2)
vi.spill2used = true
case vi.spill != nil:
if logSpills {
fmt.Println("regalloc: load spill")
}
c = s.curBlock.NewValue1(v.Line, OpLoadReg, v.Type, vi.spill)
vi.spillUsed = true
default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment