aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Linearizeaux.ml
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2020-03-10 14:16:23 +0100
committerCyril SIX <cyril.six@kalray.eu>2020-03-10 14:16:23 +0100
commit22bfb4389571e9b2779b6e5b9f48b8a0e5c35867 (patch)
treef11c304b3fa95aca59bb4d086bfd3bad18f94845 /backend/Linearizeaux.ml
parent7cfe8a97803c2ca8d5cfa110ba506f5b189c0923 (diff)
downloadcompcert-kvx-22bfb4389571e9b2779b6e5b9f48b8a0e5c35867.tar.gz
compcert-kvx-22bfb4389571e9b2779b6e5b9f48b8a0e5c35867.zip
Bug fix in ftracelinearize
Diffstat (limited to 'backend/Linearizeaux.ml')
-rw-r--r--backend/Linearizeaux.ml19
1 files changed, 15 insertions, 4 deletions
diff --git a/backend/Linearizeaux.ml b/backend/Linearizeaux.ml
index 22db25e0..23d06075 100644
--- a/backend/Linearizeaux.ml
+++ b/backend/Linearizeaux.ml
@@ -140,10 +140,21 @@ let rec last_element = function
| e :: [] -> e
| e' :: e :: l -> last_element (e::l)
+let print_plist l =
+ let rec f = function
+ | [] -> ()
+ | n :: l -> Printf.printf "%d, " (P.to_int n); f l
+ in begin
+ Printf.printf "[";
+ f l;
+ Printf.printf "]"
+ end
+
let forward_sequences code entry =
let visited = ref (PTree.map (fun n i -> false) code) in
(* returns the list of traversed nodes, and a list of nodes to start traversing next *)
let rec traverse_fallthrough code node =
+ (* Printf.printf "Traversing %d..\n" (P.to_int node); *)
if not (get_some @@ PTree.get node !visited) then begin
visited := PTree.set node true !visited;
match PTree.get node code with
@@ -164,8 +175,8 @@ let forward_sequences code entry =
in let rec f code = function
| [] -> []
| node :: ln ->
- let fs, rem = traverse_fallthrough code node
- in [fs] @ (f code rem)
+ let fs, rem_from_node = traverse_fallthrough code node
+ in [fs] @ ((f code rem_from_node) @ (f code ln))
in (f code [entry])
module PInt = struct
@@ -417,12 +428,12 @@ let order_sequences code entry fs =
end
in begin
(* Printf.printf "depmap: "; print_depmap depmap; *)
- (* print_ssequence fs; *)
+ (* Printf.printf "forward sequences identified: "; print_ssequence fs; *)
while List.length !ordered_fs != List.length fs do
let next_id = select_next () in
evaluate next_id
done;
- (* print_ssequence (List.rev (!ordered_fs)); *)
+ (* Printf.printf "forward sequences ordered: "; print_ssequence (List.rev (!ordered_fs)); *)
List.rev (!ordered_fs)
end