mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.typeparams] cmd/compile: simplify SSA devirtualization
This CL implements a few improvements to SSA devirtualization to make it simpler and more general: 1. Change reflectdata.ITabAddr to now immediately generate the wrapper functions and write out the itab symbol data. Previously, these were each handled by separate phases later on. 2. Removes the hack in typecheck where we marked itabs that we expected to need later. Instead, the calls to ITabAddr in walk now handle generating the wrappers. 3. Changes the SSA interface call devirtualization algorithm to just use the itab symbol data (namely, its relocations) to figure out what pointer is available in memory at the given offset. This decouples it somewhat from reflectdata. Change-Id: I8fe06922af8f8a1e7c93f5aff2b60ff59b8e7114 Reviewed-on: https://go-review.googlesource.com/c/go/+/327871 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Trust: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
132ea56d29
commit
dd95a4e3db
9 changed files with 92 additions and 189 deletions
|
|
@ -149,12 +149,6 @@ type Frontend interface {
|
|||
// for the parts of that compound type.
|
||||
SplitSlot(parent *LocalSlot, suffix string, offset int64, t *types.Type) LocalSlot
|
||||
|
||||
// DerefItab dereferences an itab function
|
||||
// entry, given the symbol of the itab and
|
||||
// the byte offset of the function pointer.
|
||||
// It may return nil.
|
||||
DerefItab(sym *obj.LSym, offset int64) *obj.LSym
|
||||
|
||||
// Line returns a string describing the given position.
|
||||
Line(src.XPos) string
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue