aboutsummaryrefslogtreecommitdiff
path: root/test/live_syscall.go
diff options
context:
space:
mode:
authorKeith Randall <keithr@alum.mit.edu>2018-11-04 19:23:08 -0800
committerKeith Randall <khr@golang.org>2018-11-08 17:29:23 +0000
commit13baf4b2cd34dfb41c570e35b48ec287713f4d7f (patch)
tree4dd2059a36ca8d95f82e89ebc89dbdc8c61249a5 /test/live_syscall.go
parentbe5f646dabf5de85e128f46f102e8c9acdd8fe90 (diff)
downloadgo-13baf4b2cd34dfb41c570e35b48ec287713f4d7f.tar.gz
go-13baf4b2cd34dfb41c570e35b48ec287713f4d7f.zip
cmd/compile: encourage inlining of functions with single-call bodies
This is a simple tweak to allow a bit more mid-stack inlining. In cases like this: func f() { g() } We'd really like to inline f into its callers. It can't hurt. We implement this optimization by making calls a bit cheaper, enough to afford a single call in the function body, but not 2. The remaining budget allows for some argument modification, or perhaps a wrapping conditional: func f(x int) { g(x, 0) } func f(x int) { if x > 0 { g() } } Update #19348 Change-Id: Ifb1ea0dd1db216c3fd5c453c31c3355561fe406f Reviewed-on: https://go-review.googlesource.com/c/147361 Reviewed-by: Austin Clements <austin@google.com> Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'test/live_syscall.go')
-rw-r--r--test/live_syscall.go8
1 files changed, 4 insertions, 4 deletions
diff --git a/test/live_syscall.go b/test/live_syscall.go
index b7b85bcabf..7b44717350 100644
--- a/test/live_syscall.go
+++ b/test/live_syscall.go
@@ -17,23 +17,23 @@ import (
func f(uintptr) // ERROR "f assuming arg#1 is unsafe uintptr"
-func g() {
+func g() { // ERROR "can inline g"
var t int
f(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to f: .?autotmp" "g &t does not escape" "stack object .autotmp_[0-9]+ unsafe.Pointer$"
}
-func h() {
+func h() { // ERROR "can inline h"
var v int
syscall.Syscall(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to Syscall: .?autotmp" "h &v does not escape" "stack object .autotmp_[0-9]+ unsafe.Pointer$"
}
-func i() {
+func i() { // ERROR "can inline i"
var t int
p := unsafe.Pointer(&t) // ERROR "i &t does not escape"
f(uintptr(p)) // ERROR "live at call to f: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$"
}
-func j() {
+func j() { // ERROR "can inline j"
var v int
p := unsafe.Pointer(&v) // ERROR "j &v does not escape"
syscall.Syscall(0, 1, uintptr(p), 2) // ERROR "live at call to Syscall: .?autotmp" "stack object .autotmp_[0-9]+ unsafe.Pointer$"