Changeset 12168 in project


Ignore:
Timestamp:
10/15/08 09:59:41 (12 years ago)
Author:
felix winkelmann
Message:

added null benchmark, cscbench tweaks, global inlining fixes

Location:
chicken/branches/cmi
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • chicken/branches/cmi/TODO

    r12162 r12168  
    4242** remove "custom-declare" + stuff?
    4343** when inlining, consing arg-list with "list" may make get-keyword possibly foldable
    44 ** refactor inline tests (simple fid, inlinable/contractable, inline prop, size)
     44** test global inlining (using .inline files)
    4545
    4646* benchmarks
  • chicken/branches/cmi/batch-driver.scm

    r12153 r12168  
    3939  compiler-cleanup-hook disabled-warnings local-definitions
    4040  file-io-only undefine-shadowed-macros profiled-procedures
    41   unit-name insert-timer-checks used-units inline-max-size
     41  unit-name insert-timer-checks used-units inline-max-size inlining-locally
    4242  debugging perform-lambda-lifting! disable-stack-overflow-checking
    4343  foreign-declarations emit-trace-info block-compilation line-number-database-size
     
    6565  default-declarations units-used-by-default words-per-flonum default-debugging-declarations
    6666  default-profiling-declarations default-optimization-passes
    67   inline-max-size file-requirements import-libraries inline-globally
     67  file-requirements import-libraries inline-globally
    6868  foreign-string-result-reserve parameter-limit eq-inline-operator optimizable-rest-argument-operators
    6969  membership-test-operators membership-unfold-limit valid-compiler-options valid-compiler-options-with-argument
     
    7777
    7878(define-constant default-profile-name "PROFILE")
    79 (define-constant default-inline-max-size 10)
    8079(define-constant funny-message-timeout 60000)
    8180
     
    253252    (when (memq 'block options) (set! block-compilation #t))
    254253    (when (memq 'emit-external-prototypes-first options) (set! external-protos-first #t))
    255     (when (memq 'inline options) (set! inline-max-size default-inline-max-size))
     254    (when (memq 'inline options) (set! inline-locally #t))
    256255    (and-let* ([inlimit (memq 'inline-limit options)])
    257256      (set! inline-max-size
     
    505504                    (and-let* ((ifile (##sys#resolve-include-filename
    506505                                       (make-pathname #f (symbol->string id) "inline")
    507                                        #f #t)))
     506                                       #f #t))
     507                               ((file-exists? ifile)))
    508508                      (when verbose
    509                         (print "Loading inline file " ifile " ...")
    510                         (load-inline-file ifile))))
     509                        (print "Loading inline file " ifile " ..."))
     510                      (load-inline-file ifile)))
    511511                  (concatenate (map cdr req)))))
    512512
     
    596596                              (let ((f (pathname-replace-extension source-filename "inline")))
    597597                                (when verbose
    598                                   (printf "Generating global inline file ~a ...~%" f))
     598                                  (printf "Generating global inline file `~a' ...~%" f))
    599599                                (emit-global-inline-file f db) ) )
    600600
  • chicken/branches/cmi/benchmarks/cscbench.scm

    r12162 r12168  
    55(require-extension srfi-1 utils posix regex)
    66
    7 (define ignored-files '("cscbench.scm"))
     7(define ignored-files '("cscbench.scm" "cscbench.scm~"))
    88(define flonum-files '("fft" "maze"))
    99(define cc "`csc -cc-name`")
     
    4444        (display-r is 4 #\space)
    4545        (display #\.)
    46         (display-r fs 3 #\0) ) ) ) )
     46        (display-r (or fs "0") 3 #\0) ) ) ) )
    4747
    4848(define (display-size n)
     
    6060               (lambda (abort)
    6161                 (set! abort-run (cut abort #f))
    62                  (/ (+ (run) (run) (run) (run) (run)) 5) ) ) )
     62                 (let ((runs
     63                        (butlast
     64                         (cdr
     65                          (sort
     66                           (map (lambda _ (run)) (iota 5))
     67                           <)))))
     68                   (/ (apply + runs) 3)))))
    6369        (size (file-size "tmpfile")))
    6470    (display #\space)
     
    95101  (dflush "\nCFLAGS:\n")
    96102  (system* "echo `csc -cflags`")
    97   (display "\n(Running benchmarks - average over 5 runs, statically linked, stripped)\n")
     103  (display "\nRunning benchmarks ...\n\n  (averaging over 5 runs, dropping highest and lowest, binaries are statically linked and stripped)\n")
    98104  (display "\n                     (runtime)                      (code size)\n")
    99105  (display "\n                     base     unsafe        max     base     unsafe       max")
  • chicken/branches/cmi/compiler.scm

    r12151 r12168  
    288288  direct-call-ids foreign-type-table first-analysis callback-names disabled-warnings
    289289  initialize-compiler canonicalize-expression expand-foreign-lambda update-line-number-database! scan-toplevel-assignments
    290   compiler-warning variable-visible? hide-variable mark-variable
     290  compiler-warning variable-visible? hide-variable mark-variable inline-locally
    291291  perform-cps-conversion analyze-expression simplifications perform-high-level-optimizations perform-pre-optimization!
    292292  reorganize-recursive-bindings substitution-table simplify-named-call inline-max-size
     
    340340(define-constant file-requirements-size 301)
    341341(define-constant real-name-table-size 997)
    342 (define-constant default-inline-max-size 10)
     342(define-constant default-inline-max-size 20)
    343343
    344344
     
    372372(define external-protos-first #f)
    373373(define do-lambda-lifting #f)
    374 (define inline-max-size -1)
     374(define inline-max-size default-inline-max-size)
    375375(define emit-closure-info #t)
    376376(define undefine-shadowed-macros #t)
     
    381381(define local-definitions #f)
    382382(define inline-globally #f)
     383(define inline-locally #f)
    383384
    384385
     
    13601361          [(inline)
    13611362           (if (null? (cddr spec))
    1362                (set! inline-max-size -1)
     1363               (set! inline-locally #f)
    13631364               (for-each
    13641365                (cut mark-variable <> '##compiler#inline 'no)
     
    13991400       ((inline)
    14001401        (if (null? (cdr spec))
    1401             (unless (> inline-max-size -1)
    1402               (set! inline-max-size default-inline-max-size) )
     1402            (set! inline-locally #t)
    14031403            (for-each
    14041404             (cut mark-variable <> '##compiler#inline 'yes)
     
    19661966                                 vars))
    19671967                        (quick-put! plist 'inlinable #t) ) ) ) ) )
    1968                ((variable-mark sym '##compiler#inline) =>
     1968               ((variable-mark sym '##compiler#inline-global) =>
    19691969                (lambda (n)
    1970                   (when (and (node? n)
    1971                              inline-globally
    1972                              (not (eq? 'no (variable-mark sym '##compiler#inline-global))))
    1973                     (let ((lparams (node-parameters n)))
    1974                       (put! db (first lparams) 'simple)
    1975                       (quick-put! plist 'inlinable #t)
    1976                       (quick-put! plist 'local-value n))))))
     1970                  (when (node? n)
     1971                    (cond (assigned
     1972                           (debugging
     1973                            'i "global inline candidate has been assigned and will not be inlined"
     1974                            sym)
     1975                           (mark-variable sym '##compiler#inline-global 'no))
     1976                          (else
     1977                           (let ((lparams (node-parameters n)))
     1978                             (put! db (first lparams) 'simple)
     1979                             (quick-put!k-put! plist 'inlinable #t)
     1980                             (quick-put! plist 'local-value n))))))))
    19771981
    19781982         ;; Make 'collapsable, if it has a known constant value which is either collapsable or is only
  • chicken/branches/cmi/distribution/manifest

    r12152 r12168  
    99banner.scm
    1010batch-driver.scm
     11benchmarks/0.scm
    1112benchmarks/cscbench.scm
    1213benchmarks/boyer.scm
  • chicken/branches/cmi/optimizer.scm

    r12153 r12168  
    326326                                              (else
    327327                                               (< (fourth lparams) inline-max-size) ) ))
    328                                        (debugging 'i "procedure could be inlined" var fid (fourth lparams))
     328                                       (debugging
     329                                        'i
     330                                        (if (node? (variable-mark var '##compiler#inline-global))
     331                                            "procedure can be inlined (globally)"
     332                                            "procedure can be inlined")
     333                                        var fid (fourth lparams))
    329334                                       (check-signature var args llist)
    330335                                       (debugging 'o "inlining procedure" var)
  • chicken/branches/cmi/support.scm

    r12151 r12168  
    675675        (##sys#hash-table-for-each
    676676         (lambda (sym plist)
    677            (and-let* ((val (assq 'local-value plist))
    678                       ((let ((val (assq 'value plist)))
    679                          (or (not val)
    680                              (not (eq? 'unknown (cdr val))))))
    681                       ((assq 'inlinable plist))
    682                       (lparams (node-parameters (cdr val)))
    683                       ((get db (first lparams) 'simple))
    684                       ((not (get db sym 'hidden-refs)))
    685                       ((not (eq? (variable-mark sym '##compiler#inline-global) 'no)))
    686                       ((case (variable-mark sym '##compiler#inline)
    687                          ((yes) #t)
    688                          ((no) #f)
    689                          (else
    690                           (< (fourth lparams) inline-max-size) ) ) ) )
    691              (set! lst (cons sym lst))
    692              (pp (list sym (node->sexpr (cdr val))))
    693              (newline)))
     677           (when (variable-visible? sym)
     678             (and-let* ((val (assq 'local-value plist))
     679                        ((let ((val (assq 'value plist)))
     680                           (or (not val)
     681                               (not (eq? 'unknown (cdr val))))))
     682                        ((assq 'inlinable plist))
     683                        (lparams (node-parameters (cdr val)))
     684                        ((get db (first lparams) 'simple))
     685                        ((not (get db sym 'hidden-refs)))
     686                        ((case (variable-mark sym '##compiler#inline)
     687                           ((yes) #t)
     688                           ((no) #f)
     689                           (else
     690                            (< (fourth lparams) inline-max-size) ) ) ) )
     691               (set! lst (cons sym lst))
     692               (pp (list sym (node->sexpr (cdr val))))
     693               (newline))))
    694694         db)
    695695        (print "; END OF FILE")))
Note: See TracChangeset for help on using the changeset viewer.