let slice () =
    Options.feedback ~level:2 "beginning slicing";
    compute ();
    let name = "security slicing" in
    let slicing = !Slicing.Project.mk_project name in
    let select (n, kf) sel =
      Options.debug ~level:2 "selecting %a (of %s)"
         (!Pdg.pretty_node false) n
        (Kernel_function.get_name kf);
      !Slicing.Select.select_pdg_nodes
        sel
        (!Slicing.Mark.make
           ~data:true ~addr:true ~ctrl:X.use_ctrl_dependencies)
        [ n ]
        kf
    in
    let sel = Nodes.fold select Slicing.Select.empty_selects in
    Options.debug "adding selection";
    !Slicing.Request.add_persistent_selection slicing sel;
    Options.debug "applying slicing request";
    !Slicing.Request.apply_all_internal slicing;
    !Slicing.Slice.remove_uncalled slicing;
    let p = !Slicing.Project.extract name slicing in
    Project.copy ~only:(Options.get_selection_after_slicing ()) p;
    Options.feedback ~level:2 "slicing done";
    p