From 0e68d70b7fbf4533d7b5ccd84c439026062b1a0e Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 4 Jul 2019 02:20:37 +0000 Subject: compiler: optimize 0,1,2-case select statement For a select statement with zero-, one-, or two-case with a default case, we can generate simpler code instead of calling the generic selectgo. A zero-case select is just blocking the execution. A one-case select is mostly just executing the case. A two-case select with a default case is a non-blocking send or receive. We add these special cases for lowering a select statement. Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/184998 From-SVN: r273034 --- libgo/go/runtime/chan.go | 3 +++ libgo/go/runtime/select.go | 1 + 2 files changed, 4 insertions(+) (limited to 'libgo/go') diff --git a/libgo/go/runtime/chan.go b/libgo/go/runtime/chan.go index 6dfe2f3..6c8d6f7 100644 --- a/libgo/go/runtime/chan.go +++ b/libgo/go/runtime/chan.go @@ -32,6 +32,9 @@ import ( //go:linkname chanrecv1 runtime.chanrecv1 //go:linkname chanrecv2 runtime.chanrecv2 //go:linkname closechan runtime.closechan +//go:linkname selectnbsend runtime.selectnbsend +//go:linkname selectnbrecv runtime.selectnbrecv +//go:linkname selectnbrecv2 runtime.selectnbrecv2 const ( maxAlign = 8 diff --git a/libgo/go/runtime/select.go b/libgo/go/runtime/select.go index d658a34..16de9b8 100644 --- a/libgo/go/runtime/select.go +++ b/libgo/go/runtime/select.go @@ -14,6 +14,7 @@ import ( // themselves, so that the compiler will export them. // //go:linkname selectgo runtime.selectgo +//go:linkname block runtime.block const debugSelect = false -- cgit v1.1