let final_cleanup kf froms =
    let f k intervs =
      if Db.accept_base ~with_formals:true ~with_locals:false kf k
      then Zone.inject k intervs
      else Zone.bottom
    in
    let joiner = Zone.join in
    let projection base =
      match Base.validity base with
      | Base.Periodic (min_valid, max_valid, _)
      | Base.Known (min_valid,max_valid)
      | Base.Unknown (min_valid,max_valid)->
          Int_Intervals.inject_bounds min_valid max_valid
      | Base.All -> assert false(*TODO*)
    in
    let zone_substitution =
      Zone.cached_fold ~cache:("from cleanup", 331) ~temporary:true
        ~f ~joiner ~empty:Zone.bottom ~projection
    in
    let zone_substitution x =
      try
        zone_substitution x
      with Zone.Error_Top -> Zone.top
    in
    { Function_Froms.deps_table =
        Lmap_bitwise.From_Model.map_and_merge
          zone_substitution
          froms.Function_Froms.deps_table
          Lmap_bitwise.From_Model.empty;
      deps_return =
        Lmap_bitwise.From_Model.LOffset.map
          (function b, d -> b, zone_substitution d)
          froms.Function_Froms.deps_return;
    }