Revert "Recommend turning "hot" higher-order calls into first-order calls."
This reverts commit bb0c20ce6eff2112a25eb1f98d394b36da0128f8. Was never useful in practice.
This commit is contained in:
parent
89948b2954
commit
48a55f7e74
|
@ -298,47 +298,6 @@
|
||||||
(format "Inlining ~a" (format-aggregation-string pruned-log))
|
(format "Inlining ~a" (format-aggregation-string pruned-log))
|
||||||
stx located-stx pos provenance)))
|
stx located-stx pos provenance)))
|
||||||
|
|
||||||
|
|
||||||
;; This function has an interesting caller, but no trace of inlining
|
|
||||||
;; attempts in it, which means it probably gets there via a higher-order
|
|
||||||
;; call. Recommend performing a devirtualization-like transformation to
|
|
||||||
;; turn the call into a first-order one.
|
|
||||||
;; Limitation: to even get to this point in the optimization analysis
|
|
||||||
;; process, the callee needs to have inlining attempts somewhere,
|
|
||||||
;; otherwise it won't be visited when traversing the inlining logs.
|
|
||||||
;; Solution: record this pattern when traversing the progiling logs.
|
|
||||||
(when profile-entry
|
|
||||||
(for ([caller+site (in-list interesting-callers+sites)]
|
|
||||||
#:when (null? (cdr caller+site)))
|
|
||||||
(define caller (car caller+site))
|
|
||||||
(define caller-pos (list (node-source caller)
|
|
||||||
(node-line caller)
|
|
||||||
(node-col caller)
|
|
||||||
(node-pos caller)
|
|
||||||
(node-span caller)))
|
|
||||||
(define forged-stx
|
|
||||||
(datum->syntax #'here (node-id caller) caller-pos))
|
|
||||||
(define callee-id (node-id profile-entry))
|
|
||||||
(emit (missed-opt-log-entry
|
|
||||||
kind
|
|
||||||
(string-append
|
|
||||||
(format "This function spends a lot of time in ~a (~a:~a) "
|
|
||||||
callee-id
|
|
||||||
(node-line profile-entry)
|
|
||||||
(node-col profile-entry))
|
|
||||||
"but gets there via a higher-order call, preventing inlining.\n\n"
|
|
||||||
"Using a conditional direct call would enable further optimization.\n\n"
|
|
||||||
"For example, assuming funarg is the higher-order callee:\n"
|
|
||||||
(format " (if (eq? funarg ~a) (~a ...) (funarg ...))\n"
|
|
||||||
callee-id callee-id))
|
|
||||||
;; TODO maybe report only if the function would be small
|
|
||||||
;; enough to be inlined (fuel), but we don't have size
|
|
||||||
;; info for callee
|
|
||||||
forged-stx forged-stx (node-pos caller) provenance
|
|
||||||
'() '()
|
|
||||||
20)))) ; TODO actual badness
|
|
||||||
|
|
||||||
|
|
||||||
(define inside-hot-function?
|
(define inside-hot-function?
|
||||||
(and profile (memq profile-entry hot-functions)))
|
(and profile (memq profile-entry hot-functions)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user