diff options
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r-- | backend/Linearizeaux.ml | 19 |
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 |