mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
be5f646dab
commit
13baf4b2cd
8 changed files with 43 additions and 13 deletions
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue