From 81108f21367b40f50e3c9054657cd4e7b644eab9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr>
Date: Fri, 28 Apr 2023 11:22:03 +0200
Subject: [PATCH] [Eva] Octagons: optimizes function [filter].

---
 src/plugins/eva/domains/octagons.ml | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/src/plugins/eva/domains/octagons.ml b/src/plugins/eva/domains/octagons.ml
index 978434c0097..bd50d179591 100644
--- a/src/plugins/eva/domains/octagons.ml
+++ b/src/plugins/eva/domains/octagons.ml
@@ -1065,8 +1065,13 @@ module Deps = struct
 
   let filter (bases: Base.Hptset.t) (m, i : t): VSet.t * t =
     let i_inter, i_diff = BaseToVariables.partition_with_shape bases i in
-    let vars = BaseToVariables.all_variables i_diff in
-    vars, VSet.fold remove vars (m, i_inter)
+    let removed_vars = BaseToVariables.all_variables i_diff in
+    let m = VariableToDeps.diff_with_shape removed_vars m in
+    let filter (s1, s2) =
+      VSet.diff s1 removed_vars, VSet.diff s2 removed_vars
+    in
+    let i = BaseToVariables.map filter i_inter in
+    removed_vars, (m, i)
 
   let get_var_bases (m, _: t) (var: Variable.t) =
     try
@@ -1870,8 +1875,8 @@ module Domain = struct
         mem_var x && mem_var y
       in
       let octagons = Octagons.filter mem_pair state.octagons in
-      let intervals = Intervals.filter mem_var state.intervals in
-      let relations = Relations.filter mem_var state.relations in
+      let intervals = Intervals.diff_with_shape removed_vars state.intervals in
+      let relations = Relations.diff_with_shape removed_vars state.relations in
       { state with octagons; intervals; relations; deps }
 
   let interprocedural_reuse =
-- 
GitLab