aboutsummaryrefslogtreecommitdiffstats
path: root/backend/KillUselessMoves.v
diff options
context:
space:
mode:
authorSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2020-10-21 09:15:40 +0200
committerSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2020-10-21 09:15:40 +0200
commit0f47c1dbf3cee6845df9c4c3da0924ed4e10a9c4 (patch)
treeb0799e5d8e4ae62a9ae47c5358a62630c7a4efc3 /backend/KillUselessMoves.v
parent647471e5b084703d1c817c02ef4298c474d3d571 (diff)
parent3f99a42035389b1953030af8490a5ec18a64394f (diff)
downloadcompcert-kvx-0f47c1dbf3cee6845df9c4c3da0924ed4e10a9c4.tar.gz
compcert-kvx-0f47c1dbf3cee6845df9c4c3da0924ed4e10a9c4.zip
Merge branch 'kvx-work' into aarch64_block_bodystar
Diffstat (limited to 'backend/KillUselessMoves.v')
-rw-r--r--backend/KillUselessMoves.v40
1 files changed, 40 insertions, 0 deletions
diff --git a/backend/KillUselessMoves.v b/backend/KillUselessMoves.v
new file mode 100644
index 00000000..bdd7ec60
--- /dev/null
+++ b/backend/KillUselessMoves.v
@@ -0,0 +1,40 @@
+(* *************************************************************)
+(* *)
+(* The Compcert verified compiler *)
+(* *)
+(* David Monniaux CNRS, VERIMAG *)
+(* *)
+(* Copyright VERIMAG. All rights reserved. *)
+(* This file is distributed under the terms of the INRIA *)
+(* Non-Commercial License Agreement. *)
+(* *)
+(* *************************************************************)
+
+Require Import Coqlib Maps Errors Integers Floats Lattice Kildall.
+Require Import AST Linking.
+Require Import Memory Registers Op RTL.
+Require List.
+
+Definition transf_ros (ros: reg + ident) : reg + ident := ros.
+
+Definition transf_instr (pc: node) (instr: instruction) :=
+ match instr with
+ | Iop op args res s =>
+ if (eq_operation op Omove) && (List.list_eq_dec peq args (res :: nil))
+ then Inop s
+ else instr
+ | _ => instr
+ end.
+
+Definition transf_function (f: function) : function :=
+ {| fn_sig := f.(fn_sig);
+ fn_params := f.(fn_params);
+ fn_stacksize := f.(fn_stacksize);
+ fn_code := PTree.map transf_instr f.(fn_code);
+ fn_entrypoint := f.(fn_entrypoint) |}.
+
+Definition transf_fundef (fd: fundef) : fundef :=
+ AST.transf_fundef transf_function fd.
+
+Definition transf_program (p: program) : program :=
+ transform_program transf_fundef p.