]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/walk: merge operations when calling ir.NewSlic…
authorcuiweixie <cuiweixie@gmail.com>
Thu, 29 Apr 2021 14:28:43 +0000 (14:28 +0000)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 29 Apr 2021 17:38:15 +0000 (17:38 +0000)
Change-Id: I55ef35a9d8157063c4a41b23cd1ac0002838d30a
GitHub-Last-Rev: e716c5200545a944313ae0d995fcb6eb17d2720e
GitHub-Pull-Request: golang/go#45814
Reviewed-on: https://go-review.googlesource.com/c/go/+/314569
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/walk/builtin.go

index 684fc7d72a9d24bd576964924df165b5a029e706..aacdedcb4d5f02e3fff751f77c1e87f9c8d41224 100644 (file)
@@ -421,16 +421,13 @@ func walkMakeSlice(n *ir.MakeExpr, init *ir.Nodes) ir.Node {
                fnname = "makeslice"
                argtype = types.Types[types.TINT]
        }
-
-       m := ir.NewSliceHeaderExpr(base.Pos, nil, nil, nil, nil)
-       m.SetType(t)
-
        fn := typecheck.LookupRuntime(fnname)
-       m.Ptr = mkcall1(fn, types.Types[types.TUNSAFEPTR], init, reflectdata.TypePtr(t.Elem()), typecheck.Conv(len, argtype), typecheck.Conv(cap, argtype))
-       m.Ptr.MarkNonNil()
-       m.Len = typecheck.Conv(len, types.Types[types.TINT])
-       m.Cap = typecheck.Conv(cap, types.Types[types.TINT])
-       return walkExpr(typecheck.Expr(m), init)
+       ptr := mkcall1(fn, types.Types[types.TUNSAFEPTR], init, reflectdata.TypePtr(t.Elem()), typecheck.Conv(len, argtype), typecheck.Conv(cap, argtype))
+       ptr.MarkNonNil()
+       len = typecheck.Conv(len, types.Types[types.TINT])
+       cap = typecheck.Conv(cap, types.Types[types.TINT])
+       sh := ir.NewSliceHeaderExpr(base.Pos, t, ptr, len, cap)
+       return walkExpr(typecheck.Expr(sh), init)
 }
 
 // walkMakeSliceCopy walks an OMAKESLICECOPY node.
@@ -459,12 +456,9 @@ func walkMakeSliceCopy(n *ir.MakeExpr, init *ir.Nodes) ir.Node {
 
                // instantiate mallocgc(size uintptr, typ *byte, needszero bool) unsafe.Pointer
                fn := typecheck.LookupRuntime("mallocgc")
-               sh := ir.NewSliceHeaderExpr(base.Pos, nil, nil, nil, nil)
-               sh.Ptr = mkcall1(fn, types.Types[types.TUNSAFEPTR], init, size, typecheck.NodNil(), ir.NewBool(false))
-               sh.Ptr.MarkNonNil()
-               sh.Len = length
-               sh.Cap = length
-               sh.SetType(t)
+               ptr := mkcall1(fn, types.Types[types.TUNSAFEPTR], init, size, typecheck.NodNil(), ir.NewBool(false))
+               ptr.MarkNonNil()
+               sh := ir.NewSliceHeaderExpr(base.Pos, t, ptr, length, length)
 
                s := typecheck.Temp(t)
                r := typecheck.Stmt(ir.NewAssignStmt(base.Pos, s, sh))
@@ -482,13 +476,10 @@ func walkMakeSliceCopy(n *ir.MakeExpr, init *ir.Nodes) ir.Node {
        // Replace make+copy with runtime.makeslicecopy.
        // instantiate makeslicecopy(typ *byte, tolen int, fromlen int, from unsafe.Pointer) unsafe.Pointer
        fn := typecheck.LookupRuntime("makeslicecopy")
-       s := ir.NewSliceHeaderExpr(base.Pos, nil, nil, nil, nil)
-       s.Ptr = mkcall1(fn, types.Types[types.TUNSAFEPTR], init, reflectdata.TypePtr(t.Elem()), length, copylen, typecheck.Conv(copyptr, types.Types[types.TUNSAFEPTR]))
-       s.Ptr.MarkNonNil()
-       s.Len = length
-       s.Cap = length
-       s.SetType(t)
-       return walkExpr(typecheck.Expr(s), init)
+       ptr := mkcall1(fn, types.Types[types.TUNSAFEPTR], init, reflectdata.TypePtr(t.Elem()), length, copylen, typecheck.Conv(copyptr, types.Types[types.TUNSAFEPTR]))
+       ptr.MarkNonNil()
+       sh := ir.NewSliceHeaderExpr(base.Pos, t, ptr, length, length)
+       return walkExpr(typecheck.Expr(sh), init)
 }
 
 // walkNew walks an ONEW node.