aboutsummaryrefslogtreecommitdiff
path: root/test/inline.go
diff options
context:
space:
mode:
authorThan McIntosh <thanm@google.com>2023-03-09 09:59:26 -0500
committerThan McIntosh <thanm@google.com>2023-03-09 22:13:26 +0000
commitf5c7416511de979433a500735c1617cf03dc46c2 (patch)
tree5723402513474397c8a27257a54bab9c9f1ac4a1 /test/inline.go
parentc9389a5849d65b74287cd2746a94748d6d64cb44 (diff)
downloadgo-f5c7416511de979433a500735c1617cf03dc46c2.tar.gz
go-f5c7416511de979433a500735c1617cf03dc46c2.zip
cmd/compile: reorder operations in SCCs to enable more inlining
This patch changes the relative order of "CanInline" and "InlineCalls" operations within the inliner for clumps of functions corresponding to strongly connected components in the call graph. This helps increase the amount of inlining within SCCs, particularly in Go's runtime package, which has a couple of very large SCCs. For a given SCC of the form { fn1, fn2, ... fnk }, the inliner would (prior to this point) walk through the list of functions and for each function first compute inlinability ("CanInline") and then perform inlining ("InlineCalls"). This meant that if there was an inlinable call from fn3 to fn4 (for example), this call would never be inlined, since at the point fn3 was visited, we would not have computed inlinability for fn4. We now do inlinability analysis for all functions in an SCC first, then do actual inlining for everything. This results in 47 additional inlines in the Go runtime package (a fairly modest increase percentage-wise of 0.6%). Updates #58905. Change-Id: I48dbb1ca16f0b12f256d9eeba8cf7f3e6dd853cd Reviewed-on: https://go-review.googlesource.com/c/go/+/474955 Run-TryBot: Than McIntosh <thanm@google.com> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'test/inline.go')
-rw-r--r--test/inline.go6
1 files changed, 3 insertions, 3 deletions
diff --git a/test/inline.go b/test/inline.go
index 1aa8fccbbd..3bc102f769 100644
--- a/test/inline.go
+++ b/test/inline.go
@@ -246,13 +246,13 @@ func ff(x int) { // ERROR "can inline ff"
if x < 0 {
return
}
- gg(x - 1)
+ gg(x - 1) // ERROR "inlining call to gg" "inlining call to hh"
}
func gg(x int) { // ERROR "can inline gg"
- hh(x - 1)
+ hh(x - 1) // ERROR "inlining call to hh" "inlining call to ff"
}
func hh(x int) { // ERROR "can inline hh"
- ff(x - 1) // ERROR "inlining call to ff" // ERROR "inlining call to gg"
+ ff(x - 1) // ERROR "inlining call to ff" "inlining call to gg"
}
// Issue #14768 - make sure we can inline for loops.