Skip to content

Commit 17cf5e1

Browse files
committed
WIP
1 parent 86b6a9f commit 17cf5e1

File tree

1 file changed

+7
-24
lines changed

1 file changed

+7
-24
lines changed

compiler/lib/code.ml

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,6 @@ type block =
469469
type program =
470470
{ start : Addr.t
471471
; blocks : block Addr.Map.t
472-
; free_pc : Addr.t
473472
}
474473

475474
let start p = p.start
@@ -498,14 +497,7 @@ let free_pc p =
498497
| None -> p.start + 1
499498
| Some (pc, _) -> pc + 1
500499

501-
let program start blocks =
502-
{ start
503-
; blocks
504-
; free_pc =
505-
(match Addr.Map.max_binding_opt blocks with
506-
| None -> start + 1
507-
| Some (pc, _) -> pc + 1)
508-
}
500+
let program start blocks = { start; blocks }
509501

510502
let map_blocks ~f p = { p with blocks = Addr.Map.map f p.blocks }
511503

@@ -694,29 +686,21 @@ let fold_closures p f accu =
694686

695687
(****)
696688

697-
let prepend ({ start; blocks; free_pc } as p) body =
689+
let prepend ({ start; blocks } as p) body =
698690
match body with
699691
| [] -> p
700692
| _ -> (
701693
match Addr.Map.find start blocks with
702694
| block ->
703695
{ p with
704696
blocks = Addr.Map.add start { block with body = body @ block.body } blocks
705-
}
706-
| exception Not_found ->
707-
let new_start = free_pc in
708-
let blocks =
709-
Addr.Map.add new_start { params = []; body; branch = Stop } blocks
710-
in
711-
let free_pc = free_pc + 1 in
712-
{ start = new_start; blocks; free_pc })
697+
})
713698

714699
let empty_block = { params = []; body = []; branch = Stop }
715700

716701
let empty =
717702
let start = 0 in
718-
let blocks = Addr.Map.singleton start empty_block in
719-
{ start; blocks; free_pc = start + 1 }
703+
program start (Addr.Map.singleton start empty_block)
720704

721705
let is_empty p =
722706
match Addr.Map.cardinal p.blocks with
@@ -934,7 +918,7 @@ let cont_compare (pc, args) (pc', args') =
934918

935919
let with_invariant = Debug.find "invariant"
936920

937-
let do_compact { blocks; start; free_pc = _ } =
921+
let do_compact { blocks; start } =
938922
let remap =
939923
let max = fst (Addr.Map.max_binding blocks) in
940924
let a = Array.make (max + 1) 0 in
@@ -971,9 +955,8 @@ let do_compact { blocks; start; free_pc = _ } =
971955
blocks
972956
Addr.Map.empty
973957
in
974-
let free_pc = (Addr.Map.max_binding blocks |> fst) + 1 in
975958
let start = remap.(start) in
976-
{ blocks; start; free_pc }
959+
program start blocks
977960

978961
let compact p =
979962
let t = Timer.make () in
@@ -994,7 +977,7 @@ let compact p =
994977
p
995978

996979
let used_blocks p =
997-
let visited = BitSet.create' p.free_pc in
980+
let visited = BitSet.create' (free_pc p) in
998981
let rec mark_used pc =
999982
if not (BitSet.mem visited pc)
1000983
then (

0 commit comments

Comments
 (0)