From ab9ff442efe4434e182f394b35ccc9bc4edfef01 Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Tue, 29 Jul 2025 18:57:33 +0200 Subject: [PATCH] Set up IBLOCK order during building to fix ordering bug --- user-side-compiler/interface.lisp | 1 - .../middle/graph-manipulation.lisp | 4 ++- user-side-compiler/middle/jigs.lisp | 29 ------------------- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/user-side-compiler/interface.lisp b/user-side-compiler/interface.lisp index d4b5eb3..232dc54 100644 --- a/user-side-compiler/interface.lisp +++ b/user-side-compiler/interface.lisp @@ -43,7 +43,6 @@ (builder (make-instance 'builder))) (build-begin builder iblock) (compile-node syntax-tree builder) - (fix-iblock-flow iblock) (unless (null (next iblock)) (make-iblock-names-unique (next iblock))) iblock)) diff --git a/user-side-compiler/middle/graph-manipulation.lisp b/user-side-compiler/middle/graph-manipulation.lisp index c67058c..6652fca 100644 --- a/user-side-compiler/middle/graph-manipulation.lisp +++ b/user-side-compiler/middle/graph-manipulation.lisp @@ -57,7 +57,9 @@ (defun build-begin (builder iblock) "Start BUILDER on a fresh IBLOCK." (when (slot-boundp builder '%iblock) - (setf (program iblock) (program (iblock builder)))) + (setf (program iblock) (program (iblock builder)) + (next (iblock builder)) iblock + (prev iblock) (iblock builder))) (setf (insertion-point builder) nil (iblock builder) iblock)) diff --git a/user-side-compiler/middle/jigs.lisp b/user-side-compiler/middle/jigs.lisp index 56b2927..efacbf6 100644 --- a/user-side-compiler/middle/jigs.lisp +++ b/user-side-compiler/middle/jigs.lisp @@ -53,34 +53,6 @@ (setf (name iblock) (format nil "~A_1" (name iblock))))))))) -(defun fix-iblock-flow (start-iblock) - (let ((reached '()) - (last nil) - (deferred '())) - (labels - ((fix-deferred () - (unless (null deferred) - (loop :for after :in (nreverse (pop deferred)) - :do (fix after last)))) - (fix (iblock prev) - (unless (member iblock reached) - (push iblock reached) - (unless (null prev) - (setf (next prev) iblock)) - (setf (prev iblock) prev - last iblock) - (fix-deferred) - (push '() deferred) - (loop :for s :in (successors iblock) - :if (typep s 'iblock-merge) - :do (pushnew s (car deferred)) - :else - :do (fix s last)) - (when (null prev) - (loop :until (null deferred) - :do (fix-deferred)))))) - (fix start-iblock nil)))) - (defmacro with-compilation-setup ((iblock builder &key add-return-p) &body body) `(let ((,iblock (make-instance 'iblock :name "toplevel" :program (make-instance 'ir-program))) (,builder (make-instance 'builder))) @@ -90,7 +62,6 @@ ,@body) (when ,add-return-p (build-insert-end (make-instance 'ir-return) ,builder)) - (fix-iblock-flow ,iblock) (unless (null (next ,iblock)) (make-iblock-names-unique (next ,iblock))))))