From: Than McIntosh Date: Tue, 3 Jan 2023 18:11:10 +0000 (-0500) Subject: cmd/compile: flag 'large' functions when -m=2+ in effect X-Git-Tag: go1.21rc1~1819 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=733ba921875ea11088f1f447cbca418f651aae5c;p=gostls13.git cmd/compile: flag 'large' functions when -m=2+ in effect When -m=N (where N > 1) is in effect, include a note in the trace output if a given function is considered "big" during inlining analysis, since this causes the inliner to be less aggressive. If a small change to a large function happens to nudge it over the large function threshold, it can be confusing for developers, thus it's probably worth including this info in the remark output. Change-Id: Id31a1b76371ab1ef9265ba28a377f97b0247d0a7 Reviewed-on: https://go-review.googlesource.com/c/go/+/460317 Reviewed-by: Keith Randall TryBot-Result: Gopher Robot Run-TryBot: Than McIntosh Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index 8620db2adb..e3b2e44f61 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -742,6 +742,9 @@ func InlineCalls(fn *ir.Func, profile *pgo.Profile) { ir.CurFunc = fn maxCost := int32(inlineMaxBudget) if isBigFunc(fn) { + if base.Flag.LowerM > 1 { + fmt.Printf("%v: function %v considered 'big'; revising maxCost from %d to %d\n", ir.Line(fn), fn, maxCost, inlineBigFunctionMaxCost) + } maxCost = inlineBigFunctionMaxCost } var inlCalls []*ir.InlinedCallExpr diff --git a/test/inline_big.go b/test/inline_big.go index 83672753f7..7dd1abdb6a 100644 --- a/test/inline_big.go +++ b/test/inline_big.go @@ -20,7 +20,7 @@ func medium(a []int) int { // ERROR "can inline medium with cost .* as:.*" "a do return a[0] + a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] } -func f(a []int) int { // ERROR "cannot inline f:.*" "a does not escape" +func f(a []int) int { // ERROR "cannot inline f:.*" "a does not escape" "function f considered 'big'" // Add lots of nodes to f's body. We need >5000. // See cmd/compile/internal/gc/inl.go:inlineBigFunction* a[0] = 0