]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/comp.el (comp--add-cond-cstrs): Consolidate 2 cases
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 29 Mar 2024 19:36:45 +0000 (15:36 -0400)
committerEshel Yaron <me@eshelyaron.com>
Sat, 30 Mar 2024 19:36:30 +0000 (20:36 +0100)
(cherry picked from commit 717e7edc2ac1e4e04019319da19c5386077dfbea)

lisp/emacs-lisp/comp.el

index e5262e11d612eedd3ea5768051db2d80c2751d69..d6812d2e969cd8443d5e4fcf4e3fbd586cf3b164 100644 (file)
@@ -2036,37 +2036,23 @@ TARGET-BB-SYM is the symbol name of the target block."
               (,(pred comp--call-op-p)
                ,(and (pred comp--known-predicate-p) fun)
                ,op))
-        ;; (comment ,_comment-str)
-        (cond-jump ,cmp-res ,(pred comp-mvar-p) . ,blocks))
-       (cl-loop
-        with target-mvar = (comp--cond-cstrs-target-mvar op (car insns-seq) b)
-        for branch-target-cell on blocks
-        for branch-target = (car branch-target-cell)
-        for negated in '(t nil)
-        when (comp--mvar-used-p target-mvar)
-        do
-        (let ((block-target (comp--add-cond-cstrs-target-block b branch-target)))
-          (setf (car branch-target-cell) (comp-block-name block-target))
-          (comp--emit-assume 'and target-mvar (if negated
-                                                  (comp--pred-to-neg-cstr fun)
-                                                (comp--pred-to-pos-cstr fun))
-                             block-target nil))
-        finally (cl-return-from in-the-basic-block)))
-      ;; Match predicate on the negated branch (unless).
-      (`((set ,(and (pred comp-mvar-p) cmp-res)
-              (,(pred comp--call-op-p)
-               ,(and (pred comp--known-predicate-p) fun)
-               ,op))
-         (set ,neg-cmp-res (call eq ,cmp-res ,(pred comp-cstr-null-p)))
-        (cond-jump ,neg-cmp-res ,(pred comp-mvar-p) . ,blocks))
+         . ,(or
+            ;; (comment ,_comment-str)
+            (and `((cond-jump ,cmp-res ,(pred comp-mvar-p) . ,blocks))
+                 (let negated-branch nil))
+             (and `((set ,neg-cmp-res
+                        (call eq ,cmp-res ,(pred comp-cstr-null-p)))
+                   (cond-jump ,neg-cmp-res ,(pred comp-mvar-p) . ,blocks))
+                 (let negated-branch t))))
        (cl-loop
         with target-mvar = (comp--cond-cstrs-target-mvar op (car insns-seq) b)
         for branch-target-cell on blocks
         for branch-target = (car branch-target-cell)
-        for negated in '(nil t)
+        for negated in (if negated-branch '(nil t) '(t nil))
         when (comp--mvar-used-p target-mvar)
         do
-        (let ((block-target (comp--add-cond-cstrs-target-block b branch-target)))
+        (let ((block-target (comp--add-cond-cstrs-target-block
+                             b branch-target)))
           (setf (car branch-target-cell) (comp-block-name block-target))
           (comp--emit-assume 'and target-mvar (if negated
                                                   (comp--pred-to-neg-cstr fun)