mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile/internal/ssa: batch up all zero-width instructions
When generating location lists, batch up changes for all zero-width instructions, not just phis. This prevents the creation of location list entries that don't actually cover any instructions. This isn't perfect because of the caveats in the prior CL (Copy is zero-width sometimes) but in practice this seems to fix all of the empty lists in std. Change-Id: Ice4a9ade36b6b24ca111d1494c414eec96e5af25 Reviewed-on: https://go-review.googlesource.com/97958 Run-TryBot: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
caa1b4afbd
commit
9dc351beba
1 changed files with 5 additions and 5 deletions
|
|
@ -790,24 +790,24 @@ func (state *debugState) buildLocationLists(blockLocs []*BlockDebug) {
|
|||
|
||||
state.mergePredecessors(b, blockLocs)
|
||||
|
||||
phisPending := false
|
||||
zeroWidthPending := false
|
||||
for _, v := range b.Values {
|
||||
slots := state.valueNames[v.ID]
|
||||
reg, _ := state.f.getHome(v.ID).(*Register)
|
||||
changed := state.processValue(v, slots, reg)
|
||||
|
||||
if v.Op == OpPhi {
|
||||
if opcodeTable[v.Op].zeroWidth {
|
||||
if changed {
|
||||
phisPending = true
|
||||
zeroWidthPending = true
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
if !changed && !phisPending {
|
||||
if !changed && !zeroWidthPending {
|
||||
continue
|
||||
}
|
||||
|
||||
phisPending = false
|
||||
zeroWidthPending = false
|
||||
for _, varID := range state.changedVars.contents() {
|
||||
state.updateVar(VarID(varID), v, state.currentState.slots)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue