@@ -71,19 +71,22 @@ let remove_dead_edges g dead_jmps =
71
71
then G.Edge. remove edge g
72
72
else g)
73
73
74
- let dead_blks sub g =
74
+ let dead_blks g =
75
75
let module G = Graphs. Tid in
76
- Term. to_sequence blk_t sub |>
77
- Seq. fold ~init: (Set. empty (module Tid )) ~f: (fun deads b ->
78
- if Graphlib. is_reachable (module G ) g G. start (Term. tid b)
79
- then deads
80
- else Set. add deads (Term. tid b))
76
+ fst @@
77
+ Graphlib. depth_first_search (module G ) g
78
+ ~init: (Set. empty (module Tid ), false )
79
+ ~start_tree: (fun node (deads , _ ) ->
80
+ deads, Tid. equal node G. start)
81
+ ~enter_node: (fun _ node (deads , is_reachable ) ->
82
+ if is_reachable then deads, is_reachable
83
+ else Set. add deads node, is_reachable)
81
84
82
85
let find_unreachable sub t =
83
86
let dead_jmps = dead_jmps sub in
84
87
let dead_blks =
85
88
remove_dead_edges (Sub. to_graph sub) dead_jmps |>
86
- dead_blks sub in
89
+ dead_blks in
87
90
{t with deads = t.deads ++ dead_jmps ++ dead_blks }
88
91
89
92
let update_def updates d =
@@ -105,22 +108,22 @@ let update sub {updates} =
105
108
Term. map def_t b ~f: (update_def updates) |>
106
109
Term. map jmp_t ~f: (update_jmp updates))
107
110
108
- let map_alive deads cls ?(f =ident) x =
111
+ let filter_map_alive deads cls ?(f =ident) x =
109
112
Term. filter_map cls x ~f: (fun t ->
110
113
if Set. mem deads (Term. tid t) then None
111
114
else Some (f t))
112
115
113
116
let remove_dead_code sub {deads} =
114
117
let update_blk b =
115
- map_alive deads def_t b |>
116
- map_alive deads jmp_t in
117
- map_alive deads blk_t sub ~f: update_blk
118
+ filter_map_alive deads def_t b |>
119
+ filter_map_alive deads jmp_t in
120
+ filter_map_alive deads blk_t sub ~f: update_blk
118
121
119
122
let apply sub {deads; updates} =
120
123
let update_blk b =
121
- map_alive deads def_t b ~f: (update_def updates) |>
122
- map_alive deads jmp_t ~f: (update_jmp updates) in
123
- map_alive deads blk_t sub ~f: update_blk
124
+ filter_map_alive deads def_t b ~f: (update_def updates) |>
125
+ filter_map_alive deads jmp_t ~f: (update_jmp updates) in
126
+ filter_map_alive deads blk_t sub ~f: update_blk
124
127
125
128
include Data. Make (struct
126
129
type nonrec t = t
0 commit comments