diff options
author | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-01-17 00:38:54 +0700 |
---|---|---|
committer | Cuong Manh Le <cuong.manhle.vn@gmail.com> | 2021-01-17 06:37:42 +0000 |
commit | 82b9cae700d844857b24b31f40a51283fbdd6dd5 (patch) | |
tree | 41d33cdd291b059f7620420e16d7b1c44ff4c8ba /src/cmd/compile/internal/ir/expr.go | |
parent | 88956fc4b1a44efe847fa07a8ebc21a49ff811e1 (diff) | |
download | go-git-82b9cae700d844857b24b31f40a51283fbdd6dd5.tar.gz |
[dev.regabi] cmd/compile: change ir.NameOffsetExpr to use *obj.LSym instead of *Name
Because NameOffsetExpr is always used with global variables, and SSA
backend only needs (*Name).Linksym() to generate value for them.
Passes toolstash -cmp.
Updates #43737
Change-Id: I17209e21383edb766070c0accd1fa4660659caef
Reviewed-on: https://go-review.googlesource.com/c/go/+/284119
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Diffstat (limited to 'src/cmd/compile/internal/ir/expr.go')
-rw-r--r-- | src/cmd/compile/internal/ir/expr.go | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/cmd/compile/internal/ir/expr.go b/src/cmd/compile/internal/ir/expr.go index e24b2d5b2c..a3356d432a 100644 --- a/src/cmd/compile/internal/ir/expr.go +++ b/src/cmd/compile/internal/ir/expr.go @@ -8,6 +8,7 @@ import ( "bytes" "cmd/compile/internal/base" "cmd/compile/internal/types" + "cmd/internal/obj" "cmd/internal/src" "fmt" "go/constant" @@ -461,22 +462,26 @@ func NewResultExpr(pos src.XPos, typ *types.Type, offset int64) *ResultExpr { return n } -// A NameOffsetExpr refers to an offset within a variable. +// A NameOffsetExpr refers to an offset within a global variable. // It is like a SelectorExpr but without the field name. type NameOffsetExpr struct { miniExpr - Name_ *Name + Linksym *obj.LSym Offset_ int64 } +func NewLinksymOffsetExpr(pos src.XPos, lsym *obj.LSym, offset int64, typ *types.Type) *NameOffsetExpr { + n := &NameOffsetExpr{Linksym: lsym, Offset_: offset} + n.typ = typ + n.op = ONAMEOFFSET + return n +} + func NewNameOffsetExpr(pos src.XPos, name *Name, offset int64, typ *types.Type) *NameOffsetExpr { if name == nil || IsBlank(name) || !(name.Op() == ONAME && name.Class == PEXTERN) { base.FatalfAt(pos, "cannot take offset of nil, blank name or non-global variable: %v", name) } - n := &NameOffsetExpr{Name_: name, Offset_: offset} - n.typ = typ - n.op = ONAMEOFFSET - return n + return NewLinksymOffsetExpr(pos, name.Linksym(), offset, typ) } // A SelectorExpr is a selector expression X.Sel. |