From b7c4a37483eab09a8ae19cffd7567a4ab89b135d Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Tue, 1 Jul 2025 13:22:24 +0200 Subject: [PATCH] Make data keep track of their last use --- wip-duuqnd/user-side-compiler/middle/data.lisp | 3 ++- wip-duuqnd/user-side-compiler/middle/optimizations.lisp | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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)))))