let compute_dom kf =
  let start = Kernel_function.find_first_stmt kf in
  try
    let _ = Dom.find start.sid in
    Parameters.feedback "computed for function %a"
      Kernel_function.pretty_name kf;
  with Not_found ->
    Parameters.feedback "computing for function %a"
      Kernel_function.pretty_name kf;
    let f = kf.fundec in
    let stmts = match f with
    | Definition (f,_) -> f.sallstmts
    | Declaration _ -> Parameters.fatal "cannot compute for a leaf function"
    in
    List.iter (fun s -> Dom.add s.sid DomSet.Top) stmts;
    Dom.replace start.sid (DomSet.Value (Stmt.Set.singleton start));
    DomCompute.compute [start];
    Parameters.feedback "done for function %a"
      Kernel_function.pretty_name kf