aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2021-02-16 13:46:36 +0000
committerYann Herklotz <git@yannherklotz.com>2021-02-16 13:46:36 +0000
commit036f70c048826f564bc875ed3aab5a45c8335d3c (patch)
treea0572ae9d655453fae57f1bbf2b00bd86f7314d5
parente26b6f6f87a7f21b3c9c8b7be11e2a72bc1aca04 (diff)
downloadvericert-kvx-036f70c048826f564bc875ed3aab5a45c8335d3c.tar.gz
vericert-kvx-036f70c048826f564bc875ed3aab5a45c8335d3c.zip
Use topological sort for now
-rw-r--r--src/hls/Schedule.ml13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/hls/Schedule.ml b/src/hls/Schedule.ml
index 355e906..16103f8 100644
--- a/src/hls/Schedule.ml
+++ b/src/hls/Schedule.ml
@@ -804,15 +804,15 @@ let subgraph dfg l =
) g l
) dfg' l
-let rec all_successors dfg v : DFG.V.t list =
+let rec all_successors dfg v =
List.concat (List.fold_left (fun l v ->
all_successors dfg v :: l
) [] (DFG.succ dfg v))
-let order_instr dfg : instr list list =
+let order_instr dfg =
DFG.fold_vertex (fun v li ->
if DFG.in_degree dfg v = 0
- then (snd v :: List.map snd (all_successors dfg v)) :: li
+ then (printf "v: %s\n" (print_instr (snd v)); (List.map snd (v :: all_successors dfg v)) :: li)
else li
) dfg []
@@ -830,7 +830,12 @@ let transf_rtlpar c c' (schedule : (int * int) list IMap.t) =
let body = IMap.to_seq i_sched_tree |> List.of_seq |> List.map snd
|> List.map (List.map (fun x -> (x, List.nth bb_body' x)))
in
- { bb_body = List.map (fun x -> subgraph dfg x |> order_instr) body;
+ let final_body = List.map (fun x -> subgraph dfg x |> order_instr) body in
+ let final_body2 = List.map (fun x -> subgraph dfg x
+ |> (fun x -> TopoDFG.fold (fun i l -> snd i :: l) x [])
+ |> List.rev) body
+ in
+ { bb_body = [final_body2];
bb_exit = ctrl_flow
}
in