aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linearizeaux.ml
diff options
context:
space:
mode:
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r--backend/Linearizeaux.ml19
1 files changed, 5 insertions, 14 deletions
diff --git a/backend/Linearizeaux.ml b/backend/Linearizeaux.ml
index e89db024..5914f6a3 100644
--- a/backend/Linearizeaux.ml
+++ b/backend/Linearizeaux.ml
@@ -113,7 +113,7 @@ let flatten_blocks blks =
let cmp_minpc (mpc1, _) (mpc2, _) =
if mpc1 = mpc2 then 0 else if mpc1 > mpc2 then -1 else 1
in
- List.flatten (List.map snd (List.stable_sort cmp_minpc (List.rev blks)))
+ List.flatten (List.map snd (List.sort cmp_minpc blks))
(* Build the enumeration *)
@@ -139,16 +139,11 @@ let super_blocks f joins =
pc is the function entry point
or a join point
or the successor of a conditional test *)
- let rec start_block ?minpc pc =
- let minpc =
- match minpc with
- | None -> pc
- | Some minpc -> minpc
- in
+ let rec start_block pc =
let npc = P.to_int pc in
if not (IntSet.mem npc !visited) then begin
visited := IntSet.add npc !visited;
- in_block [] (P.to_int minpc) pc
+ in_block [] npc pc
end
(* in_block: add pc to block and check successors *)
and in_block blk minpc pc =
@@ -164,14 +159,10 @@ let super_blocks f joins =
match pred with
| None -> (end_block blk minpc; start_block ifso; start_block ifnot)
| Some true -> (next_in_block blk minpc ifso; start_block ifnot)
- | Some false ->
- if List.mem ifnot blk then
- (next_in_block blk minpc ifnot; start_block ~minpc:ifnot ifso)
- else
- (next_in_block blk minpc ifnot; start_block ifso)
+ | Some false -> (next_in_block blk minpc ifnot; start_block ifso)
end
| Ljumptable(arg, tbl) :: _ ->
- end_block blk minpc; List.iter (start_block ?minpc:None) tbl
+ end_block blk minpc; List.iter start_block tbl
| Lreturn :: _ -> end_block blk minpc
| instr :: b' -> do_instr_list b' in
do_instr_list b