Commit graph

15189 commits

Author SHA1 Message Date
Leonardo de Moura
7c86a4dae7 feat(library/compiler): add reduce_arity compilation step 2018-11-09 14:30:33 -08:00
Leonardo de Moura
19bf71eb9c chore(library/compiler/simp_app_args): use ll_infer_type 2018-11-09 13:18:28 -08:00
Leonardo de Moura
d3ad1cbfe1 feat(library/compiler): add type inference for ENF and LLNF 2018-11-09 13:17:11 -08:00
Leonardo de Moura
9e7d1d5bd2 chore(kernel/expr): remove leftover 2018-11-09 11:55:02 -08:00
Leonardo de Moura
37df96e3e7 feat(library/compiler/csimp): inline recursive functions marked with [inline_if_reduce] 2018-11-09 10:15:47 -08:00
Leonardo de Moura
182812a278 chore(library/init/lean/parser/token): make sure generate code does contain partially applied reader_t.or_else and reader_t.bind
@kha This one was crazy, the compiler created a join point for the
continuation of the match-expression. Each case of the match was
invoking the join point with a different parser. Two of the branches
were the partially applied `reader_t.bind` and `reader_t.orelse`.
This change did not improve the performance much, but it makes sure we
don't waste time trying to figure out why we have these two partial
applications in the call graph.
2018-11-08 17:39:46 -08:00
Leonardo de Moura
f38cbeda5f perf(library/compiler/csimp): avoid unnecessary local decl 2018-11-08 17:03:34 -08:00
Leonardo de Moura
6eca6bdb0e perf(library/init/lean/parser/term): avoid eta-expansion issues
cc @kha
2018-11-08 16:21:37 -08:00
Leonardo de Moura
1cb22b6801 perf(library/init/lean/parser/command): move common command parsers to the beginning of the list
@kha This modification saved 150k object allocations on my machine.

BTW, the function
```
def command_parser.run (commands : list command_parser) (p : command_parser)
  : parser_t command_parser_config id syntax :=
λ cfg, (p.run cfg).run_parsec $ λ _, any_of $ commands.map (λ p, p.run cfg)
```
is also affected by the problem I described at Zulip. It is another
example where eager eta-expansion is bad. Every time we call it, we
will create approx. 20 closures and 20 cons memory cells. We have at
least 600 commands in core.lean. So, just the `map` nested there will
generate 24k memory allocations. Moreover, the problem will get worse as we add
more commands.
2018-11-08 14:45:34 -08:00
Leonardo de Moura
ad9aa3bc19 perf(library/init/lean/parser/token): optimize symbol
Same trick used at `str`.

@kha: I also replaced `"token " ++ sym'` with `sym'`. We were creating
thousands of strings of the form "token ...".
2018-11-08 14:05:09 -08:00
Leonardo de Moura
0dfeb8a79c perf(library/init/lean/parser/parsec): optimize str and raw_str
Both `str` amd `raw_str` are used with string literals. This commit
makes sure we don't need to recompute the nested term
`dlist.singleton (repr s)`. This modification saves .2 secs when
parsing `core.lean` on my MacBook.

