aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Duplicateaux.ml
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-12-04 16:51:53 +0100
committerCyril SIX <cyril.six@kalray.eu>2019-12-04 16:51:53 +0100
commit06388a555dcbb56a9c7cd7ebe45cc66a71454597 (patch)
tree923b05a1d7d058622d518a20baac9cc0e5a73270 /backend/Duplicateaux.ml
parent3074390115febf1fad3ee094edc59f36e496a6a4 (diff)
downloadcompcert-kvx-06388a555dcbb56a9c7cd7ebe45cc66a71454597.tar.gz
compcert-kvx-06388a555dcbb56a9c7cd7ebe45cc66a71454597.zip
Traces now stop at Icall/Ibuiltin/Ijumptable
Diffstat (limited to 'backend/Duplicateaux.ml')
-rw-r--r--backend/Duplicateaux.ml17
1 files changed, 11 insertions, 6 deletions
diff --git a/backend/Duplicateaux.ml b/backend/Duplicateaux.ml
index e76cd125..a323f64d 100644
--- a/backend/Duplicateaux.ml
+++ b/backend/Duplicateaux.ml
@@ -25,11 +25,11 @@ let to_ttl_inst = function
| Iop (op, lr, r, n) -> Tnext (n, Iop(op, lr, r, n))
| Iload (m, a, lr, r, n) -> Tnext (n, Iload(m, a, lr, r, n))
| Istore (m, a, lr, r, n) -> Tnext (n, Istore(m, a, lr, r, n))
-| Icall (s, ri, lr, r, n) -> Tnext (n, Icall(s, ri, lr, r, n))
+| Icall (s, ri, lr, r, n) -> Tleaf (Icall(s, ri, lr, r, n))
| Itailcall (s, ri, lr) -> Tleaf (Itailcall(s, ri, lr))
-| Ibuiltin (ef, lbr, br, n) -> Tnext (n, Ibuiltin(ef, lbr, br, n))
+| Ibuiltin (ef, lbr, br, n) -> Tleaf (Ibuiltin(ef, lbr, br, n))
| Icond (cond, lr, n, n') -> Tnext (select_one n n', Icond(cond, lr, n, n'))
-| Ijumptable (r, ln) -> Tnext (List.hd ln, Ijumptable(r, ln))
+| Ijumptable (r, ln) -> Tleaf (Ijumptable(r, ln))
let rec to_ttl_code_rec = function
| [] -> PTree.empty
@@ -64,11 +64,16 @@ let bfs code entrypoint =
match PTree.get node code with
| None -> failwith "No such node"
| Some ti -> [node] @ match ti with
- | Tleaf i -> []
+ | Tleaf i -> (match i with
+ | Icall(_, _, _, _, n) -> bfs_list code [n]
+ | Ibuiltin(_, _, _, n) -> bfs_list code [n]
+ | Ijumptable(_, ln) -> bfs_list code ln
+ | Itailcall _ | Ireturn _ -> []
+ | _ -> failwith "Tleaf case not handled in bfs" )
| Tnext (n,i) -> (bfs_list code [n]) @ match i with
| Icond (_, _, n1, n2) -> bfs_list code [n1; n2]
- | Ijumptable (_, ln) -> bfs_list code ln
- | _ -> []
+ | Inop _ | Iop _ | Iload _ | Istore _ -> []
+ | _ -> failwith "Tnext case not handled in bfs"
end
else []
in node_bfs @ (bfs_list code ln)