]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/compile/internal/walk: reuse runtime.scase
authorMatthew Dempsky <mdempsky@google.com>
Mon, 21 Aug 2023 21:08:46 +0000 (14:08 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 21 Aug 2023 23:34:34 +0000 (23:34 +0000)
Shaves ~1.5kB off cmd/go binary.

Change-Id: I8ad85aa4a24bc197b009c8e1ea9201957222152a
Reviewed-on: https://go-review.googlesource.com/c/go/+/521677
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
src/cmd/compile/internal/walk/select.go
test/live.go
test/live_regabi.go

index 9ca132af7ad5a5ff3ce1ca051b6f75cce2242503..009753c8ad4e89658cc8a23c51511ea19312e197 100644 (file)
@@ -9,6 +9,7 @@ import (
        "cmd/compile/internal/ir"
        "cmd/compile/internal/typecheck"
        "cmd/compile/internal/types"
+       "cmd/internal/src"
 )
 
 func walkSelect(sel *ir.SelectStmt) {
@@ -287,11 +288,15 @@ var scase *types.Type
 // Keep in sync with src/runtime/select.go.
 func scasetype() *types.Type {
        if scase == nil {
-               scase = types.NewStruct([]*types.Field{
+               n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("scase"))
+               scase = types.NewNamed(n)
+               n.SetType(scase)
+               n.SetTypecheck(1)
+
+               scase.SetUnderlying(types.NewStruct([]*types.Field{
                        types.NewField(base.Pos, typecheck.Lookup("c"), types.Types[types.TUNSAFEPTR]),
                        types.NewField(base.Pos, typecheck.Lookup("elem"), types.Types[types.TUNSAFEPTR]),
-               })
-               scase.SetNoalg(true)
+               }))
        }
        return scase
 }
index 1777a51f2a0494fa18129aff2128a3c4c4984447..8a8f8bb71fdd4887695cffafceaa48de3b868b7e 100644 (file)
@@ -167,7 +167,7 @@ var b bool
 
 // this used to have a spurious "live at entry to f11a: ~r0"
 func f11a() *int {
-       select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct"
+       select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
        case <-c:
                return nil
        case <-c:
@@ -182,7 +182,7 @@ func f11b() *int {
                // get to the bottom of the function.
                // This used to have a spurious "live at call to printint: p".
                printint(1) // nothing live here!
-               select {    // ERROR "stack object .autotmp_[0-9]+ \[2\]struct"
+               select {    // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
                case <-c:
                        return nil
                case <-c:
@@ -202,7 +202,7 @@ func f11c() *int {
                // Unlike previous, the cases in this select fall through,
                // so we can get to the println, so p is not dead.
                printint(1) // ERROR "live at call to printint: p$"
-               select {    // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]struct"
+               select {    // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
                case <-c:
                case <-c:
                }
@@ -600,7 +600,7 @@ func f38(b bool) {
        // we care that the println lines have no live variables
        // and therefore no output.
        if b {
-               select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]struct \{"
+               select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]runtime.scase$"
                case <-fc38():
                        printnl()
                case fc38() <- *fi38(1): // ERROR "live at call to fc38:( .autotmp_[0-9]+)+$" "live at call to fi38:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ string$"
index 7ae84891e4a90a4d972bdc8849b11e2be5b5d8fa..0b7f2eeb4e35edd494b51c40efee3142faea1ea1 100644 (file)
@@ -164,7 +164,7 @@ var b bool
 
 // this used to have a spurious "live at entry to f11a: ~r0"
 func f11a() *int {
-       select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct"
+       select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
        case <-c:
                return nil
        case <-c:
@@ -179,7 +179,7 @@ func f11b() *int {
                // get to the bottom of the function.
                // This used to have a spurious "live at call to printint: p".
                printint(1) // nothing live here!
-               select {    // ERROR "stack object .autotmp_[0-9]+ \[2\]struct"
+               select {    // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
                case <-c:
                        return nil
                case <-c:
@@ -199,7 +199,7 @@ func f11c() *int {
                // Unlike previous, the cases in this select fall through,
                // so we can get to the println, so p is not dead.
                printint(1) // ERROR "live at call to printint: p$"
-               select {    // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]struct"
+               select {    // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]runtime.scase$"
                case <-c:
                case <-c:
                }
@@ -597,7 +597,7 @@ func f38(b bool) {
        // we care that the println lines have no live variables
        // and therefore no output.
        if b {
-               select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]struct \{"
+               select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]runtime.scase$"
                case <-fc38():
                        printnl()
                case fc38() <- *fi38(1): // ERROR "live at call to fc38:( .autotmp_[0-9]+)+$" "live at call to fi38:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ string$"