From a57f6e1e364bb8a27f087df49af9cbaf94fdabd9 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 2 Apr 2014 11:45:26 +0200 Subject: [PATCH] $dfa includes CFA fields * module/language/cps/dfg.scm ($dfa): Include CFA min-label, k-map, and k-order inline. (dfa-k-idx, dfa-k-sym, dfa-k-count): Adapt. (compute-live-variables): Extract fields of CFA for make-dfa. (print-dfa): Adapt (and fix positional record matching). --- module/language/cps/dfg.scm | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/module/language/cps/dfg.scm b/module/language/cps/dfg.scm index 950dce64a..28ac8940b 100644 --- a/module/language/cps/dfg.scm +++ b/module/language/cps/dfg.scm @@ -646,10 +646,13 @@ body continuation in the prompt." ;; Data-flow analysis. (define-record-type $dfa - (make-dfa cfa min-var var-count in out) + (make-dfa min-label k-map k-order min-var var-count in out) dfa? - ;; CFA, for its reverse-post-order numbering - (cfa dfa-cfa) + ;; CFA, for its label sort order + (min-label dfa-min-label) + (k-map dfa-k-map) + (k-order dfa-k-order) + ;; Minimum var in this function. (min-var dfa-min-var) ;; Minimum var in this function. @@ -660,13 +663,13 @@ body continuation in the prompt." (out dfa-out)) (define (dfa-k-idx dfa k) - (cfa-k-idx (dfa-cfa dfa) k)) + (vector-ref (dfa-k-map dfa) (- k (dfa-min-label dfa)))) (define (dfa-k-sym dfa idx) - (cfa-k-sym (dfa-cfa dfa) idx)) + (vector-ref (dfa-k-order dfa) idx)) (define (dfa-k-count dfa) - (cfa-k-count (dfa-cfa dfa))) + (vector-length (dfa-k-map dfa))) (define (dfa-var-idx dfa var) (let ((idx (- var (dfa-min-var dfa)))) @@ -730,11 +733,11 @@ body continuation in the prompt." (compute-maximum-fixed-point (cfa-preds cfa) live-out live-in defv usev #t) - (make-dfa cfa min-var nvars live-in live-out))) + (make-dfa (cfa-min-label cfa) (cfa-k-map cfa) (cfa-order cfa) min-var nvars live-in live-out))) (define (print-dfa dfa) (match dfa - (($ $dfa cfa min-var in out) + (($ $dfa min-label k-map k-order min-var var-count in out) (define (print-var-set bv) (let lp ((n 0)) (let ((n (bit-position #t bv n))) @@ -742,8 +745,8 @@ body continuation in the prompt." (format #t " ~A" (+ n min-var)) (lp (1+ n)))))) (let lp ((n 0)) - (when (< n (cfa-k-count cfa)) - (format #t "~A:\n" (cfa-k-sym cfa n)) + (when (< n (vector-length k-order)) + (format #t "~A:\n" (vector-ref k-order n)) (format #t " in:") (print-var-set (vector-ref in n)) (newline)