Function: comp--add-cond-cstrs-simple
comp--add-cond-cstrs-simple is a byte-compiled function defined in
comp.el.gz.
Signature
(comp--add-cond-cstrs-simple)
Documentation
comp--add-cstrs worker function for each selected function.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/comp.el.gz
(defun comp--add-cond-cstrs-simple ()
"`comp--add-cstrs' worker function for each selected function."
(cl-loop
;; Don't iterate over hash values directly as
;; `comp--add-cond-cstrs-target-block' can modify the hash table
;; content.
for b in (cl-loop for b being each hash-value of (comp-func-blocks comp-func)
collect b)
do
(cl-loop
named in-the-basic-block
for insn-seq on (comp-block-insns b)
do
(pcase insn-seq
(`((set ,(and (pred comp-mvar-p) tmp-mvar) ,(pred comp-mvar-p))
;; (comment ,_comment-str)
(cond-jump ,tmp-mvar ,obj2 . ,blocks))
(cl-loop
for branch-target-cell on blocks
for branch-target = (car branch-target-cell)
for negated in '(nil t)
when (comp--mvar-used-p tmp-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 tmp-mvar obj2 block-target negated))
finally (cl-return-from in-the-basic-block)))
(`((cond-jump ,obj1 ,obj2 . ,blocks))
(cl-loop
for branch-target-cell on blocks
for branch-target = (car branch-target-cell)
for negated in '(nil t)
when (comp--mvar-used-p obj1)
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 obj1 obj2 block-target negated))
finally (cl-return-from in-the-basic-block)))))))