aboutsummaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@gcc.gnu.org>2019-07-04 02:20:37 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2019-07-04 02:20:37 +0000
commit0e68d70b7fbf4533d7b5ccd84c439026062b1a0e (patch)
treeb01088e287d6565278c17bc004de616ba1a0891f /libgo
parent9c5784fa7585c274b188f4df26bb80244ef97cb0 (diff)
downloadgcc-0e68d70b7fbf4533d7b5ccd84c439026062b1a0e.zip
gcc-0e68d70b7fbf4533d7b5ccd84c439026062b1a0e.tar.gz
gcc-0e68d70b7fbf4533d7b5ccd84c439026062b1a0e.tar.bz2
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
Diffstat (limited to 'libgo')
-rw-r--r--libgo/go/runtime/chan.go3
-rw-r--r--libgo/go/runtime/select.go1
2 files changed, 4 insertions, 0 deletions
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