Skip to content

Commit

Permalink
Fix function lco creation (create a *single* lco per function)
Browse files Browse the repository at this point in the history
  • Loading branch information
bsaleil committed Dec 14, 2017
1 parent 3eacee3 commit a35ef8a
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 537 deletions.
62 changes: 34 additions & 28 deletions ast.scm
Expand Up @@ -779,6 +779,18 @@
(gen-return-cr cgc ctx)
(gen-return-rp cgc ctx)))))

(define fn-prologues (make-table test: eq?))
(define (get-fn-prologues ast rest-param? nb-params)
(let ((r (table-ref fn-prologues ast #f)))
(or r
(let* ((lazy-ret (get-lazy-return))
(lazy-body (gen-ast (caddr ast) lazy-ret))
(lazy-prologue (get-lazy-prologue ast lazy-body rest-param?))
(lazy-prologue-gen (get-lazy-generic-prologue ast lazy-body rest-param? nb-params))
(prologues (list lazy-prologue lazy-prologue-gen)))
(table-set! fn-prologues ast prologues)
prologues))))

;;
;; Create fn entry stub
(define (create-fn-stub ast fn-num fn-generator)
Expand All @@ -791,32 +803,27 @@
(if rest-param
(formal-params (cadr ast))
(cadr ast)))
;; Lazy lambda return
(define lazy-ret (get-lazy-return))
;; Lazy lambda body
(define lazy-body (gen-ast (caddr ast) lazy-ret))

;; Lazy function prologue
(define lazy-prologue (get-lazy-prologue ast lazy-body rest-param))

(list
lazy-prologue
(add-fn-callback
1
fn-num
(lambda (stack cc-idx cn-num ret-addr selector closure)

(cond ;; CASE 1 - Use entry point (no cctable)
((eq? opt-entry-points #f)
(let ((lazy-prologue-gen (get-lazy-generic-prologue ast lazy-body rest-param (length params))))
(fn-generator closure lazy-prologue-gen #f cc-idx cn-num #f)))
;; CASE 2 - Function is called using generic entry point
((= selector 1)
(let ((lazy-prologue-gen (get-lazy-generic-prologue ast lazy-body rest-param (length params))))
(fn-generator #f lazy-prologue-gen #f cc-idx cn-num #t)))
;; CASE 3 - Use multiple entry points
(else
(fn-generator #f lazy-prologue stack cc-idx cn-num #f)))))))

(let* ((prologues (get-fn-prologues ast rest-param (length params)))
(lazy-prologue (car prologues))
(lazy-prologue-gen (cadr prologues)))

(list
lazy-prologue
(add-fn-callback
1
fn-num
(lambda (stack cc-idx cn-num ret-addr selector closure)

(cond ;; CASE 1 - Use entry point (no cctable)
((eq? opt-entry-points #f)
(fn-generator closure lazy-prologue-gen #f cc-idx cn-num #f))
;; CASE 2 - Function is called using generic entry point
((= selector 1)
(fn-generator #f lazy-prologue-gen #f cc-idx cn-num #t))
;; CASE 3 - Use multiple entry points
(else
(fn-generator #f lazy-prologue stack cc-idx cn-num #f))))))))

(define (get-entry-obj ast ctx fvars-imm fvars-late all-params bound-id)

Expand Down Expand Up @@ -2700,7 +2707,6 @@
(lazy-code (and obj (cadr obj))))
(and lazy-code (not (lazy-code-rest? lazy-code)))))))


(if (and inlined-call?
opt-regalloc-inlined-call)

Expand Down Expand Up @@ -2913,7 +2919,7 @@
(define (get-cc-direct)
(and lazy-code
(let* ((stack call-stack)
(label (strat-label-from-stack lazy-code (append stack (list (make-ctx-tclo) (make-ctx-tret))))))
(label #f)) ;(strat-label-from-stack lazy-code (append stack (list (make-ctx-tclo) (make-ctx-tret))))))
(if (and label
(not (lazy-code-rest? lazy-code)))
(list 'ep (asm-label-pos label))
Expand Down
1 change: 0 additions & 1 deletion core.scm
Expand Up @@ -1313,7 +1313,6 @@

(define (generate-merge-code src-ctx dst-ctx label-dest)
(let ((moves (ctx-regalloc-merge-moves src-ctx dst-ctx)))

(if (and label-dest
(null? moves))
;; No merge code is generated, return label-dest
Expand Down
10 changes: 4 additions & 6 deletions strat1.scm
Expand Up @@ -46,6 +46,10 @@
(table-set! lco_versions lco versions)
versions))))

(define (lazy-code-versions-ctx lco)
(let ((ctxs (map car (keep cddr (table->list (lazy-code-versions lco))))))
ctxs))

(define (lazy-code-nb-versions lazy-code)
(table-length (lazy-code-versions lazy-code)))

Expand Down Expand Up @@ -144,13 +148,7 @@
(let ((nb-versions (lazy-code-nb-real-versions lco)))
(>= nb-versions opt-max-versions))))

(define TOT 0)
(define (strat-get-version lco ctx)
(let ((r (##exec-stats (lambda () (strat-get-version-h lco ctx)))))
(set! TOT (+ TOT (cdr (assoc 'user-time r))))
(cdr (assoc 'result r))))

(define (strat-get-version-h lco ctx)

;; CASE 1: a version exists for this ctx, use it
(define (case-use-version dst-ctx version)
Expand Down
1 change: 0 additions & 1 deletion stratunified.scm
Expand Up @@ -265,7 +265,6 @@

(define PORT (current-output-port))

;;; TODO: placeholder for --stats
(define (lazy-code-versions-ctx lco)
(let ((versions (table-ref lco-generated-versions lco #f)))
(if versions
Expand Down

0 comments on commit a35ef8a

Please sign in to comment.