Module ESD2 := FSetDecide.Decide(EqSet2).
Remark val_lessdef_normalize:
forall v v' ty,
Val.has_type v ty -> Val.lessdef v v' ->
Val.lessdef v (Val.load_result (chunk_of_type ty) v').

Lemma function_return_satisf:
forall rs ls_before ls_after res res' sg e e' v,
res' = loc_result sg ->
remove_equations_res res res' e = Some e' ->
satisf rs ls_before e' ->
forallb (fun l => reg_loc_unconstrained res l e') (map R (regs_of_rpair res')) = true ->
no_caller_saves e' = true ->
Val.lessdef v (Locmap.getpair (map_rpair R res') ls_after) ->
agree_callee_save ls_before ls_after ->
satisf (rs#res <- v) ls_after e.