cc @kha
2018-11-08 11:18:21 -08:00
Sebastian Ullrich
eaeb0a40a5 chore(library/init/lean/parser): do not expose the parser cache as monad_state 2018-11-08 16:01:19 +01:00
Sebastian Ullrich
bd70dc1fc9 perf(library/init/lean/parser): move backtrackable state from parser_core_t to module_parser_m 2018-11-08 15:58:41 +01:00
Sebastian Ullrich
41f4a34d4b feat(library/init/lean/parser/token): cache hit statistics 2018-11-08 14:52:54 +01:00
Sebastian Ullrich
d77c6169f4 chore(library/init/lean/parser/combinators): node: small simplification 2018-11-08 10:43:17 +01:00
Leonardo de Moura
b56674cc25 fix(library/compiler/specialize): remove bogus optimization 2018-11-07 18:00:28 -08:00
Leonardo de Moura
df39be927d feat(library/compiler): make sure application arguments are free variables or neutral terms in LLNF 2018-11-07 17:25:20 -08:00
Leonardo de Moura
f9236592cc chore(library/compiler/llnf): remove dead code 2018-11-07 16:48:32 -08:00
Leonardo de Moura
474c743d8a fix(library/compiler/llnf): do not expand atomic values 2018-11-07 16:43:46 -08:00
Leonardo de Moura
17679799a2 fix(library/compiler/cse): must take a flag indicating whether we are applying optimization after/before erasure 2018-11-07 16:38:24 -08:00
Leonardo de Moura
1191dd4deb refactor(library/compiler): move mk_runtime_type to util 2018-11-07 15:19:24 -08:00
Leonardo de Moura
c285d48c96 feat(library/compiler/erase_irrelevant): simplify mk_runtime_type 2018-11-07 15:10:41 -08:00
Leonardo de Moura
687e9d076d feat(library/compiler): add _apply and _closure instructions to LLNF 2018-11-07 13:30:28 -08:00
Sebastian Ullrich
e2bf92ec21 feat(library/module_mgr,shell/lean): identify correct file on error in transitive import 2018-11-07 14:07:51 +01:00
Sebastian Ullrich
80a79336f2 chore(.gitignore): ignore library/Makefile 2018-11-07 09:30:32 +01:00
Sebastian Ullrich
0026b59a88 fix(tests/lean/macro_scopes): expected output 2018-11-07 09:11:49 +01:00
Leonardo de Moura
330e2700b1 chore(library/compiler/compiler): add trace.compiler.boxed option for debugging purposes 2018-11-06 16:55:02 -08:00
Leonardo de Moura
5acb5e63b1 feat(library/compiler): revise llnf instructions
Motivation: make sure we can generate "portable" C++ code. "Portable"
here means we can compile the generated code using 32 and 64 bit machines.
2018-11-06 16:55:02 -08:00
Leonardo de Moura
8af0c85d4f feat(library/compiler/erase_irrelevant): convert enumeration types into uint* types 2018-11-06 16:55:02 -08:00
Leonardo de Moura
83ebacb8af chore(library/compiler/util): style 2018-11-06 16:55:02 -08:00
Leonardo de Moura
9f3544aaa4 feat(library/compiler/erase_irrelevant): preserve enumeration types 2018-11-06 16:55:02 -08:00
Leonardo de Moura
6f03df871b chore(library/compiler): remove whnf_upto_runtime_type
It is not needed anymore.
2018-11-06 16:55:02 -08:00
Leonardo de Moura
e63721958b refactor(library/compiler): add is_enum_type auxiliary function 2018-11-06 16:55:02 -08:00
Leonardo de Moura
f404c5c446 refactor(library/init/data): make sure uint* and usize are irreducible
Remark: this commit breaks the support for `uint*` and `usize` in the old VM.
2018-11-06 16:55:02 -08:00
Leonardo de Moura
216a3632cc refactor(library/compiler/llnf): simplify llnf primitive instructions 2018-11-06 16:55:02 -08:00
Leonardo de Moura
39850d3b84 chore(library/compiler/llnf): remove dead global 2018-11-06 16:55:02 -08:00
Sebastian Ullrich
7fdfdb1784 chore(library/init/lean/parser): remove unnecessary class constraints 2018-11-06 21:45:08 +01:00
Sebastian Ullrich
a551c0d8c9 fix(library/module_mgr): compiling a file with a failed transitive dependency may have succeeded without output 2018-11-06 21:31:02 +01:00
Sebastian Ullrich
5a286f5e46 test(tests/lean/macro_scopes): macro scopes propagation test 2018-11-06 17:33:16 +01:00
Sebastian Ullrich
090c4c0ce7 feat(library/init/lean/syntax): add lazily propagated macro scopes to syntax_node 2018-11-06 16:46:50 +01:00
Leonardo de Moura
c108fc95cb feat(library/compiler/ir): basics 2018-11-05 17:04:23 -08:00
Leonardo de Moura
8de7637f75 feat(library/compiler): add to_ir skeleton 2018-11-05 17:04:23 -08:00
Sebastian Ullrich
fc4dcd19cf refactor(library/init/lean/parser): use ident.view in syntax.to_format 2018-11-05 17:57:00 +01:00
Sebastian Ullrich
dcb7566e53 fix(tests/lean/parser1): fix test 2018-11-05 17:40:11 +01:00
Sebastian Ullrich
7d6048c795 fix(library/message_builder): fix output of nested kernel exceptions 2018-11-05 17:37:21 +01:00
Sebastian Ullrich
507509b336 chore(library/Makefile.in): suppress comment output
I hate make
2018-11-05 17:15:01 +01:00
Sebastian Ullrich
c9bebb7411 feat(library/time_task): do not report inclusive times 2018-11-05 17:06:32 +01:00
Sebastian Ullrich
8c27f0aac6 refactor(frontends/lean/elaborator,library/init/lean): finish no_kind refactoring 2018-11-04 20:24:40 +01:00
Sebastian Ullrich
58df9cb813 chore(library/Makefile.in): prevent infinite make cycles 2018-11-04 20:24:40 +01:00
Sebastian Ullrich
09aa4f9ab3 chore(frontends/lean/elaborator): don't try to recover from errors in patterns 2018-11-04 19:03:00 +01:00