summaryrefslogtreecommitdiff
path: root/src/specialize.ml
diff options
context:
space:
mode:
authorBrian Campbell2019-01-29 18:46:58 +0000
committerBrian Campbell2019-01-29 18:46:58 +0000
commit36fd3c158c08af5b48d9801a607f3be812d2ecc7 (patch)
tree64dcabf7f53d55471da4a8534f36531798693a04 /src/specialize.ml
parent29ce01be165b8ed46cb2f8edacfc91b653efb869 (diff)
Add an option to crudely slice a function out of a Sail model
Not ideal because it keeps everything that's not a function, but good enough for quick tests extracted from arm.
Diffstat (limited to 'src/specialize.ml')
-rw-r--r--src/specialize.ml15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/specialize.ml b/src/specialize.ml
index e7f686d8..00357557 100644
--- a/src/specialize.ml
+++ b/src/specialize.ml
@@ -379,8 +379,11 @@ let specialize_id_overloads instantiations id (Defs defs) =
therefore remove all unused valspecs. Remaining polymorphic
valspecs are then re-specialized. This process is iterated until
the whole spec is specialized. *)
-let remove_unused_valspecs env ast =
- let calls = ref (IdSet.of_list [mk_id "main"; mk_id "__SetConfig"; mk_id "__ListConfig"; mk_id "execute"; mk_id "decode"; mk_id "initialize_registers"; mk_id "append_64"]) in
+
+let initial_calls = (IdSet.of_list [mk_id "main"; mk_id "__SetConfig"; mk_id "__ListConfig"; mk_id "execute"; mk_id "decode"; mk_id "initialize_registers"; mk_id "append_64"])
+
+let remove_unused_valspecs ?(initial_calls=initial_calls) env ast =
+ let calls = ref initial_calls in
let vs_ids = Initial_check.val_spec_ids ast in
let inspect_exp = function
@@ -413,6 +416,14 @@ let remove_unused_valspecs 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 id ast =
let instantiations = instantiations_of id ast in
let ast = specialize_id_valspec instantiations id ast in