let iter_on_callers f kf =
  let cg = callgraph () in
  let module V = Hashtbl.Make(Kernel_functionin
  let visited = V.create 17 in
  let rec aux kf =
    if SGraph.mem_vertex cg kf then
      SGraph.iter_succ
        (fun caller ->
          if not (V.mem visited caller) then begin
            f caller;
            V.add visited caller ();
            aux caller
          end)
        cg
        kf
    else
      Options.warning ~once:true
        "Function %s not registered in semantic callgraph. Skipped."
        (Kernel_function.get_name kf)
  in
  aux kf