diff options
| author | Alasdair Armstrong | 2019-03-27 19:21:24 +0000 |
|---|---|---|
| committer | Alasdair Armstrong | 2019-03-27 19:30:43 +0000 |
| commit | 989c7f8ab0bf908d0cd26b58c542d264c63b72fe (patch) | |
| tree | a29829bf822ad5ad1ab51e16a36a88961a231f1c /src/specialize.ml | |
| parent | 368168f2254d9e4de0c3fac599855e0cf5a0afaa (diff) | |
C: Generate C from sliced specifications
Diffstat (limited to 'src/specialize.ml')
| -rw-r--r-- | src/specialize.ml | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/specialize.ml b/src/specialize.ml index afce4b0f..5a7624bc 100644 --- a/src/specialize.ml +++ b/src/specialize.ml @@ -483,7 +483,7 @@ let specialize_id_overloads instantiations id (Defs defs) = valspecs are then re-specialized. This process is iterated until the whole spec is specialized. *) -let initial_calls = IdSet.of_list +let initial_calls = ref (IdSet.of_list [ mk_id "main"; mk_id "__SetConfig"; mk_id "__ListConfig"; @@ -491,10 +491,12 @@ let initial_calls = IdSet.of_list mk_id "decode"; mk_id "initialize_registers"; mk_id "append_64" (* used to construct bitvector literals in C backend *) - ] + ]) -let remove_unused_valspecs ?(initial_calls=initial_calls) env ast = - let calls = ref initial_calls in +let add_initial_calls ids = initial_calls := IdSet.union ids !initial_calls + +let remove_unused_valspecs env ast = + let calls = ref !initial_calls in let vs_ids = val_spec_ids ast in let inspect_exp = function @@ -527,14 +529,6 @@ let remove_unused_valspecs ?(initial_calls=initial_calls) env ast = List.fold_left (fun ast id -> Defs (remove_unused ast id)) ast (IdSet.elements unused) -let slice_defs env (Defs defs) keep_ids = - let keep = function - | DEF_fundef fd -> IdSet.mem (id_of_fundef fd) keep_ids - | _ -> true - in - let defs = List.filter keep defs in - remove_unused_valspecs env (Defs defs) ~initial_calls:keep_ids - let specialize_id spec id ast = let instantiations = instantiations_of spec id ast in let ast = specialize_id_valspec spec instantiations id ast in |
