diff options
author | Keith Randall <keithr@alum.mit.edu> | 2018-11-04 19:23:08 -0800 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2018-11-08 17:29:23 +0000 |
commit | 13baf4b2cd34dfb41c570e35b48ec287713f4d7f (patch) | |
tree | 4dd2059a36ca8d95f82e89ebc89dbdc8c61249a5 /src/runtime/runtime-gdb_test.go | |
parent | be5f646dabf5de85e128f46f102e8c9acdd8fe90 (diff) | |
download | go-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 'src/runtime/runtime-gdb_test.go')
-rw-r--r-- | src/runtime/runtime-gdb_test.go | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/runtime/runtime-gdb_test.go b/src/runtime/runtime-gdb_test.go index 5d35813708..2c1653172e 100644 --- a/src/runtime/runtime-gdb_test.go +++ b/src/runtime/runtime-gdb_test.go @@ -181,12 +181,11 @@ func testGdbPython(t *testing.T, cgo bool) { } args = append(args, "-ex", "set python print-stack full", - "-ex", "br fmt.Println", + "-ex", "br main.go:15", "-ex", "run", "-ex", "echo BEGIN info goroutines\n", "-ex", "info goroutines", "-ex", "echo END\n", - "-ex", "up", // up from fmt.Println to main "-ex", "echo BEGIN print mapvar\n", "-ex", "print mapvar", "-ex", "echo END\n", @@ -196,14 +195,13 @@ func testGdbPython(t *testing.T, cgo bool) { "-ex", "echo BEGIN info locals\n", "-ex", "info locals", "-ex", "echo END\n", - "-ex", "down", // back to fmt.Println (goroutine 2 below only works at bottom of stack. TODO: fix that) "-ex", "echo BEGIN goroutine 1 bt\n", "-ex", "goroutine 1 bt", "-ex", "echo END\n", "-ex", "echo BEGIN goroutine 2 bt\n", "-ex", "goroutine 2 bt", "-ex", "echo END\n", - "-ex", "clear fmt.Println", // clear the previous break point + "-ex", "clear main.go:15", // clear the previous break point "-ex", fmt.Sprintf("br main.go:%d", nLines), // new break point at the end of main "-ex", "c", "-ex", "echo BEGIN goroutine 1 bt at the end\n", @@ -274,7 +272,7 @@ func testGdbPython(t *testing.T, cgo bool) { t.Fatalf("info locals failed: %s", bl) } - btGoroutine1Re := regexp.MustCompile(`(?m)^#0\s+(0x[0-9a-f]+\s+in\s+)?fmt\.Println.+at`) + btGoroutine1Re := regexp.MustCompile(`(?m)^#0\s+(0x[0-9a-f]+\s+in\s+)?main\.main.+at`) if bl := blocks["goroutine 1 bt"]; !btGoroutine1Re.MatchString(bl) { t.Fatalf("goroutine 1 bt failed: %s", bl) } |