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)