Skip to content

Commit 8065482

Browse files
committed
Compiler: small improvements
1 parent d48d67a commit 8065482

File tree

2 files changed

+39
-40
lines changed

2 files changed

+39
-40
lines changed

compiler/lib/deadcode.ml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,14 @@ let f ({ blocks; _ } as p : Code.program) =
293293
if debug () then Print.program Format.err_formatter (fun pc xi -> annot st pc xi) p;
294294
let all_blocks = blocks in
295295
let blocks =
296-
Addr.Map.fold
297-
(fun pc block blocks ->
296+
Addr.Map.filter_map
297+
(fun pc block ->
298298
if not (Addr.Set.mem pc st.reachable_blocks)
299299
then (
300300
st.deleted_blocks <- st.deleted_blocks + 1;
301-
blocks)
301+
None)
302302
else
303-
Addr.Map.add
304-
pc
303+
Some
305304
{ params = List.filter block.params ~f:(fun x -> st.live.(Var.idx x) > 0)
306305
; body =
307306
List.fold_left block.body ~init:[] ~f:(fun acc i ->
@@ -317,10 +316,8 @@ let f ({ blocks; _ } as p : Code.program) =
317316
acc))
318317
|> List.rev
319318
; branch = filter_live_last all_blocks st block.branch
320-
}
321-
blocks)
319+
})
322320
blocks
323-
Addr.Map.empty
324321
in
325322
if times () then Format.eprintf " dead code elim.: %a@." Timer.print t;
326323
if stats ()

compiler/lib/eval.ml

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -677,9 +677,9 @@ let eval_branch info l =
677677

678678
exception May_raise
679679

680-
let rec do_not_raise pc visited blocks =
680+
let rec do_not_raise pc visited rewrite blocks =
681681
if Addr.Set.mem pc visited
682-
then visited
682+
then visited, rewrite
683683
else
684684
let visited = Addr.Set.add pc visited in
685685
let b = Addr.Map.find pc blocks in
@@ -700,46 +700,48 @@ let rec do_not_raise pc visited blocks =
700700
| Prim (_, _) -> ()));
701701
match b.branch with
702702
| Raise _ -> raise May_raise
703-
| Stop | Return _ | Poptrap _ -> visited
704-
| Branch (pc, _) -> do_not_raise pc visited blocks
703+
| Stop | Return _ -> visited, rewrite
704+
| Poptrap _ -> visited, pc :: rewrite
705+
| Branch (pc, _) -> do_not_raise pc visited rewrite blocks
705706
| Cond (_, (pc1, _), (pc2, _)) ->
706-
let visited = do_not_raise pc1 visited blocks in
707-
let visited = do_not_raise pc2 visited blocks in
708-
visited
707+
let visited, rewrite = do_not_raise pc1 visited rewrite blocks in
708+
let visited, rewrite = do_not_raise pc2 visited rewrite blocks in
709+
visited, rewrite
709710
| Switch (_, a1) ->
710-
let visited =
711-
Array.fold_left a1 ~init:visited ~f:(fun visited (pc, _) ->
712-
do_not_raise pc visited blocks)
711+
let visited, rewrite =
712+
Array.fold_left
713+
a1
714+
~init:(visited, rewrite)
715+
~f:(fun (visited, rewrite) (pc, _) -> do_not_raise pc visited rewrite blocks)
713716
in
714-
visited
717+
visited, rewrite
715718
| Pushtrap _ -> raise May_raise
716719

717720
let drop_exception_handler drop_count blocks =
718721
Addr.Map.fold
719722
(fun pc _ blocks ->
720723
match Addr.Map.find pc blocks with
721724
| { branch = Pushtrap (((addr, _) as cont1), _x, _cont2); _ } as b -> (
722-
try
723-
let visited = do_not_raise addr Addr.Set.empty blocks in
724-
incr drop_count;
725-
let b = { b with branch = Branch cont1 } in
726-
let blocks = Addr.Map.add pc b blocks in
727-
let blocks =
728-
Addr.Set.fold
729-
(fun pc2 blocks ->
730-
let b = Addr.Map.find pc2 blocks in
731-
let branch =
732-
match b.branch with
733-
| Poptrap cont -> Branch cont
734-
| x -> x
735-
in
736-
let b = { b with branch } in
737-
Addr.Map.add pc2 b blocks)
738-
visited
739-
blocks
740-
in
741-
blocks
742-
with May_raise -> blocks)
725+
match do_not_raise addr Addr.Set.empty [] blocks with
726+
| exception May_raise -> blocks
727+
| _visited, rewrite ->
728+
incr drop_count;
729+
let b = { b with branch = Branch cont1 } in
730+
let blocks = Addr.Map.add pc b blocks in
731+
let blocks =
732+
List.fold_left
733+
~f:(fun blocks pc2 ->
734+
Addr.Map.update
735+
pc2
736+
(function
737+
| Some ({ branch = Poptrap cont; _ } as b) ->
738+
Some { b with branch = Branch cont }
739+
| None | Some _ -> assert false)
740+
blocks)
741+
rewrite
742+
~init:blocks
743+
in
744+
blocks)
743745
| _ -> blocks)
744746
blocks
745747
blocks

0 commit comments

Comments
 (0)