From 55e9427a2986b40d19bbd511d06545e86b196894 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Tue, 16 Apr 2019 14:51:12 +0200
Subject: [PATCH] [Eva] Trace_partitioning: removes already propagated states
 only at statements.

Restores a previous optimization.
This is a useful optimization, as the inclusion tests between incoming states
and already propagated states are very costly.
---
 src/plugins/value/engine/trace_partitioning.ml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/plugins/value/engine/trace_partitioning.ml b/src/plugins/value/engine/trace_partitioning.ml
index 2a63927373b..063afad6c95 100644
--- a/src/plugins/value/engine/trace_partitioning.ml
+++ b/src/plugins/value/engine/trace_partitioning.ml
@@ -288,8 +288,10 @@ struct
         dest.store_partition <- Partition.replace key s dest.store_partition;
       in
       Extlib.may add state;
-      (* Filter out already propagated states *)
-      Extlib.opt_filter (fun s -> Index.add s dest.store_index) state
+      (* Filter out already propagated states (only at statements). *)
+      if dest.store_stmt = None
+      then state
+      else Extlib.opt_filter (fun s -> Index.add s dest.store_index) state
     in
     let flow = Flow.join_duplicate_keys flow_states in
     let flow = Flow.filter_map update flow in
-- 
GitLab