diff options
| author | Andrea Corallo | 2020-11-08 20:45:43 +0100 |
|---|---|---|
| committer | Andrea Corallo | 2020-11-08 21:22:53 +0100 |
| commit | e20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6 (patch) | |
| tree | 6906f11e9ac18a38cbd303f1c2e36940f0933f60 | |
| parent | a5408d5715de5ee9b6858c6eb0638043f4cdb136 (diff) | |
| download | emacs-e20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6.tar.gz emacs-e20cdf937e74ebcaa2c6dabb63be1c20a6ea44f6.zip | |
* lisp/emacs-lisp/comp.el (comp-fwprop-insn): Fix phi function.
| -rw-r--r-- | lisp/emacs-lisp/comp.el | 27 |
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. |