]> Cypherpunks.ru repositories - gostls13.git/blobdiff - src/cmd/compile/internal/inline/inlheur/score_callresult_uses.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / src / cmd / compile / internal / inline / inlheur / score_callresult_uses.go
index 61dc7520abe29683d6c2efbbcf694bbdf094f899..1d31f09ac093253b03bd666e9d1466d74bd3c3f0 100644 (file)
@@ -65,7 +65,7 @@ func rescoreBasedOnCallResultUses(fn *ir.Func, resultNameTab map[*ir.Name]result
        disableDebugTrace()
 }
 
-func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS) {
+func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS) map[*ir.Name]resultPropAndCS {
        if debugTrace&debugTraceScoring != 0 {
                fmt.Fprintf(os.Stderr, "=-= examining call results for %q\n",
                        EncodeCallSiteKey(cs))
@@ -79,7 +79,7 @@ func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS
        //
        names, autoTemps, props := namesDefined(cs)
        if len(names) == 0 {
-               return
+               return resultNameTab
        }
 
        if debugTrace&debugTraceScoring != 0 {
@@ -106,7 +106,9 @@ func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS
                if ir.Reassigned(n) {
                        continue
                }
-               if _, ok := resultNameTab[n]; ok {
+               if resultNameTab == nil {
+                       resultNameTab = make(map[*ir.Name]resultPropAndCS)
+               } else if _, ok := resultNameTab[n]; ok {
                        panic("should never happen")
                }
                entry := resultPropAndCS{
@@ -121,6 +123,7 @@ func examineCallResults(cs *CallSite, resultNameTab map[*ir.Name]resultPropAndCS
                        fmt.Fprintf(os.Stderr, "=-= add resultNameTab table entry n=%v autotemp=%v props=%s\n", n, autoTemps[idx], rprop.String())
                }
        }
+       return resultNameTab
 }
 
 // namesDefined returns a list of ir.Name's corresponding to locals