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