From 27f2db7234539fbbc5f1e4de36110e8a0c5921bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9lio=20Brun?= <lb@leliobrun.net>
Date: Thu, 2 Mar 2023 18:21:54 +0900
Subject: [PATCH] follow chains of recycling for introducing ghost assigns

---
 src/optimize_machine.ml | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/optimize_machine.ml b/src/optimize_machine.ml
index 22efd56f..5e4accbc 100644
--- a/src/optimize_machine.ml
+++ b/src/optimize_machine.ml
@@ -908,10 +908,11 @@ and instrs_replace_var m fvar instrs =
   let instrs = List.fold_left (instr_replace_var m fvar) [] instrs in
   List.rev instrs
 
-let add_ghost_assigns reuse instrs =
-  let is_reused_def v = Hashtbl.find_opt reuse v.var_id in
+let add_ghost_assigns fvar instrs =
+  (* let is_reused_def v = Hashtbl.find_opt reuse v.var_id in *)
   let add_reused vars i =
-    match is_reused_def i with None -> vars | Some v -> VMap.add i v vars
+    let v = fvar i in
+    if v.var_id = i.var_id then vars else VMap.add i v vars
   in
   let rec is_defining_reused vars instr =
     match instr.instr_desc with
@@ -1058,7 +1059,7 @@ let step_replace_var m reuse step =
     asg
   in
   (* SSA *)
-  let step_instrs = add_ghost_assigns reuse step.step_instrs in
+  let step_instrs = add_ghost_assigns fvar step.step_instrs in
   (* register the locations of assignments *)
   let asg = assigned VMap.empty step_instrs in
   (* let pp fmt (k, s) = *)
-- 
GitLab