aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Corallo2020-11-08 20:45:43 +0100
committerAndrea Corallo2020-11-08 21:22:53 +0100
commite20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6 (patch)
tree6906f11e9ac18a38cbd303f1c2e36940f0933f60
parenta5408d5715de5ee9b6858c6eb0638043f4cdb136 (diff)
downloademacs-e20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6.tar.gz
emacs-e20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6.zip
* lisp/emacs-lisp/comp.el (comp-fwprop-insn): Fix phi function.
-rw-r--r--lisp/emacs-lisp/comp.el27
1 files changed, 14 insertions, 13 deletions
diff --git a/lisp/emacs-lisp/comp.el b/lisp/emacs-lisp/comp.el
index c837e020603..887a6a503ec 100644
--- a/lisp/emacs-lisp/comp.el
+++ b/lisp/emacs-lisp/comp.el
@@ -2289,19 +2289,20 @@ Forward propagate immediate involed in assignments."
2289 (setf (comp-mvar-const-vld lval) t 2289 (setf (comp-mvar-const-vld lval) t
2290 (comp-mvar-constant lval) v 2290 (comp-mvar-constant lval) v
2291 (comp-mvar-type lval) (comp-strict-type-of v))) 2291 (comp-mvar-type lval) (comp-strict-type-of v)))
2292 (`(phi (,lval . _) . ,rest) 2292 (`(phi ,lval . ,rest)
2293 ;; Forward const prop here. 2293 (let ((rvals (mapcar #'car rest)))
2294 (when-let* ((vld (cl-every #'comp-mvar-const-vld rest)) 2294 ;; Forward const prop here.
2295 (consts (mapcar #'comp-mvar-constant rest)) 2295 (when-let* ((vld (cl-every #'comp-mvar-const-vld rvals))
2296 (x (car consts)) 2296 (consts (mapcar #'comp-mvar-constant rvals))
2297 (equals (cl-every (lambda (y) (equal x y)) consts))) 2297 (x (car consts))
2298 (setf (comp-mvar-const-vld lval) t 2298 (equals (cl-every (lambda (y) (equal x y)) consts)))
2299 (comp-mvar-constant lval) x)) 2299 (setf (comp-mvar-const-vld lval) t
2300 ;; Forward type propagation. 2300 (comp-mvar-constant lval) x))
2301 (when-let* ((types (mapcar #'comp-mvar-type rest)) 2301 ;; Forward type propagation.
2302 (non-empty (cl-notany #'null types)) 2302 (when-let* ((types (mapcar #'comp-mvar-type rvals))
2303 (x (comp-common-supertype types))) 2303 (non-empty (cl-notany #'null types))
2304 (setf (comp-mvar-type lval) x))))) 2304 (x (comp-common-supertype types)))
2305 (setf (comp-mvar-type lval) x))))))
2305 2306
2306(defun comp-fwprop* () 2307(defun comp-fwprop* ()
2307 "Propagate for set* and phi operands. 2308 "Propagate for set* and phi operands.