Section CMCONSTR.
Variable cunit: Cminor.program.
Variable hf: helper_functions.
Hypothesis LINK: linkorder cunit prog.
Hypothesis HF: helper_functions_declared cunit hf.
Let HF': helper_functions_declared tprog hf.
Variable sp: val.
Variable e: env.
Variable m: mem.
(** Correctness of instruction selection for operators *)

Lemma eval_sel_select:
forall le a1 a2 a3 v1 v2 v3 b ty,
eval_expr tge sp e m le a1 v1 ->
eval_expr tge sp e m le a2 v2 ->
eval_expr tge sp e m le a3 v3 ->
Val.bool_of_val v1 b ->
exists v, eval_expr tge sp e m le (sel_select ty a1 a2 a3) v
/\  Val.lessdef (Val.select (Some b) v2 v3 ty) v.