diff --git a/wip-duuqnd/user-side-compiler/middle/data.lisp b/wip-duuqnd/user-side-compiler/middle/data.lisp index 6ba6496..a9e6841 100644 --- a/wip-duuqnd/user-side-compiler/middle/data.lisp +++ b/wip-duuqnd/user-side-compiler/middle/data.lisp @@ -1,7 +1,8 @@ (in-package #:user-side-compiler) (defclass ir-data () - ((%definition :accessor definition :initarg :definition))) + ((%definition :accessor definition :initarg :definition) + (%last-use :accessor last-use))) (defclass ir-result (ir-data) ((%user :accessor user :initarg :user :initform nil))) diff --git a/wip-duuqnd/user-side-compiler/middle/optimizations.lisp b/wip-duuqnd/user-side-compiler/middle/optimizations.lisp index 2755b81..f33ca09 100644 --- a/wip-duuqnd/user-side-compiler/middle/optimizations.lisp +++ b/wip-duuqnd/user-side-compiler/middle/optimizations.lisp @@ -168,3 +168,10 @@ though I'm pretty sure it can't anyway.") (push input arguments)))) (loop :for (new . old) :in replacements :do (setf (inputs call) (substitute new old (inputs call))))))))) + +(defun compute-lifetime-knowledge (start-iblock) + (do-iblocks (iblock start-iblock) + (do-instructions (inst iblock) + (loop :for data :in (inputs inst) + :when (typep data 'ir-data) + :do (setf (last-use data) inst)))))