Section EXPRESSIONS.
Variable cunit: Cminor.program.
Variable hf: helper_functions.
Hypothesis LINK: linkorder cunit prog.
Hypothesis HF: helper_functions_declared cunit hf.
(** If-conversion *)

Lemma if_conversion_correct:
forall f env tyret cond ifso ifnot s vb b k f' k' sp e m e' m',
if_conversion (known_id f) env cond ifso ifnot = Some s ->
def_env f e -> wt_env env e ->
wt_stmt env tyret ifso ->
wt_stmt env tyret ifnot ->
Cminor.eval_expr ge sp e m cond vb -> Val.bool_of_val vb b ->
env_lessdef e e' -> Mem.extends m m' ->
let s0 := if b then ifso else ifnot in
exists e1 e1',
step tge (State f' s k' sp e' m') E0 (State f' Sskip k' sp e1' m')
/\ star Cminor.step ge (Cminor.State f s0 k sp e m) E0 (Cminor.State f Cminor.Sskip k sp e1 m)
/\ env_lessdef e1 e1'.