Ltac UseFinish :=
match goal with
| [ H: finish _ _ _ = (_, _) |- _ ] =>
try (rewrite (finish_meets_spec_2 _ _ _ _ _ H));
try (rewrite (finish_meets_spec_1 _ _ _ _ _ H));
repeat rewrite app_ass
end.
(* Fixpoint add_set_dest (sd: set_destination) (tmps: list ident) := match sd with | SDbase ty tmp => tmp :: tmps | SDcons ty tmp sd' => tmp :: add_set_dest sd' tmps end. *)
Definition add_dest (dst: destination) (tmps: list ident) :=
match dst with
| For_set sd => sd_temp sd :: tmps
| _ => tmps
end.

Lemma tr_expr_add_dest:
forall le dst r sl a tmps,
tr_expr le dst r sl a tmps ->
tr_expr le dst r sl a (add_dest dst tmps).