feat(library/type_context): add compilation flag for disabling type inference cache

This commit is contained in:
Leonardo de Moura 2017-02-21 20:17:25 -08:00
parent 09819cb159
commit 321105099f
3 changed files with 35 additions and 0 deletions

View file

@ -40,6 +40,7 @@ option(FREE_VAR_RANGE_OPT "FREE_VAR_RANGE_OPT" ON)
option(HAS_LOCAL_OPT "HAS_LOCAL_OPT" ON)
option(ABSTRACTION_CACHE "ABSTRACTION_CACHE" ON)
option(TYPE_CLASS_CACHE "TYPE_CLASS_CACHE" ON)
option(TYPE_INFER_CACHE "TYPE_INFER_CACHE" ON)
# emacs site-lisp dir
set(EMACS_LISP_DIR "share/emacs/site-lisp/lean" CACHE STRING "emacs site-lisp dir")
@ -64,6 +65,10 @@ if (NOT("${TYPE_CLASS_CACHE}" MATCHES "ON"))
set(LEAN_EXTRA_CXX_FLAGS "${LEAN_EXTRA_CXX_FLAGS} -D LEAN_NO_TYPE_CLASS_CACHE")
endif()
if (NOT("${TYPE_INFER_CACHE}" MATCHES "ON"))
set(LEAN_EXTRA_CXX_FLAGS "${LEAN_EXTRA_CXX_FLAGS} -D LEAN_NO_TYPE_INFER_CACHE")
endif()
message(STATUS "Lean emacs-mode will be installed at "
"${CMAKE_INSTALL_PREFIX}/${EMACS_LISP_DIR}")
message(STATUS "Lean library will be installed at "

View file

@ -859,11 +859,13 @@ expr type_context::infer_core(expr const & e) {
lean_assert(!is_var(e));
lean_assert(closed(e));
#ifndef LEAN_NO_TYPE_INFER_CACHE
auto & cache = m_cache->m_infer_cache;
unsigned postponed_sz = m_postponed.size();
auto it = cache.find(e);
if (it != cache.end())
return it->second;
#endif
reset_used_assignment reset(*this);
@ -900,8 +902,10 @@ expr type_context::infer_core(expr const & e) {
break;
}
#ifndef LEAN_NO_TYPE_INFER_CACHE
if (!m_used_assignment && postponed_sz == m_postponed.size())
cache.insert(mk_pair(e, r));
#endif
return r;
}

26
tmp/perf.info Normal file
View file

@ -0,0 +1,26 @@
NO FREE VAR OPT base
../../library/init/algebra/ordered_field.lean 2.64 2.00
../../library/init/algebra/ordered_group.lean 1.76 1.55
../../library/init/data/list/lemmas.lean 1.18 1.16
NO HAS LOCAL
../../library/init/algebra/ordered_field.lean 2.00 2.00
../../library/init/algebra/ordered_group.lean 1.55 1.55
../../library/init/data/list/lemmas.lean 1.18 1.16
NO TYPE CLASS CACHE
../../library/init/algebra/ordered_field.lean 2.20 2.00
../../library/init/algebra/ordered_group.lean 1.58 1.55
../../library/init/data/list/lemmas.lean 1.22 1.16
../../perf/bench30.lean 1.08 (0.62) 0.74 (0.30 elab) (over 2300 type class resolution problems)
NO TYPE INFERENCE CACHE
../../library/init/algebra/ordered_field.lean 2.14 2.00
../../library/init/algebra/ordered_group.lean 1.57 1.55
../../library/init/data/list/lemmas.lean 1.17 1.16
../../perf/bench30.lean 1.30 (0.83) 0.74 (0.30 elab) (over 2300 type class resolution problems)