]> git.eshelyaron.com Git - emacs.git/commit
LAP peephole optimiser improvementsa
authorMattias Engdegård <mattiase@acm.org>
Fri, 10 Feb 2023 13:38:26 +0000 (14:38 +0100)
committerMattias Engdegård <mattiase@acm.org>
Sat, 11 Feb 2023 11:52:18 +0000 (12:52 +0100)
commit85a2eb2c789e7f9c1afa838817b3e9ebecb49da4
tree5f7bf9440b12a25a9dbf2d5e02f99f7986c18cb0
parentdc3604cadfa8f4bc3e5d9346029e48b4268fcd60
LAP peephole optimiser improvementsa

* lisp/emacs-lisp/byte-opt.el (byte-optimize-lapcode):
Make the improvements:

- Add the rule

    stack-ref(X) discardN-preserve-tos(Y)
    --> discard(Y) stack-ref(X-Y),                X≥Y
        discard(X) discardN-preserve-tos(Y-X-1),  X<Y

  with the usual equivalences:

    stack-set(1) = discardN-preserve-tos(1)
    stack-ref(0) = dup
    discard(0) = discardN-preserve-tos(0) = no-op

  This rule hoists stack reduction to where it is more likely to be
  exploited further, may reduce the op size through smaller
  immediates, and sometimes removes either or both operations
  outright.

  The rule is inhibited by an immediately following `return` op
  because other rules will produce better code in that case.

- Add the rule

    (discardN-preserve-tos|dup) OP return --> OP return

  where OP is a unary operation such as `not` or `car`.

- Generalise a previous rule to

    NOEFFECT PRODUCER return  -->  PRODUCER return

  where PRODUCER is now any op that pushes a value without looking at
  the stack: const, varref, point etc.
lisp/emacs-lisp/byte-opt.el