diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-07-04 02:20:37 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2019-07-04 02:20:37 +0000 |
commit | 0e68d70b7fbf4533d7b5ccd84c439026062b1a0e (patch) | |
tree | b01088e287d6565278c17bc004de616ba1a0891f /libgo | |
parent | 9c5784fa7585c274b188f4df26bb80244ef97cb0 (diff) | |
download | gcc-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.go | 3 | ||||
-rw-r--r-- | libgo/go/runtime/select.go | 1 |
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 |