summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2024-03-29 15:36:45 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2024-03-29 15:36:45 -0400
commit717e7edc2ac1e4e04019319da19c5386077dfbea (patch)
tree8be169933633827069cb0e6530eabf6a161ba414
parentdd3e13469d75851f3d7907e3373d45032382a5f5 (diff)
downloademacs-717e7edc2ac1e4e04019319da19c5386077dfbea.tar.gz
* lisp/emacs-lisp/comp.el (comp--add-cond-cstrs): Consolidate 2 cases
-rw-r--r--lisp/emacs-lisp/comp.el36
1 files changed, 11 insertions, 25 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index 2544be85bb2..2ec55ed98ee 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -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)