From bcf13972da66990a562a868c8011c272bab3d415 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9lio=20Brun?= <lb@leliobrun.net>
Date: Thu, 2 Mar 2023 17:48:21 +0900
Subject: [PATCH] avoid removing spec of `x = x` assignments

---
 src/optimize_machine.ml | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/optimize_machine.ml b/src/optimize_machine.ml
index e38cfc7f..22efd56f 100644
--- a/src/optimize_machine.ml
+++ b/src/optimize_machine.ml
@@ -784,7 +784,15 @@ let rec instr_is_skip instr =
 
 and instrs_are_skip instrs = List.for_all instr_is_skip instrs
 
-let instr_cons instr cont = if instr_is_skip instr then cont else instr :: cont
+let instr_cons instr cont =
+  match instr_is_skip instr, cont with
+  | true, [] -> [ { instr with instr_desc = MComment "" } ]
+  | true, i :: cont -> { i with instr_spec = i.instr_spec @ instr.instr_spec } :: cont
+  | false, _ -> instr :: cont
+  (* let instr_desc = *)
+  (*   if instr_is_skip instr then MComment "" else instr.instr_desc in *)
+  (* let instr = { instr with instr_desc } in *)
+  (* instr :: cont *)
 
 (* XXX: UNUSED *)
 (* let rec instr_remove_skip instr cont =
@@ -1465,7 +1473,8 @@ let optimize params prog node_schs machine_code =
       let reuse_tables = Scheduling.compute_prog_reuse_table node_schs in
       machine_code
       |> machines_reuse_variables reuse_tables
-      |> machines_fusion |> machines_clean
+      |> machines_fusion
+      |> machines_clean
     else machine_code
   in
 
-- 
GitLab