From e81643bef500e1f1ec49d152f7db1ffc5a74ecd5 Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Thu, 31 Dec 2020 11:27:53 +0100 Subject: [PATCH] * Add `comp-insert-insn' * lisp/emacs-lisp/comp.el (comp-insert-insn): New inline. (comp-emit-call-cstr): Split logic and call `comp-insert-insn'. --- lisp/emacs-lisp/comp.el | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el index b6ade0b99db..d7578fdcc07 100644 --- a/lisp/emacs-lisp/comp.el +++ b/lisp/emacs-lisp/comp.el @@ -2391,16 +2391,21 @@ TARGET-BB-SYM is the symbol name of the target block." (comp-emit-assume 'and target-mvar cstr block-target negated)) finally (cl-return-from in-the-basic-block))))))) +(defsubst comp-insert-insn (insn insn-cell) + "Insert INSN as second insn of INSN-CELL." + (let ((next-cell (cdr insn-cell)) + (new-cell `(,insn))) + (setf (cdr insn-cell) new-cell + (cdr new-cell) next-cell + (comp-func-ssa-status comp-func) 'dirty))) + (defun comp-emit-call-cstr (mvar call-cell cstr) "Emit a constraint CSTR for MVAR after CALL-CELL." - (let* ((next-cell (cdr call-cell)) - (new-mvar (make-comp-mvar :slot (comp-mvar-slot mvar))) + (let* ((new-mvar (make-comp-mvar :slot (comp-mvar-slot mvar))) ;; Have new-mvar as LHS *and* RHS to ensure monotonicity and ;; fwprop convergence!! - (new-cell `((assume ,new-mvar (and ,new-mvar ,mvar ,cstr))))) - (setf (cdr call-cell) new-cell - (cdr new-cell) next-cell - (comp-func-ssa-status comp-func) 'dirty))) + (insn `(assume ,new-mvar (and ,new-mvar ,mvar ,cstr)))) + (comp-insert-insn insn call-cell))) (defun comp-lambda-list-gen (lambda-list) "Return a generator to iterate over LAMBDA-LIST." -- 2.39.5