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:
parent
18fbcce975
commit
627ac228b2
1 changed files with 2 additions and 8 deletions
|
|
@ -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)))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue