From 890d33fc7d7813fffcfbf724e20ba0c42fe536a6 Mon Sep 17 00:00:00 2001
From: Valentin Perrelle <valentin.perrelle@cea.fr>
Date: Wed, 11 Mar 2020 15:25:41 +0100
Subject: [PATCH] Revert "[WIP] [Eva] Enable descending sequences"

This reverts commit e9c60779e79c220fa924dd67b6b5081983fcf894
---
 Makefile                                      |  1 -
 src/plugins/value/partitioning/join_cache.ml  | 95 -------------------
 src/plugins/value/partitioning/join_cache.mli | 47 ---------
 src/plugins/value/partitioning/partition.ml   | 24 +----
 .../value/partitioning/trace_partitioning.ml  |  1 -
 5 files changed, 1 insertion(+), 167 deletions(-)
 delete mode 100644 src/plugins/value/partitioning/join_cache.ml
 delete mode 100644 src/plugins/value/partitioning/join_cache.mli

diff --git a/Makefile b/Makefile
index 9a30035ad52..d23384d9cc8 100644
--- a/Makefile
+++ b/Makefile
@@ -905,7 +905,6 @@ PLUGIN_CMO:= partitioning/split_strategy value_parameters \
 	engine/recursion engine/transfer_stmt engine/transfer_specification \
 	partitioning/auto_loop_unroll \
 	partitioning/partition partitioning/partitioning_parameters \
-	partitioning/join_cache \
 	partitioning/partitioning_index partitioning/trace_partitioning \
 	engine/mem_exec engine/iterator engine/initialization \
 	engine/compute_functions engine/analysis register \
diff --git a/src/plugins/value/partitioning/join_cache.ml b/src/plugins/value/partitioning/join_cache.ml
deleted file mode 100644
index 6b8c9aaa929..00000000000
--- a/src/plugins/value/partitioning/join_cache.ml
+++ /dev/null
@@ -1,95 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  This file is part of Frama-C.                                         *)
-(*                                                                        *)
-(*  Copyright (C) 2007-2019                                               *)
-(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
-(*         alternatives)                                                  *)
-(*                                                                        *)
-(*  you can redistribute it and/or modify it under the terms of the GNU   *)
-(*  Lesser General Public License as published by the Free Software       *)
-(*  Foundation, version 2.1.                                              *)
-(*                                                                        *)
-(*  It is distributed in the hope that it will be useful,                 *)
-(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
-(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
-(*  GNU Lesser General Public License for more details.                   *)
-(*                                                                        *)
-(*  See the GNU Lesser General Public License version 2.1                 *)
-(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
-(*                                                                        *)
-(**************************************************************************)
-
-module type Domain =
-sig
-  type t
-  val join : t -> t -> t
-end
-
-module type Tag =
-sig
-  type t
-  val equal : t -> t -> bool
-end
-
-module Make (Domain : Domain) (Tag : Tag) =
-struct
-  type state = Domain.t
-  type tag = Tag.t
-
-  type partial_join = {
-    last_tag: tag;
-    last_state: state;
-    last_join: state;
-  }
-
-  type t = {
-    mutable joined: partial_join list;
-    mutable unjoined: (tag * state) list;
-  }
-
-  let create () = {
-    joined = [];
-    unjoined = []
-  }
-
-  let add tag state cache =
-    cache.unjoined <- (tag, state) :: cache.unjoined
-
-  let remove tag cache =
-    (* Find the elements with tag in the joined list *)
-    (* At all times, collect left right acc l satisfies
-       - acc @ l is the original list with some of the filtered elements removed
-       - acc have all the filtered elements removed
-       - l does not
-       - left, right is a snapshot of acc, l, the last time a filtered element
-         have been encountered, the begining of the iteration if none *)
-    let rec collect left right acc = function
-      | [] -> left, right
-      | pj :: t when Tag.equal pj.last_tag tag -> collect acc t acc t
-      | pj :: t -> collect left right (pj :: acc) t
-    in
-    (* Split the list in two part: at the left and at the righ of the element *)
-    let left, right = collect [] cache.joined [] cache.joined in
-    (* Update the cache *)
-    cache.joined <- right;
-    cache.unjoined <-
-      List.filter (fun (tag',_state) -> Tag.equal tag' tag) cache.unjoined @
-      List.map (fun pj -> pj.last_tag, pj.last_state) left
-
-  let join cache =
-    let append (last_tag,last_state) =
-      let new_element = match cache.joined with
-        | [] ->
-          { last_tag ; last_state ; last_join=last_state }
-        | { last_join } :: _ ->
-          { last_tag ; last_state ; last_join=Domain.join last_join last_state }
-      in
-      cache.joined <- new_element :: cache.joined
-    in
-    List.iter append (List.rev cache.unjoined);
-    cache.unjoined <- [];
-    match cache.joined with
-    | [] -> `Bottom
-    | { last_join } :: _ -> `Value last_join
-end
diff --git a/src/plugins/value/partitioning/join_cache.mli b/src/plugins/value/partitioning/join_cache.mli
deleted file mode 100644
index a1de53720ab..00000000000
--- a/src/plugins/value/partitioning/join_cache.mli
+++ /dev/null
@@ -1,47 +0,0 @@
-(**************************************************************************)
-(*                                                                        *)
-(*  This file is part of Frama-C.                                         *)
-(*                                                                        *)
-(*  Copyright (C) 2007-2019                                               *)
-(*    CEA (Commissariat à l'énergie atomique et aux énergies              *)
-(*         alternatives)                                                  *)
-(*                                                                        *)
-(*  you can redistribute it and/or modify it under the terms of the GNU   *)
-(*  Lesser General Public License as published by the Free Software       *)
-(*  Foundation, version 2.1.                                              *)
-(*                                                                        *)
-(*  It is distributed in the hope that it will be useful,                 *)
-(*  but WITHOUT ANY WARRANTY; without even the implied warranty of        *)
-(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *)
-(*  GNU Lesser General Public License for more details.                   *)
-(*                                                                        *)
-(*  See the GNU Lesser General Public License version 2.1                 *)
-(*  for more details (enclosed in the file licenses/LGPLv2.1).            *)
-(*                                                                        *)
-(**************************************************************************)
-
-open Bottom.Type
-
-module type Domain =
-sig
-  type t
-  val join : t -> t -> t
-end
-
-module type Tag =
-sig
-  type t
-  val equal : t -> t -> bool
-end
-
-module Make (Domain : Domain) (Tag : Tag) :
-sig
-  type state = Domain.t
-  type tag = Tag.t
-  type t
-
-  val create : unit -> t
-  val add : tag -> state -> t -> unit
-  val remove : tag -> t -> unit
-  val join : t -> state or_bottom
-end
diff --git a/src/plugins/value/partitioning/partition.ml b/src/plugins/value/partitioning/partition.ml
index f1921f3d359..977dce271f2 100644
--- a/src/plugins/value/partitioning/partition.ml
+++ b/src/plugins/value/partitioning/partition.ml
@@ -22,24 +22,6 @@
 
 open Bottom.Type
 
-(* --- Tagging --- *)
-
-(* Tags are stored in keys to track states through the propagation *)
-
-module Tag =
-struct
-  include Datatype.Int64
-
-  let fresh : unit -> t =
-    let last = ref Int64.zero in
-    fun () ->
-      last := Int64.succ !last;
-      !last
-end
-
-type tag = Tag.t
-
-
 (* --- Split monitors --- *)
 
 type split_monitor = {
@@ -98,17 +80,13 @@ type branch = int
      the split creates states in which the expression evalutates to a
      singleton, the values of the map are integers.
      Static splits are only evaluated when the annotation is encountered
-     whereas dynamic splits are reevaluated regularly.
-  Additionnaly, the key store a tag that is used to track the state it is
-  associated with. This tag is not used during the indexing process and thus
-  cannot differentiate keys. *) 
+     whereas dynamic splits are reevaluated regularly. *)
 type key = {
   ration_stamp : stamp;
   branches : branch list;
   loops : (int * int) list; (* current iteration / max unrolling *)
   static_split : (Integer.t*split_monitor) ExpMap.t; (* exp->value*monitor *)
   dynamic_split : (Integer.t*split_monitor) ExpMap.t; (* exp->value*monitor *)
-  tag : tag;
 }
 
 module Key =
diff --git a/src/plugins/value/partitioning/trace_partitioning.ml b/src/plugins/value/partitioning/trace_partitioning.ml
index f0f91e0a50c..aa261fbfb89 100644
--- a/src/plugins/value/partitioning/trace_partitioning.ml
+++ b/src/plugins/value/partitioning/trace_partitioning.ml
@@ -37,7 +37,6 @@ struct
 
   module Index = Partitioning_index.Make (Domain)
   module Flow = Partition.MakeFlow (Abstract)
-  module JoinCache = Join_cache.Make (Domain) (Partition.Tag)
 
   type state = Domain.t
 
-- 
GitLab