From 13baf4b2cd34dfb41c570e35b48ec287713f4d7f Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Sun, 4 Nov 2018 19:23:08 -0800 Subject: 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 Reviewed-by: David Chase --- src/runtime/stack_test.go | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/runtime/stack_test.go') diff --git a/src/runtime/stack_test.go b/src/runtime/stack_test.go index dc65395141..f52381710d 100644 --- a/src/runtime/stack_test.go +++ b/src/runtime/stack_test.go @@ -595,6 +595,9 @@ func (s structWithMethod) callers() []uintptr { return pc[:Callers(0, pc)] } +// The noinline prevents this function from being inlined +// into a wrapper. TODO: remove this when issue 28640 is fixed. +//go:noinline func (s structWithMethod) stack() string { buf := make([]byte, 4<<10) return string(buf[:Stack(buf, false)]) -- cgit v1.3