Skip to content

Commit

Permalink
all: make sure *Pointer[T]'s methods are inlined as intended
Browse files Browse the repository at this point in the history
Updates #50860

Change-Id: I65bced707e50364b16edf4b087c541cf19bb1778
Reviewed-on: https://go-review.googlesource.com/c/go/+/428362
Run-TryBot: Cuong Manh Le <[email protected]>
Reviewed-by: Matthew Dempsky <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Bryan Mills <[email protected]>
Auto-Submit: Cuong Manh Le <[email protected]>
  • Loading branch information
cuonglm authored and gopherbot committed Sep 6, 2022
1 parent 00234b0 commit ef69718
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/cmd/compile/internal/test/inl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package test

import (
"bufio"
"internal/buildcfg"
"internal/testenv"
"io"
"math/bits"
Expand Down Expand Up @@ -205,11 +206,7 @@ func TestIntendedInlining(t *testing.T) {
"(*Uintptr).Load",
"(*Uintptr).Store",
"(*Uintptr).Swap",
// TODO(rsc): Why are these not reported as inlined?
// "(*Pointer[T]).CompareAndSwap",
// "(*Pointer[T]).Load",
// "(*Pointer[T]).Store",
// "(*Pointer[T]).Swap",
// (*Pointer[T])'s methods' handled below.
},
}

Expand All @@ -235,6 +232,14 @@ func TestIntendedInlining(t *testing.T) {
// (*Bool).CompareAndSwap is just over budget on 32-bit systems (386, arm).
want["sync/atomic"] = append(want["sync/atomic"], "(*Bool).CompareAndSwap")
}
if buildcfg.Experiment.Unified {
// Non-unified IR does not report "inlining call ..." for atomic.Pointer[T]'s methods.
// TODO(cuonglm): remove once non-unified IR frontend gone.
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).CompareAndSwap")
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Load")
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Store")
want["sync/atomic"] = append(want["sync/atomic"], "(*Pointer[go.shape.int]).Swap")
}

switch runtime.GOARCH {
case "386", "wasm", "arm":
Expand Down
4 changes: 4 additions & 0 deletions src/sync/atomic/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ func b32(b bool) uint32 {
return 0
}

// For testing *Pointer[T]'s methods can be inlined.
// Keep in sync with cmd/compile/internal/test/inl_test.go:TestIntendedInlining.
var _ = &Pointer[int]{}

// A Pointer is an atomic pointer of type *T. The zero value is a nil *T.
type Pointer[T any] struct {
_ noCopy
Expand Down

0 comments on commit ef69718

Please sign in to comment.