let compute () =
  feedback "beginning analysis";
  let p = Ast.get () in
  (* fixes bts#587: check that Parameters.MainFunction.get is valid. *)
  ignore (Globals.entry_point ());
  let cg = computeGraph p in
  entry_point_ref :=
    Some
    (try Hashtbl.find cg (Parameters.MainFunction.get ())
     with Not_found -> assert false);
  let init_funcs = get_init_funcs cg in
  let cg = Service.compute cg init_funcs in
  CG.mark_as_computed ();
  feedback "analysis done";
  cg