1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 06:20:55 -08:00

Don't inhibit LAP-level DCE when switch ops are present

* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Allow removal of unreachable basic blocks in the LAP peephole
optimiser even when switch ops are present.  The origins of
this apparently unnecessary condition are unclear.
This commit is contained in:
Mattias Engdegård 2023-01-17 17:57:25 +01:00
parent 18fbcce975
commit 627ac228b2

View file

@ -2227,18 +2227,12 @@ If FOR-EFFECT is non-nil, the return value is assumed to be of no importance."
;;
;; goto ... --> goto <delete until TAG or end>
;; return ... --> return <delete until TAG or end>
;; (unless a jump-table is being used, where deleting may affect
;; other valid case bodies)
;;
((and (memq (car lap0) '(byte-goto byte-return))
(not (memq (car lap1) '(TAG nil)))
;; FIXME: Instead of deferring simply when jump-tables are
;; being used, keep a list of tags used for switch tags and
;; use them instead (see `byte-compile-inline-lapcode').
(not byte-compile-jump-tables))
(not (memq (car lap1) '(TAG nil))))
(setq tmp rest)
(let ((i 0)
(opt-p (memq byte-optimize-log '(t lap)))
(opt-p (memq byte-optimize-log '(t byte)))
str deleted)
(while (and (setq tmp (cdr tmp))
(not (eq 'TAG (car (car tmp)))))