]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/ssa: batch up all zero-width instructions
authorHeschi Kreinick <heschi@google.com>
Wed, 28 Feb 2018 22:53:31 +0000 (17:53 -0500)
committerHeschi Kreinick <heschi@google.com>
Fri, 2 Mar 2018 18:55:56 +0000 (18:55 +0000)
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>
src/cmd/compile/internal/ssa/debug.go

index 9750c4d0173aa0110a47ab27134f76f25cbf8ea7..3924f9341abeb1acde83fac0030a4cbc2e75d2c4 100644 (file)
@@ -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)
                        }