]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal/gc: better inliner diagnostics
authorIlya Tocar <ilya.tocar@intel.com>
Tue, 12 Sep 2017 18:53:55 +0000 (13:53 -0500)
committerIlya Tocar <ilya.tocar@intel.com>
Wed, 20 Sep 2017 21:38:06 +0000 (21:38 +0000)
When debugging inliner with -m -m print cost of complex functions,
instead of simple "function too complex". This helps to understand,
how close to inlining is this particular function.

Change-Id: I6871f69b5b914d23fd0b43a24d7c6fc928f4b716
Reviewed-on: https://go-review.googlesource.com/63330
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/inl.go

index 3a34ab9246c60f869994dd207ddd780c378f345d..35da0de6ddbad3ac3cb453de432527c8dd7d412f 100644 (file)
@@ -157,7 +157,7 @@ func caninl(fn *Node) {
                return
        }
        if visitor.budget < 0 {
-               reason = "function too complex"
+               reason = fmt.Sprintf("function too complex: cost %d exceeds budget %d", maxBudget-visitor.budget, maxBudget)
                return
        }
 
@@ -297,8 +297,8 @@ func (v *hairyVisitor) visit(n *Node) bool {
                v.budget -= 2
        }
 
-       if v.budget < 0 {
-               v.reason = "function too complex"
+       // When debugging, don't stop early, to get full cost of inlining this function
+       if v.budget < 0 && Debug['m'] < 2 {
                return true
        }