diff --git a/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp b/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp index 916b860..607e1e7 100644 --- a/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp +++ b/wip-duuqnd/user-side-compiler/backend/value-allocator.lisp @@ -6,7 +6,7 @@ ;;; allocator instead. (defparameter +accumulator-users+ - '(or ir-operation ir-assign)) + '(or ir-operation ir-assign ir-if)) (defun calls-exist-between-p (start end) (labels @@ -50,14 +50,14 @@ :not-saved) ((typep data 'ir-variable) :named-variable) - ((and (eql (next (definition data)) (last-use data)) - (typep (last-use data) +accumulator-users+) - (eql data (first (inputs (last-use data))))) - :accumulator) ((and (eql (next (definition data)) (last-use data)) (typep (last-use data) 'ir-if) (typep (definition data) 'ir-comparison)) :branch) + ((and (eql (next (definition data)) (last-use data)) + (typep (last-use data) +accumulator-users+) + (eql data (first (inputs (last-use data))))) + :accumulator) ((and (= (length (users data)) 1) (typep (last-use data) 'ir-call) (not (calls-exist-between-p (definition data) (last-use data))))