Commit 9dc351be authored by Heschi Kreinick's avatar Heschi Kreinick

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: default avatarDavid Chase <drchase@google.com>
parent caa1b4af
...@@ -790,24 +790,24 @@ func (state *debugState) buildLocationLists(blockLocs []*BlockDebug) { ...@@ -790,24 +790,24 @@ func (state *debugState) buildLocationLists(blockLocs []*BlockDebug) {
state.mergePredecessors(b, blockLocs) state.mergePredecessors(b, blockLocs)
phisPending := false zeroWidthPending := false
for _, v := range b.Values { for _, v := range b.Values {
slots := state.valueNames[v.ID] slots := state.valueNames[v.ID]
reg, _ := state.f.getHome(v.ID).(*Register) reg, _ := state.f.getHome(v.ID).(*Register)
changed := state.processValue(v, slots, reg) changed := state.processValue(v, slots, reg)
if v.Op == OpPhi { if opcodeTable[v.Op].zeroWidth {
if changed { if changed {
phisPending = true zeroWidthPending = true
} }
continue continue
} }
if !changed && !phisPending { if !changed && !zeroWidthPending {
continue continue
} }
phisPending = false zeroWidthPending = false
for _, varID := range state.changedVars.contents() { for _, varID := range state.changedVars.contents() {
state.updateVar(VarID(varID), v, state.currentState.slots) state.updateVar(VarID(varID), v, state.currentState.slots)
} }
......
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