aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/gc/main.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2020-10-28 18:49:10 -0700
committerMatthew Dempsky <mdempsky@google.com>2020-10-29 19:06:32 +0000
commit5cc43c51c9929ce089ce2fc17a0f5631d21cd27d (patch)
treed6da90485c9da69adba6546839390c871e865144 /src/cmd/compile/internal/gc/main.go
parentf2c0c2b90200b470c39a2db821b7c707604fe083 (diff)
downloadgo-5cc43c51c9929ce089ce2fc17a0f5631d21cd27d.tar.gz
go-5cc43c51c9929ce089ce2fc17a0f5631d21cd27d.zip
cmd/compile: early devirtualization of interface method calls
After inlining, add a pass that looks for interface calls where we can statically determine the interface value's concrete type. If such a case is found, insert an explicit type assertion to the concrete type so that escape analysis can see it. Fixes #33160. Change-Id: I36932c691693f0069e34384086d63133e249b06b Reviewed-on: https://go-review.googlesource.com/c/go/+/264837 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/cmd/compile/internal/gc/main.go')
-rw-r--r--src/cmd/compile/internal/gc/main.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go
index 4b401f2aa4..8b94c7f71b 100644
--- a/src/cmd/compile/internal/gc/main.go
+++ b/src/cmd/compile/internal/gc/main.go
@@ -701,6 +701,13 @@ func Main(archInit func(*Arch)) {
})
}
+ for _, n := range xtop {
+ if n.Op == ODCLFUNC {
+ devirtualize(n)
+ }
+ }
+ Curfn = nil
+
// Phase 6: Escape analysis.
// Required for moving heap allocations onto stack,
// which in turn is required by the closure implementation,