diff options
| author | letouzey | 2010-09-30 17:38:29 +0000 |
|---|---|---|
| committer | letouzey | 2010-09-30 17:38:29 +0000 |
| commit | 0373800479dfeefbe6dabccaa476c42a368f6d46 (patch) | |
| tree | 7f532726b6acd17b7193fa105de3169e46760baa | |
| parent | eab82e1f4d3c43c894383d54bbfcf9eea112de94 (diff) | |
Speed-up refine by avoiding some calls to Evd.fold
Instead of the full Evd.fold, Evd.fold_undefined seems enough in
- Evarutil.push_dependent_evars
- the nf_evars call in Evarutil.evars_to_metas
(we hence create a function nf_evars_undefined and use it there)
This should bring back Compcert into reasonable compilation time
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@13478 85f007b7-540e-0410-9357-904b9bb8a0f7
| -rw-r--r-- | pretyping/evarutil.ml | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml index 4ad823e066..80fb4d94e9 100644 --- a/pretyping/evarutil.ml +++ b/pretyping/evarutil.ml @@ -59,8 +59,15 @@ let nf_evar_info evc info = | Evar_empty -> Evar_empty | Evar_defined c -> Evar_defined (Reductionops.nf_evar evc c) } -let nf_evars evm = Evd.fold (fun ev evi evm' -> Evd.add evm' ev (nf_evar_info evm evi)) - evm Evd.empty +let nf_evars evm = + Evd.fold + (fun ev evi evm' -> Evd.add evm' ev (nf_evar_info evm evi)) + evm Evd.empty + +let nf_evars_undefined evm = + Evd.fold_undefined + (fun ev evi evm' -> Evd.add evm' ev (nf_evar_info evm evi)) + evm Evd.empty let nf_evar_map evd = Evd.evars_reset_evd (nf_evars evd) evd @@ -86,7 +93,7 @@ let collect_evars emap c = list_uniquize (collrec [] c) let push_dependent_evars sigma emap = - Evd.fold (fun ev {evar_concl = ccl} (sigma',emap') -> + Evd.fold_undefined (fun ev {evar_concl = ccl} (sigma',emap') -> List.fold_left (fun (sigma',emap') ev -> (Evd.add sigma' ev (Evd.find emap' ev),Evd.remove emap' ev)) @@ -111,7 +118,7 @@ let push_duplicated_evars sigma emap c = (* replaces a mapping of existentials into a mapping of metas. Problem if an evar appears in the type of another one (pops anomaly) *) let evars_to_metas sigma (emap, c) = - let emap = nf_evars emap in + let emap = nf_evars_undefined emap in let sigma',emap' = push_dependent_evars sigma emap in let sigma',emap' = push_duplicated_evars sigma' emap' c in let change_exist evar = |
