]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile: inlining tweaks for toolstash
authorMatthew Dempsky <mdempsky@google.com>
Mon, 24 May 2021 11:41:58 +0000 (04:41 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 26 May 2021 23:50:54 +0000 (23:50 +0000)
This CL makes to minor changes motivated by making it easier to make
large-scale changes to the inliner while satisfying toolstash -cmp:

1. When creating inlining variables, make sure to preserve the
AutoTemp flag. This is necessary so that temporary variables
introduced by rewriting f(g()) calls during typecheck stay autotemp
after inlining and are (correctly) omitted from DWARF debugging
information.

2. When sorting variables for stack frame layout, use a stable
sort. This ensures that layout is insensitive to whether deadcode
elimination happens before or after inlining.

Change-Id: I672e752a873c7e16749b9873fd6573607e074309
Reviewed-on: https://go-review.googlesource.com/c/go/+/323011
Trust: Matthew Dempsky <mdempsky@google.com>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
src/cmd/compile/internal/inline/inl.go
src/cmd/compile/internal/ssagen/pgen.go

index 00f8447f059631b997923816f445ee696abffad5..042e3f2332a272b90608850f5a92ce82ee6e1c2e 100644 (file)
@@ -1029,6 +1029,7 @@ func inlvar(var_ *ir.Name) *ir.Name {
        n.SetType(var_.Type())
        n.Class = ir.PAUTO
        n.SetUsed(true)
+       n.SetAutoTemp(var_.AutoTemp())
        n.Curfn = ir.CurFunc // the calling function, not the called one
        n.SetAddrtaken(var_.Addrtaken())
 
index 62567535d76caccdd37e1fdea3996b51a0fac13c..93157bfa11b56a93592ce93dc9f0bf621b307782 100644 (file)
@@ -114,7 +114,10 @@ func (s *ssafn) AllocFrame(f *ssa.Func) {
                }
        }
 
-       sort.Sort(byStackVar(fn.Dcl))
+       // Use sort.Stable instead of sort.Sort so stack layout (and thus
+       // compiler output) is less sensitive to frontend changes that
+       // introduce or remove unused variables.
+       sort.Stable(byStackVar(fn.Dcl))
 
        // Reassign stack offsets of the locals that are used.
        lastHasPtr := false