Mattias Engdegård
83983b6b7a
Constprop of lexical variables
...
Lexical variables bound to a constant value (symbol, number or string)
are substituted at their point of use and the variable then eliminated
if possible. Example:
(let ((x (+ 2 3))) (f x)) => (f 5)
This reduces code size, eliminates stack operations, and enables
further optimisations. The implementation is conservative, and is
strongly curtailed by the presence of variable mutation, conditions
and loops.
* lisp/emacs-lisp/byte-opt.el
(byte-optimize-enable-variable-constprop)
(byte-optimize-warn-eliminated-variable): New constants.
(byte-optimize--lexvars, byte-optimize--vars-outside-condition)
(byte-optimize--vars-outside-loop, byte-optimize--dynamic-vars):
New dynamic variables.
(byte-optimize--substitutable-p, byte-optimize-let-form):
New functions.
(byte-optimize-form-code-walker): Adapt clauses for variable
constprop, and add clauses for 'setq' and 'defvar'.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-var)
(bytecomp-test-get-var, bytecomp-test-identity)
(byte-opt-testsuite-arith-data): Add test cases.
2021-02-06 20:22:24 +01:00
..
2020-12-29 08:38:25 +01:00
2020-08-09 15:13:05 -05:00
2021-01-01 01:13:56 -08:00
2021-01-13 14:16:57 +01:00
2021-01-13 15:23:31 +01:00
2020-05-01 13:05:26 +02:00
2021-02-06 20:22:24 +01:00
2021-01-01 01:13:56 -08:00
2020-10-24 02:36:55 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2020-10-23 16:29:46 +02:00
2021-01-10 13:30:31 +01:00
2020-11-12 03:20:39 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2020-10-23 21:07:26 +02:00
2021-02-05 14:32:41 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2020-09-02 12:53:02 +02:00
2021-01-01 01:13:56 -08:00
2021-02-02 03:48:04 +02:00
2020-08-08 01:40:38 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-10 15:04:48 +01:00
2020-10-22 18:51:00 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2020-10-23 21:07:26 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-23 23:38:19 +00:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-29 16:49:12 -05:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-20 17:25:40 +01:00
2021-01-01 01:13:56 -08:00
2021-01-07 16:43:27 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-29 06:19:06 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-10 13:37:38 +00:00
2021-01-12 05:41:13 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-30 21:12:37 +02:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-20 02:46:17 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-13 18:54:09 +01:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-20 16:58:09 +01:00
2021-01-01 01:13:56 -08:00
2021-01-18 13:47:15 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-19 09:11:37 -03:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00
2021-01-01 01:13:56 -08:00