lifetimes.scm 702 B

12345678910111213141516171819202122
  1. (define (lifetime-analysis use)
  2. (let loop ((i 0) (use use) (births '()) (deaths '()))
  3. (if (null? use)
  4. (list (reverse births) deaths)
  5. (let ((uses (cdar use)))
  6. (loop (+ i 1)
  7. (cdr use)
  8. (cons (cons (caar use) i) births)
  9. (assoc-replace* (map (lambda (var) (cons var i)) uses) deaths))))))
  10. (define (interference-graph use)
  11. (let ((lifes (lifetime-analysis use)))
  12. (let loop ((i 0)
  13. (births (sort-by (comparing < cdr) (car lifes)))
  14. (deaths (sort-by (comparing < cdr) (cadr lifes)))
  15. (current '()))
  16. ;; remove from current by the deaths
  17. ;; add to current from the births
  18. ;; add the edges relating to anything that was added
  19. ;; continue