Ltac solve_tc_val H :=
  rewrite tc_val_tc_val_PM in H; inv H.Ltac solve_tc_val' H :=
  rewrite tc_val_tc_val_PM' in H; inv H.

Lemma typecheck_Oshift_sound: forall op {CS: compspecs} (rho : environ) m (e1 e2 : expr) (t : type) (IBR: denote_tc_assert (isBinOpResultType op e1 e2 t) rho m) (TV2: tc_val (typeof e2) (eval_expr e2 rho)) (TV1: tc_val (typeof e1) (eval_expr e1 rho)) (OP: op = Oshl \/ op = Oshr), tc_val t (eval_binop op (typeof e1) (typeof e2) (eval_expr e1 rho) (eval_expr e2 rho)).