summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/byte-opt.el
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2023-01-17 17:57:25 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2023-01-27 17:27:15 +0100
commit627ac228b2ecdf179f36ea41fd0254c091744e4b (patch)
treea0edd595805a2d8a181eab2c0e58cfa480ba3bdf /lisp/emacs-lisp/byte-opt.el
parent18fbcce9757165689df109db8f7b528a57335ae2 (diff)
downloademacs-627ac228b2ecdf179f36ea41fd0254c091744e4b.tar.gz
emacs-627ac228b2ecdf179f36ea41fd0254c091744e4b.tar.bz2
emacs-627ac228b2ecdf179f36ea41fd0254c091744e4b.zip
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.
Diffstat (limited to 'lisp/emacs-lisp/byte-opt.el')
-rw-r--r--lisp/emacs-lisp/byte-opt.el10
1 files changed, 2 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 039cebedb44..b1a46d520e6 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -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)))))