From 1a980555aa7db64af2fb745e696ea595fb142c4a Mon Sep 17 00:00:00 2001 From: Son Ho Date: Wed, 23 Feb 2022 18:28:53 +0100 Subject: Improve the code generation by inlining more let-bindings --- tests/hashmap/Hashmap.Funs.fst | 198 +++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 108 deletions(-) (limited to 'tests/hashmap') diff --git a/tests/hashmap/Hashmap.Funs.fst b/tests/hashmap/Hashmap.Funs.fst index d3d09765..4aa6f02c 100644 --- a/tests/hashmap/Hashmap.Funs.fst +++ b/tests/hashmap/Hashmap.Funs.fst @@ -8,7 +8,7 @@ include Hashmap.Clauses #set-options "--z3rlimit 50 --fuel 0 --ifuel 1" (** [hashmap::hash_key] *) -let hash_key_fwd (k : usize) : result usize = Return k +let hash_key_fwd (k : usize) : result usize = let i = k in Return i (** [hashmap::HashMap::allocate_slots] *) let rec hash_map_allocate_slots_fwd @@ -68,8 +68,7 @@ let rec hash_map_clear_slots_fwd_back (decreases (hash_map_clear_slots_decreases t slots i)) = let i0 = vec_len (list_t t) slots in - let b = i < i0 in - if b + if i < i0 then begin match vec_index_mut_back (list_t t) slots i ListNil with | Fail -> Fail @@ -79,21 +78,20 @@ let rec hash_map_clear_slots_fwd_back | Return i1 -> begin match hash_map_clear_slots_fwd_back t v i1 with | Fail -> Fail - | Return v0 -> Return v0 + | Return v0 -> let slots0 = v0 in Return slots0 end end end - else Return slots + else let slots0 = slots in Return slots0 (** [hashmap::HashMap::clear] *) let hash_map_clear_fwd_back (t : Type0) (self : hash_map_t t) : result (hash_map_t t) = let p = self.hash_map_max_load_factor in let i = self.hash_map_max_load in - let v = self.hash_map_slots in - begin match hash_map_clear_slots_fwd_back t v 0 with + begin match hash_map_clear_slots_fwd_back t self.hash_map_slots 0 with | Fail -> Fail - | Return v0 -> let self0 = Mkhash_map_t 0 p i v0 in Return self0 + | Return v -> let self0 = Mkhash_map_t 0 p i v in Return self0 end (** [hashmap::HashMap::len] *) @@ -108,13 +106,12 @@ let rec hash_map_insert_in_list_fwd = begin match ls with | ListCons ckey cvalue ls0 -> - let b = ckey = key in - if b + if ckey = key then Return false else begin match hash_map_insert_in_list_fwd t key value ls0 with | Fail -> Fail - | Return b0 -> Return b0 + | Return b -> Return b end | ListNil -> Return true end @@ -127,8 +124,7 @@ let rec hash_map_insert_in_list_back = begin match ls with | ListCons ckey cvalue ls0 -> - let b = ckey = key in - if b + if ckey = key then let ls1 = ListCons ckey value ls0 in Return ls1 else begin match hash_map_insert_in_list_back t key value ls0 with @@ -149,12 +145,12 @@ let hash_map_insert_no_resize_fwd_back let i0 = self.hash_map_num_entries in let p = self.hash_map_max_load_factor in let i1 = self.hash_map_max_load in - let v = self.hash_map_slots in - let i2 = vec_len (list_t t) v in + let i2 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i2 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_mut_fwd (list_t t) v hash_mod with + begin match vec_index_mut_fwd (list_t t) self.hash_map_slots hash_mod + with | Fail -> Fail | Return l -> begin match hash_map_insert_in_list_fwd t key value l with @@ -162,16 +158,18 @@ let hash_map_insert_no_resize_fwd_back | Return b -> if b then - begin match usize_add i0 1 with + begin match usize_add self.hash_map_num_entries 1 with | Fail -> Fail | Return i3 -> begin match hash_map_insert_in_list_back t key value l with | Fail -> Fail | Return l0 -> - begin match vec_index_mut_back (list_t t) v hash_mod l0 with + begin match + vec_index_mut_back (list_t t) self.hash_map_slots hash_mod l0 + with | Fail -> Fail - | Return v0 -> - let self0 = Mkhash_map_t i3 p i1 v0 in Return self0 + | Return v -> + let self0 = Mkhash_map_t i3 p i1 v in Return self0 end end end @@ -179,10 +177,11 @@ let hash_map_insert_no_resize_fwd_back begin match hash_map_insert_in_list_back t key value l with | Fail -> Fail | Return l0 -> - begin match vec_index_mut_back (list_t t) v hash_mod l0 with + begin match + vec_index_mut_back (list_t t) self.hash_map_slots hash_mod l0 + with | Fail -> Fail - | Return v0 -> - let self0 = Mkhash_map_t i0 p i1 v0 in Return self0 + | Return v -> let self0 = Mkhash_map_t i0 p i1 v in Return self0 end end end @@ -203,10 +202,10 @@ let rec hash_map_move_elements_from_list_fwd_back | Return h -> begin match hash_map_move_elements_from_list_fwd_back t h tl with | Fail -> Fail - | Return h0 -> Return h0 + | Return h0 -> let ntable0 = h0 in Return ntable0 end end - | ListNil -> Return ntable + | ListNil -> let ntable0 = ntable in Return ntable0 end (** [hashmap::HashMap::move_elements] *) @@ -216,8 +215,7 @@ let rec hash_map_move_elements_fwd_back (decreases (hash_map_move_elements_decreases t ntable slots i)) = let i0 = vec_len (list_t t) slots in - let b = i < i0 in - if b + if i < i0 then begin match vec_index_mut_fwd (list_t t) slots i with | Fail -> Fail @@ -235,31 +233,30 @@ let rec hash_map_move_elements_fwd_back | Return i1 -> begin match hash_map_move_elements_fwd_back t h v i1 with | Fail -> Fail - | Return (h0, v0) -> Return (h0, v0) + | Return (h0, v0) -> + let ntable0 = h0 in let slots0 = v0 in Return (ntable0, slots0) end end end end end - else Return (ntable, slots) + else let ntable0 = ntable in let slots0 = slots in Return (ntable0, slots0) (** [hashmap::HashMap::try_resize] *) let hash_map_try_resize_fwd_back (t : Type0) (self : hash_map_t t) : result (hash_map_t t) = let i = self.hash_map_num_entries in - let p = self.hash_map_max_load_factor in let i0 = self.hash_map_max_load in let v = self.hash_map_slots in - let i1 = vec_len (list_t t) v in + let i1 = vec_len (list_t t) self.hash_map_slots in begin match usize_div 4294967295 2 with | Fail -> Fail | Return n1 -> - let (i2, i3) = p in + let (i2, i3) = self.hash_map_max_load_factor in begin match usize_div n1 i2 with | Fail -> Fail | Return i4 -> - let b = i1 <= i4 in - if b + if i1 <= i4 then begin match usize_mul i1 2 with | Fail -> Fail @@ -267,13 +264,14 @@ let hash_map_try_resize_fwd_back begin match hash_map_new_with_capacity_fwd t i5 i2 i3 with | Fail -> Fail | Return h -> - begin match hash_map_move_elements_fwd_back t h v 0 with + begin match + hash_map_move_elements_fwd_back t h self.hash_map_slots 0 with | Fail -> Fail | Return (h0, v0) -> let i6 = h0.hash_map_max_load in - let v1 = h0.hash_map_slots in - let v2 = mem_replace_back (vec (list_t t)) v0 v1 in - let self0 = Mkhash_map_t i (i2, i3) i6 v2 in + let v1 = mem_replace_back (vec (list_t t)) v0 h0.hash_map_slots + in + let self0 = Mkhash_map_t i (i2, i3) i6 v1 in Return self0 end @@ -298,13 +296,12 @@ let hash_map_insert_fwd_back let p = h.hash_map_max_load_factor in let i1 = h.hash_map_max_load in let v = h.hash_map_slots in - let b = i > i1 in - if b + if i > h.hash_map_max_load then begin match hash_map_try_resize_fwd_back t (Mkhash_map_t i0 p i1 v) with | Fail -> Fail - | Return h0 -> Return h0 + | Return h0 -> let self0 = h0 in Return self0 end else let self0 = Mkhash_map_t i0 p i1 v in Return self0 end @@ -318,13 +315,12 @@ let rec hash_map_contains_key_in_list_fwd = begin match ls with | ListCons ckey x ls0 -> - let b = ckey = key in - if b + if ckey = key then Return true else begin match hash_map_contains_key_in_list_fwd t key ls0 with | Fail -> Fail - | Return b0 -> Return b0 + | Return b -> Return b end | ListNil -> Return false end @@ -335,12 +331,11 @@ let hash_map_contains_key_fwd begin match hash_key_fwd key with | Fail -> Fail | Return i -> - let v = self.hash_map_slots in - let i0 = vec_len (list_t t) v in + let i0 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i0 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_fwd (list_t t) v hash_mod with + begin match vec_index_fwd (list_t t) self.hash_map_slots hash_mod with | Fail -> Fail | Return l -> begin match hash_map_contains_key_in_list_fwd t key l with @@ -358,13 +353,12 @@ let rec hash_map_get_in_list_fwd = begin match ls with | ListCons ckey cvalue ls0 -> - let b = ckey = key in - if b + if ckey = key then Return cvalue else begin match hash_map_get_in_list_fwd t key ls0 with | Fail -> Fail - | Return x -> Return x + | Return x -> let x0 = x in Return x0 end | ListNil -> Fail end @@ -375,17 +369,16 @@ let hash_map_get_fwd begin match hash_key_fwd key with | Fail -> Fail | Return i -> - let v = self.hash_map_slots in - let i0 = vec_len (list_t t) v in + let i0 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i0 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_fwd (list_t t) v hash_mod with + begin match vec_index_fwd (list_t t) self.hash_map_slots hash_mod with | Fail -> Fail | Return l -> begin match hash_map_get_in_list_fwd t key l with | Fail -> Fail - | Return x -> Return x + | Return x -> let x0 = x in Return x0 end end end @@ -398,13 +391,12 @@ let rec hash_map_get_mut_in_list_fwd = begin match ls with | ListCons ckey cvalue ls0 -> - let b = ckey = key in - if b + if ckey = key then Return cvalue else begin match hash_map_get_mut_in_list_fwd t key ls0 with | Fail -> Fail - | Return x -> Return x + | Return x -> let x0 = x in Return x0 end | ListNil -> Fail end @@ -417,9 +409,8 @@ let rec hash_map_get_mut_in_list_back = begin match ls with | ListCons ckey cvalue ls0 -> - let b = ckey = key in - if b - then let ls1 = ListCons ckey ret ls0 in Return ls1 + if ckey = key + then let x = ret in let ls1 = ListCons ckey x ls0 in Return ls1 else begin match hash_map_get_mut_in_list_back t key ls0 ret with | Fail -> Fail @@ -434,17 +425,17 @@ let hash_map_get_mut_fwd begin match hash_key_fwd key with | Fail -> Fail | Return i -> - let v = self.hash_map_slots in - let i0 = vec_len (list_t t) v in + let i0 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i0 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_mut_fwd (list_t t) v hash_mod with + begin match vec_index_mut_fwd (list_t t) self.hash_map_slots hash_mod + with | Fail -> Fail | Return l -> begin match hash_map_get_mut_in_list_fwd t key l with | Fail -> Fail - | Return x -> Return x + | Return x -> let x0 = x in Return x0 end end end @@ -461,20 +452,21 @@ let hash_map_get_mut_back let i0 = self.hash_map_num_entries in let p = self.hash_map_max_load_factor in let i1 = self.hash_map_max_load in - let v = self.hash_map_slots in - let i2 = vec_len (list_t t) v in + let i2 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i2 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_mut_fwd (list_t t) v hash_mod with + begin match vec_index_mut_fwd (list_t t) self.hash_map_slots hash_mod + with | Fail -> Fail | Return l -> begin match hash_map_get_mut_in_list_back t key l ret with | Fail -> Fail | Return l0 -> - begin match vec_index_mut_back (list_t t) v hash_mod l0 with + begin match + vec_index_mut_back (list_t t) self.hash_map_slots hash_mod l0 with | Fail -> Fail - | Return v0 -> let self0 = Mkhash_map_t i0 p i1 v0 in Return self0 + | Return v -> let self0 = Mkhash_map_t i0 p i1 v in Return self0 end end end @@ -489,8 +481,7 @@ let rec hash_map_remove_from_list_fwd = begin match ls with | ListCons ckey x tl -> - let b = ckey = key in - if b + if ckey = key then let mv_ls = mem_replace_fwd (list_t t) (ListCons ckey x tl) ListNil in begin match mv_ls with @@ -513,12 +504,11 @@ let rec hash_map_remove_from_list_back = begin match ls with | ListCons ckey x tl -> - let b = ckey = key in - if b + if ckey = key then let mv_ls = mem_replace_fwd (list_t t) (ListCons ckey x tl) ListNil in begin match mv_ls with - | ListCons i cvalue tl0 -> Return tl0 + | ListCons i cvalue tl0 -> let ls0 = tl0 in Return ls0 | ListNil -> Fail end else @@ -535,13 +525,12 @@ let hash_map_remove_fwd begin match hash_key_fwd key with | Fail -> Fail | Return i -> - let i0 = self.hash_map_num_entries in - let v = self.hash_map_slots in - let i1 = vec_len (list_t t) v in - begin match usize_rem i i1 with + let i0 = vec_len (list_t t) self.hash_map_slots in + begin match usize_rem i i0 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_mut_fwd (list_t t) v hash_mod with + begin match vec_index_mut_fwd (list_t t) self.hash_map_slots hash_mod + with | Fail -> Fail | Return l -> begin match hash_map_remove_from_list_fwd t key l with @@ -550,7 +539,7 @@ let hash_map_remove_fwd begin match x with | None -> Return None | Some x0 -> - begin match usize_sub i0 1 with + begin match usize_sub self.hash_map_num_entries 1 with | Fail -> Fail | Return _ -> Return (Some x0) end @@ -569,12 +558,12 @@ let hash_map_remove_back let i0 = self.hash_map_num_entries in let p = self.hash_map_max_load_factor in let i1 = self.hash_map_max_load in - let v = self.hash_map_slots in - let i2 = vec_len (list_t t) v in + let i2 = vec_len (list_t t) self.hash_map_slots in begin match usize_rem i i2 with | Fail -> Fail | Return hash_mod -> - begin match vec_index_mut_fwd (list_t t) v hash_mod with + begin match vec_index_mut_fwd (list_t t) self.hash_map_slots hash_mod + with | Fail -> Fail | Return l -> begin match hash_map_remove_from_list_fwd t key l with @@ -585,23 +574,26 @@ let hash_map_remove_back begin match hash_map_remove_from_list_back t key l with | Fail -> Fail | Return l0 -> - begin match vec_index_mut_back (list_t t) v hash_mod l0 with + begin match + vec_index_mut_back (list_t t) self.hash_map_slots hash_mod l0 + with | Fail -> Fail - | Return v0 -> - let self0 = Mkhash_map_t i0 p i1 v0 in Return self0 + | Return v -> let self0 = Mkhash_map_t i0 p i1 v in Return self0 end end | Some x0 -> - begin match usize_sub i0 1 with + begin match usize_sub self.hash_map_num_entries 1 with | Fail -> Fail | Return i3 -> begin match hash_map_remove_from_list_back t key l with | Fail -> Fail | Return l0 -> - begin match vec_index_mut_back (list_t t) v hash_mod l0 with + begin match + vec_index_mut_back (list_t t) self.hash_map_slots hash_mod l0 + with | Fail -> Fail - | Return v0 -> - let self0 = Mkhash_map_t i3 p i1 v0 in Return self0 + | Return v -> + let self0 = Mkhash_map_t i3 p i1 v in Return self0 end end end @@ -631,9 +623,7 @@ let test1_fwd : result unit = begin match hash_map_get_fwd u64 h3 128 with | Fail -> Fail | Return i -> - let b = i = 18 in - let b0 = not b in - if b0 + if not (i = 18) then Fail else begin match hash_map_get_mut_back u64 h3 1024 56 with @@ -642,9 +632,7 @@ let test1_fwd : result unit = begin match hash_map_get_fwd u64 h4 1024 with | Fail -> Fail | Return i0 -> - let b1 = i0 = 56 in - let b2 = not b1 in - if b2 + if not (i0 = 56) then Fail else begin match hash_map_remove_fwd u64 h4 1024 with @@ -653,9 +641,7 @@ let test1_fwd : result unit = begin match x with | None -> Fail | Some x0 -> - let b3 = x0 = 56 in - let b4 = not b3 in - if b4 + if not (x0 = 56) then Fail else begin match hash_map_remove_back u64 h4 1024 with @@ -664,26 +650,22 @@ let test1_fwd : result unit = begin match hash_map_get_fwd u64 h5 0 with | Fail -> Fail | Return i1 -> - let b5 = i1 = 42 in - let b6 = not b5 in - if b6 + if not (i1 = 42) then Fail else begin match hash_map_get_fwd u64 h5 128 with | Fail -> Fail | Return i2 -> - let b7 = i2 = 18 in - let b8 = not b7 in - if b8 + if not (i2 = 18) then Fail else begin match hash_map_get_fwd u64 h5 1056 with | Fail -> Fail | Return i3 -> - let b9 = i3 = 256 in - let b10 = not b9 in - if b10 then Fail else Return () + if not (i3 = 256) + then Fail + else Return () end end end -- cgit v1.2.3