]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't inhibit LAP-level DCE when switch ops are present
authorMattias Engdegård <mattiase@acm.org>
Tue, 17 Jan 2023 16:57:25 +0000 (17:57 +0100)
committerMattias Engdegård <mattiase@acm.org>
Fri, 27 Jan 2023 16:27:15 +0000 (17:27 +0100)
* 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.

lisp/emacs-lisp/byte-opt.el

index 039cebedb44213eaf7e893e2c3834cd5f0e00674..b1a46d520e66a7f4d629c3f68b7d1686bfc603c3 100644 (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)))))