diff --git a/module/language/cps/intset.scm b/module/language/cps/intset.scm index 382a4ba6d..87956c525 100644 --- a/module/language/cps/intset.scm +++ b/module/language/cps/intset.scm @@ -34,6 +34,7 @@ transient-intset? persistent-intset transient-intset + intset intset-add intset-add! intset-remove @@ -300,6 +301,11 @@ ;; Add a new level and try again. (intset-add (add-level min shift root) i)))))) +(define-syntax intset + (syntax-rules () + ((intset) empty-intset) + ((intset x x* ...) (intset-add (intset x* ...) x)))) + (define (intset-remove bs i) (define (remove i shift root) (cond diff --git a/module/language/cps2/simplify.scm b/module/language/cps2/simplify.scm index a9355cd00..5aa1bb129 100644 --- a/module/language/cps2/simplify.scm +++ b/module/language/cps2/simplify.scm @@ -56,9 +56,10 @@ (persistent-intmap (intmap-fold (lambda (k v out) (let ((v* (f k v))) - (if (equal? v v*) - out - (intmap-replace! out k v*)))) + (cond + ((equal? v v*) out) + (v* (intmap-replace! out k v*)) + (else (intmap-remove out k))))) conts conts)))