]> git.eshelyaron.com Git - emacs.git/commit
Avoid traversing dead `if` branches in bytecode optimiser
authorMattias Engdegård <mattiase@acm.org>
Thu, 11 Feb 2021 16:34:17 +0000 (17:34 +0100)
committerMattias Engdegård <mattiase@acm.org>
Fri, 12 Feb 2021 19:52:05 +0000 (20:52 +0100)
commitea29908c1870417eba98f27525a6f2f571d65396
treef18b9ca13f2a19dd848b8c8edf95962aebfe29f4
parentc4459a10a6962d90adc4cdfada36175aaed99dfc
Avoid traversing dead `if` branches in bytecode optimiser

There is no point in traversing conditional branches that are
statically known never to be executed.  This saves some optimisation
effort, but more importantly prevents variable assignments and
references in those branches from blocking effective constant
propagation.

Also attempt to traverse as much as possible in an unconditional
context, which enables constant-propagation through (linear)
assignments.

* lisp/emacs-lisp/byte-opt.el (byte-optimize-form):
Rewrite the (tail) recursion into an explicit loop.  Normalise a
return value of (quote nil) to nil, for easier subsequent
optimisations.
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't
traverse dead `if` branches.  Use unconditional traversion context
when possible.
lisp/emacs-lisp/byte-opt.el