]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: enable late expansion for address-of static calls
authorDavid Chase <drchase@google.com>
Wed, 5 Aug 2020 15:42:44 +0000 (11:42 -0400)
committerDavid Chase <drchase@google.com>
Thu, 1 Oct 2020 17:46:30 +0000 (17:46 +0000)
passes run.bash and race.bash (on Darwin-amd64)

Change-Id: I2abda9636b681d050e85e88fc357ebe5220d2ba2
Reviewed-on: https://go-review.googlesource.com/c/go/+/246938
Trust: David Chase <drchase@google.com>
Run-TryBot: David Chase <drchase@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/compile/internal/gc/ssa.go

index aebb40568c4336c2113f97fd96fe862657564370..e2fbd6f096c99190b5f87abe221427c949eddb81 100644 (file)
@@ -4376,7 +4376,7 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
        case OCALLFUNC:
                if k == callNormal && fn.Op == ONAME && fn.Class() == PFUNC {
                        sym = fn.Sym
-                       if !returnResultAddr && ssa.LateCallExpansionEnabledWithin(s.f) {
+                       if ssa.LateCallExpansionEnabledWithin(s.f) {
                                testLateExpansion = true
                        }
                        break
@@ -4393,7 +4393,7 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
                }
                if k == callNormal {
                        sym = fn.Sym
-                       if !returnResultAddr && ssa.LateCallExpansionEnabledWithin(s.f) {
+                       if ssa.LateCallExpansionEnabledWithin(s.f) {
                                testLateExpansion = true
                        }
                        break
@@ -4605,7 +4605,11 @@ func (s *state) call(n *Node, k callKind, returnResultAddr bool) *ssa.Value {
        }
        fp := res.Field(0)
        if returnResultAddr {
-               return s.constOffPtrSP(types.NewPtr(fp.Type), fp.Offset+Ctxt.FixedFrameSize())
+               pt := types.NewPtr(fp.Type)
+               if testLateExpansion {
+                       return s.newValue1I(ssa.OpSelectNAddr, pt, 0, call)
+               }
+               return s.constOffPtrSP(pt, fp.Offset+Ctxt.FixedFrameSize())
        }
 
        if testLateExpansion {