1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 23:00:22 +02:00

Bug-fix to devirtualize-integers pass

* module/language/cps/devirtualize-integers.scm (peel-trace): Only
  terminate a trace at a branch if the set of live vars is empty.
This commit is contained in:
Andy Wingo 2018-01-07 12:58:32 +01:00
parent 7162c758b3
commit d4addf3792

View file

@ -170,7 +170,7 @@ the trace should be referenced outside of it."
(can-terminate-trace? uses-of-interest?) (can-terminate-trace? uses-of-interest?)
(peeled-args (rename-uses args))) (peeled-args (rename-uses args)))
(cond (cond
((not (any-use-of-interest? args)) ((not uses-of-interest?)
(fail)) (fail))
((bailout? kt) ((bailout? kt)
(continue kf live-vars defs-of-interest? can-terminate-trace? (continue kf live-vars defs-of-interest? can-terminate-trace?
@ -182,12 +182,14 @@ the trace should be referenced outside of it."
(lambda (kt) (lambda (kt)
(build-term (build-term
($branch kf kt src op param peeled-args))))) ($branch kf kt src op param peeled-args)))))
(else ((eq? live-vars empty-intmap)
(with-cps cps (with-cps cps
(letk label* (letk label*
($kargs names peeled-vars ($kargs names peeled-vars
($branch kf kt src op param peeled-args))) ($branch kf kt src op param peeled-args)))
label*))))) label*))
(else
(fail)))))
(($ $continue k src exp) (($ $continue k src exp)
(match exp (match exp
(($ $const) (($ $const)