let loop_stmts graph vloop =
let loop_nodes graph vloop = match !vloop with
| Vloop (true, _stmt) ->
let rec add_node_and_preds n acc =
if (List.exists (CFG.V.equal n) acc) then acc
else CFG.fold_pred add_node_and_preds graph n (n::acc)
in
let get_back_edge_body e nodes =
if is_back_edge e then add_node_and_preds (CFG.E.src e) nodes
else nodes
in CFG.fold_pred_e get_back_edge_body graph vloop [vloop]
| Vloop (false, _stmt) ->
raise (Extlib.NotYetImplemented "[cfg:loop_stmts] non natural loop...")
| _ -> raise (Invalid_argument "[cfg:loop_stmts] not a loop")
in
List.map (fun n -> VL.stmt n) (loop_nodes graph vloop)