(** Correctness of instruction selection *)
Require Export Axioms.
Require Export Maps.
(*Require Import sepcomp.Selectionproof.*)
Open Local Scope cminorsel_scope.
(** * Correctness of the instruction selection functions for expressions *)
(* Theorem eval_addrsymbolInject: forall (ge : genv) (sp : val) (e : env) (m : mem) (le : letenv) (id : ident) (ofs : int) j, exists v : val, eval_expr ge sp e m le (addrsymbol id ofs) v /\ val_inject j (symbol_address ge id ofs) v. *)
Section PRESERVATION.
Variable prog: Cminor.program.
Let ge := Genv.globalenv prog.
Variable hf: helper_functions.
Let tprog := transform_program (sel_fundef hf ge) prog.
Let tge := Genv.globalenv tprog.
Hypothesis HELPERS: i64_helpers_correct tge hf.

(* Specifications: *)
Lemma symbols_preserved:
forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
Lemma function_ptr_translated:
forall (b: block) (f: Cminor.fundef),
Genv.find_funct_ptr ge b = Some f ->
Genv.find_funct_ptr tge b = Some (sel_fundef hf ge f).