From 6e9ed24eaec21acaa344d0a0bb0e15133d129d8c Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Sat, 20 Oct 2012 11:46:21 -0400 Subject: [PATCH] Implement TR pruning. --- .../typed-racket/optimizer/tool/report.rkt | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/collects/typed-racket/optimizer/tool/report.rkt b/collects/typed-racket/optimizer/tool/report.rkt index ee0bb3835e..613f8577f8 100644 --- a/collects/typed-racket/optimizer/tool/report.rkt +++ b/collects/typed-racket/optimizer/tool/report.rkt @@ -29,7 +29,7 @@ (define (generate-report this profile) (define-values (TR-log mzc-log) (generate-logs this)) (log->report - (append TR-log + (append (prune-cold-TR-failures TR-log profile) (post-process-inline-log mzc-log profile TR-log)))) @@ -213,3 +213,28 @@ [(prev l) ; no overlap, just add to the list (values (cons l new-report) l)]))) new-report) + +;;-------------------------------------------------------------------- + +(require "profiling.rkt") +(define (prune-cold-TR-failures TR-log profile) + (define hot-functions (and profile (prune-profile profile))) + + ;; #f if no profiling info is available for this function + ;; takes in either a single pos number or a pair of numbers (line col) + (define (pos->node pos) + (and profile + pos + (for/first ([p (in-list (profile-nodes profile))] + #:when (let* ([from (node-pos p)] + [span (node-span p)]) + (and from span + (<= from pos (+ from span))))) + p))) + + (define (in-hot-function? l) + (or (not profile) ; keep everything if we don't have profile info + (opt-log-entry? l) ; don't prune successes + (memq (pos->node (log-entry-pos l)) hot-functions))) + + (filter in-hot-function? TR-log))