From 3966ff6e2262c14a20292418da9974d15b798f78 Mon Sep 17 00:00:00 2001 From: Thomas Gazagnaire Date: Mon, 25 Jul 2022 10:40:09 +0200 Subject: [PATCH] irmin-tezos: unroll allocation hotspot --- src/irmin-tezos/schema.ml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/irmin-tezos/schema.ml b/src/irmin-tezos/schema.ml index b5fc92fe6ff..20b46970756 100644 --- a/src/irmin-tezos/schema.ml +++ b/src/irmin-tezos/schema.ml @@ -103,8 +103,17 @@ struct let entries_t : entry list Irmin.Type.t = Irmin.Type.(list ~len:`Int64 entry_t) + let pre_hash_entry = Irmin.Type.(unstage (pre_hash entry_t)) let pre_hash_entries = Irmin.Type.(unstage (pre_hash entries_t)) - let pre_hash t = M.list t |> pre_hash_entries + let encode_bin_int64 = Irmin.Type.(unstage (pre_hash int64)) + + let pre_hash t f = + match M.length t with + | 0 -> pre_hash_entries [] f + | 1 -> + encode_bin_int64 1L f; + pre_hash_entry (List.hd (M.list t)) f + | _ -> pre_hash_entries (M.list t) f end include M