~ chicken-core (chicken-5) df62dbb9299ad67ee9ae8e4810a00701aaf3742e
commit df62dbb9299ad67ee9ae8e4810a00701aaf3742e
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Sat Feb 11 18:19:04 2012 +0100
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Sun Feb 12 14:12:09 2012 +0100
Use previous run's identifier database size as a heuristic for next run's database size to avoid too many hash collisions for large programs
diff --git a/compiler.scm b/compiler.scm
index b8d574bd..0ff6b769 100644
--- a/compiler.scm
+++ b/compiler.scm
@@ -283,7 +283,7 @@
(define-foreign-variable default-target-heap-size int "C_DEFAULT_TARGET_HEAP_SIZE")
(define-constant foreign-type-table-size 301)
-(define-constant analysis-database-size 3001)
+(define-constant initial-analysis-database-size 3001)
(define-constant default-line-number-database-size 997)
(define-constant inline-table-size 301)
(define-constant constant-table-size 301)
@@ -335,12 +335,12 @@
(define strict-variable-types #f)
(define enable-specialization #f)
-
;;; Other global variables:
(define verbose-mode #f)
(define original-program-size #f)
(define current-program-size 0)
+(define current-analysis-database-size initial-analysis-database-size)
(define line-number-database-2 #f)
(define immutable-constants '())
(define inline-table #f)
@@ -1790,8 +1790,10 @@
;;; Perform source-code analysis:
(define (analyze-expression node)
- (let ((db (make-vector analysis-database-size '()))
- (explicitly-consed '()) )
+ ;; Avoid crowded hash tables by using previous run's size as heuristic
+ (let* ((db-size (fx* (fxmax current-analysis-database-size 1) 3))
+ (db (make-vector db-size '()))
+ (explicitly-consed '()) )
(define (grow n)
(set! current-program-size (+ current-program-size n)) )
@@ -1960,6 +1962,7 @@
;; Complete gathered database information:
(debugging 'p "analysis gathering phase...")
+ (set! current-analysis-database-size 0)
(##sys#hash-table-for-each
(lambda (sym plist)
(let ([unknown #f]
@@ -1977,6 +1980,8 @@
[nreferences 0]
[ncall-sites 0] )
+ (set! current-analysis-database-size (fx+ current-analysis-database-size 1))
+
(for-each
(lambda (prop)
(case (car prop)
Trap