The arch-specific SSA backends now no longer use gc.Sym either.
Passes toolstash -cmp.
Change-Id: Ic13b934b92a1b89b4b79c6c4796ab0a137608163
Reviewed-on: https://go-review.googlesource.com/36416
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
q.To.Reg = r
}
case ssa.OpAMD64CALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p.To.Type = obj.TYPE_REG
p.To.Reg = v.Reg()
case ssa.OpARMCALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p4.To.Type = obj.TYPE_BRANCH
gc.Patch(p4, p)
case ssa.OpARM64CALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
var (
staticbytes,
- zerobase,
+ zerobase *Node
+
Newproc,
Deferproc,
Deferreturn,
assertE2I,
assertE2I2,
assertI2I,
- assertI2I2 *Node
+ assertI2I2 *obj.LSym
)
func compile(fn *Node) {
if Newproc == nil {
- Newproc = Sysfunc("newproc")
- Deferproc = Sysfunc("deferproc")
- Deferreturn = Sysfunc("deferreturn")
- panicindex = Sysfunc("panicindex")
- panicslice = Sysfunc("panicslice")
- panicdivide = Sysfunc("panicdivide")
- growslice = Sysfunc("growslice")
- panicdottype = Sysfunc("panicdottype")
- panicnildottype = Sysfunc("panicnildottype")
- assertE2I = Sysfunc("assertE2I")
- assertE2I2 = Sysfunc("assertE2I2")
- assertI2I = Sysfunc("assertI2I")
- assertI2I2 = Sysfunc("assertI2I2")
+ Newproc = Linksym(Sysfunc("newproc").Sym)
+ Deferproc = Linksym(Sysfunc("deferproc").Sym)
+ Deferreturn = Linksym(Sysfunc("deferreturn").Sym)
+ panicindex = Linksym(Sysfunc("panicindex").Sym)
+ panicslice = Linksym(Sysfunc("panicslice").Sym)
+ panicdivide = Linksym(Sysfunc("panicdivide").Sym)
+ growslice = Linksym(Sysfunc("growslice").Sym)
+ panicdottype = Linksym(Sysfunc("panicdottype").Sym)
+ panicnildottype = Linksym(Sysfunc("panicnildottype").Sym)
+ assertE2I = Linksym(Sysfunc("assertE2I").Sym)
+ assertE2I2 = Linksym(Sysfunc("assertE2I2").Sym)
+ assertI2I = Linksym(Sysfunc("assertI2I").Sym)
+ assertI2I2 = Linksym(Sysfunc("assertI2I2").Sym)
}
defer func(lno src.XPos) {
}
type funcLine struct {
- f *Node
+ f *obj.LSym
line src.XPos
}
}
// If cmp (a bool) is false, panic using the given function.
-func (s *state) check(cmp *ssa.Value, fn *Node) {
+func (s *state) check(cmp *ssa.Value, fn *obj.LSym) {
b := s.endBlock()
b.Kind = ssa.BlockIf
b.SetControl(cmp)
// Returns a slice of results of the given result types.
// The call is added to the end of the current block.
// If returns is false, the block is marked as an exit block.
-func (s *state) rtcall(fn *Node, returns bool, results []*Type, args ...*ssa.Value) []*ssa.Value {
+func (s *state) rtcall(fn *obj.LSym, returns bool, results []*Type, args ...*ssa.Value) []*ssa.Value {
// Write args to the stack
off := Ctxt.FixedFrameSize()
for _, arg := range args {
}
// Issue call
- call := s.newValue1A(ssa.OpStaticCall, ssa.TypeMem, Linksym(fn.Sym), s.mem())
+ call := s.newValue1A(ssa.OpStaticCall, ssa.TypeMem, fn, s.mem())
s.vars[&memVar] = call
if !returns {
// extendIndex extends v to a full int width.
// panic using the given function if v does not fit in an int (only on 32-bit archs).
-func (s *state) extendIndex(v *ssa.Value, panicfn *Node) *ssa.Value {
+func (s *state) extendIndex(v *ssa.Value, panicfn *obj.LSym) *ssa.Value {
size := v.Type.Size()
if size == s.config.IntSize {
return v
p6.To.Type = obj.TYPE_BRANCH
gc.Patch(p6, p2)
case ssa.OpMIPSCALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p6.To.Type = obj.TYPE_BRANCH
gc.Patch(p6, p2)
case ssa.OpMIPS64CALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
gc.Patch(p4, p)
case ssa.OpPPC64CALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p.To.Type = obj.TYPE_REG
p.To.Reg = r
case ssa.OpS390XCALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
q.To.Reg = r
}
case ssa.Op386CALLstatic:
- if v.Aux.(*obj.LSym) == gc.Linksym(gc.Deferreturn.Sym) {
+ if v.Aux.(*obj.LSym) == gc.Deferreturn {
// Deferred calls will appear to be returning to
// the CALL deferreturn(SB) that we are about to emit.
// However, the stack trace code will show the line
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Deferproc.Sym)
+ p.To.Sym = gc.Deferproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}
p := gc.Prog(obj.ACALL)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
- p.To.Sym = gc.Linksym(gc.Newproc.Sym)
+ p.To.Sym = gc.Newproc
if gc.Maxarg < v.AuxInt {
gc.Maxarg = v.AuxInt
}