let fun_precond_visible ff_opt p =
    SlicingParameters.debug ~level:2 "[SlicingTransform.Visibility.fun_precond_visible] %a ?"
      !Ast_printer.d_predicate_named 
      { name = []; loc = locUnknown; content = p };
    let visible = match ff_opt with
      | Isrc -> true
      | Iproto -> true
      | Iff (ff,_) ->
          let kf = M.get_ff_kf ff  in
          let pdg = !Db.Pdg.get kf in
            try
              let nodes = !Db.Pdg.find_fun_precond_nodes pdg p in
                data_nodes_visible ff nodes
            with Extlib.NotYetImplemented _ -> (* TODO remove this when ok *)
              true (* keep visible at the moment : needed by security analysis *)
    in SlicingParameters.debug ~level:2 "[SlicingTransform.Visibility.precond_visible] -> %s"
         (if visible then "yes" else "no");
       visible