mirror of
https://github.com/golang/go
synced 2024-09-29 14:14:29 -06:00
cmd/compile: some minor cleanups
Change-Id: Icdf3320814ad4a86a5ae532f4fcb899da3f46ae3 Reviewed-on: https://go-review.googlesource.com/c/go/+/248186 Trust: David Chase <drchase@google.com> Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
33511fb959
commit
51690f777c
@ -4375,9 +4375,7 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
|
|||||||
|
|
||||||
switch n.Op {
|
switch n.Op {
|
||||||
case OCALLFUNC:
|
case OCALLFUNC:
|
||||||
if k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f) {
|
testLateExpansion = k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f)
|
||||||
testLateExpansion = true
|
|
||||||
}
|
|
||||||
if k == callNormal && fn.Op == ONAME && fn.Class() == PFUNC {
|
if k == callNormal && fn.Op == ONAME && fn.Class() == PFUNC {
|
||||||
sym = fn.Sym
|
sym = fn.Sym
|
||||||
break
|
break
|
||||||
@ -4392,9 +4390,7 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
|
|||||||
if fn.Op != ODOTMETH {
|
if fn.Op != ODOTMETH {
|
||||||
s.Fatalf("OCALLMETH: n.Left not an ODOTMETH: %v", fn)
|
s.Fatalf("OCALLMETH: n.Left not an ODOTMETH: %v", fn)
|
||||||
}
|
}
|
||||||
if k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f) {
|
testLateExpansion = k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f)
|
||||||
testLateExpansion = true
|
|
||||||
}
|
|
||||||
if k == callNormal {
|
if k == callNormal {
|
||||||
sym = fn.Sym
|
sym = fn.Sym
|
||||||
break
|
break
|
||||||
@ -4406,9 +4402,7 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
|
|||||||
if fn.Op != ODOTINTER {
|
if fn.Op != ODOTINTER {
|
||||||
s.Fatalf("OCALLINTER: n.Left not an ODOTINTER: %v", fn.Op)
|
s.Fatalf("OCALLINTER: n.Left not an ODOTINTER: %v", fn.Op)
|
||||||
}
|
}
|
||||||
if k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f) {
|
testLateExpansion = k != callDeferStack && ssa.LateCallExpansionEnabledWithin(s.f)
|
||||||
testLateExpansion = true
|
|
||||||
}
|
|
||||||
var iclosure *ssa.Value
|
var iclosure *ssa.Value
|
||||||
iclosure, rcvr = s.getClosureAndRcvr(fn)
|
iclosure, rcvr = s.getClosureAndRcvr(fn)
|
||||||
if k == callNormal {
|
if k == callNormal {
|
||||||
|
@ -39,7 +39,9 @@ func expandCalls(f *Func) {
|
|||||||
hiOffset = 4
|
hiOffset = 4
|
||||||
}
|
}
|
||||||
|
|
||||||
pairTypes := func(et types.EType) (tHi, tLo *types.Type) {
|
// intPairTypes returns the pair of 32-bit int types needed to encode a 64-bit integer type on a target
|
||||||
|
// that has no 64-bit integer registers.
|
||||||
|
intPairTypes := func(et types.EType) (tHi, tLo *types.Type) {
|
||||||
tHi = tUint32
|
tHi = tUint32
|
||||||
if et == types.TINT64 {
|
if et == types.TINT64 {
|
||||||
tHi = tInt32
|
tHi = tInt32
|
||||||
@ -147,8 +149,8 @@ func expandCalls(f *Func) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// storeArg converts stores of SSA-able aggregates into a series of stores of smaller types into
|
// storeArg converts stores of SSA-able aggregate arguments (passed to a call) into a series of stores of
|
||||||
// individual parameter slots.
|
// smaller types into individual parameter slots.
|
||||||
// TODO when registers really arrive, must also decompose anything split across two registers or registers and memory.
|
// TODO when registers really arrive, must also decompose anything split across two registers or registers and memory.
|
||||||
var storeArg func(pos src.XPos, b *Block, a *Value, t *types.Type, offset int64, mem *Value) *Value
|
var storeArg func(pos src.XPos, b *Block, a *Value, t *types.Type, offset int64, mem *Value) *Value
|
||||||
storeArg = func(pos src.XPos, b *Block, a *Value, t *types.Type, offset int64, mem *Value) *Value {
|
storeArg = func(pos src.XPos, b *Block, a *Value, t *types.Type, offset int64, mem *Value) *Value {
|
||||||
@ -165,7 +167,7 @@ func expandCalls(f *Func) {
|
|||||||
return storeArg(pos, b, a.Args[0], t.Elem(), offset, mem)
|
return storeArg(pos, b, a.Args[0], t.Elem(), offset, mem)
|
||||||
|
|
||||||
case OpInt64Make:
|
case OpInt64Make:
|
||||||
tHi, tLo := pairTypes(t.Etype)
|
tHi, tLo := intPairTypes(t.Etype)
|
||||||
mem = storeArg(pos, b, a.Args[0], tHi, offset+hiOffset, mem)
|
mem = storeArg(pos, b, a.Args[0], tHi, offset+hiOffset, mem)
|
||||||
return storeArg(pos, b, a.Args[1], tLo, offset+lowOffset, mem)
|
return storeArg(pos, b, a.Args[1], tLo, offset+lowOffset, mem)
|
||||||
}
|
}
|
||||||
@ -207,7 +209,7 @@ func expandCalls(f *Func) {
|
|||||||
if t.Width == regSize {
|
if t.Width == regSize {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
tHi, tLo := pairTypes(t.Etype)
|
tHi, tLo := intPairTypes(t.Etype)
|
||||||
sel := src.Block.NewValue1(pos, OpInt64Hi, tHi, src)
|
sel := src.Block.NewValue1(pos, OpInt64Hi, tHi, src)
|
||||||
mem = splitStore(dst, sel, mem, v, tHi, offset+hiOffset, firstStorePos)
|
mem = splitStore(dst, sel, mem, v, tHi, offset+hiOffset, firstStorePos)
|
||||||
firstStorePos = firstStorePos.WithNotStmt()
|
firstStorePos = firstStorePos.WithNotStmt()
|
||||||
@ -261,6 +263,9 @@ func expandCalls(f *Func) {
|
|||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rewriteArgs removes all the Args from a call and converts the call args into appropriate
|
||||||
|
// stores (or later, register movement). Extra args for interface and closure calls are ignored,
|
||||||
|
// but removed.
|
||||||
rewriteArgs := func(v *Value, firstArg int) *Value {
|
rewriteArgs := func(v *Value, firstArg int) *Value {
|
||||||
// Thread the stores on the memory arg
|
// Thread the stores on the memory arg
|
||||||
aux := v.Aux.(*AuxCall)
|
aux := v.Aux.(*AuxCall)
|
||||||
|
Loading…
Reference in New Issue
Block a user