aboutsummaryrefslogtreecommitdiffstats
path: root/scheduling/RTLpathSchedulerproof.v
diff options
context:
space:
mode:
Diffstat (limited to 'scheduling/RTLpathSchedulerproof.v')
-rw-r--r--scheduling/RTLpathSchedulerproof.v35
1 files changed, 26 insertions, 9 deletions
diff --git a/scheduling/RTLpathSchedulerproof.v b/scheduling/RTLpathSchedulerproof.v
index a9c2fa76..03554f9c 100644
--- a/scheduling/RTLpathSchedulerproof.v
+++ b/scheduling/RTLpathSchedulerproof.v
@@ -281,6 +281,7 @@ Proof.
unfold inst_checker. destruct i; simpl in *;
unfold exit_checker; try discriminate.
all:
+ try destruct Pos.eq_dec; simpl;
try destruct (list_mem _ _); simpl;
try (destruct (Regset.subset _ _) eqn:SUB_ALIVE; try congruence; fail).
4,5:
@@ -302,17 +303,27 @@ Proof.
inversion_SOME p.
2: { destruct (Regset.subset _ _) eqn:?; try congruence. }
destruct (Regset.subset _ _) eqn:SUB_ALIVE; try congruence.
- 2: { destruct (Regset.subset (pre_output_regs path0) alive) eqn:?; try congruence. }
- simpl.
+ 2: {
+ destruct (Regset.subset (pre_output_regs path0) alive) eqn:?; try congruence;
+ destruct ((fn_path f) ! n); intros; try discriminate.
+ all: inversion SIEXEC; simpl; auto.
+ all: destruct Regset.subset in ICHK0; try discriminate;
+ destruct Regset.subset in ICHK0; try discriminate;
+ simpl in ICHK0.
+ all: destruct PTree.get eqn:GET in ICHK0; try discriminate.
+ all: destruct Regset.subset eqn:SUBS_PATH0 in ICHK0; try discriminate.
+ all: econstructor; eauto.
+ all: eapply eqlive_reg_monotonic; eauto.
+ all: destruct (Regset.subset (input_regs p0) (pre_output_regs path0)) eqn:SUB_PATH; try congruence.
+ all: intros; apply Regset.subset_2 in SUB_PATH.
+ all: unfold Regset.Subset in SUB_PATH; apply SUB_PATH in H; auto. }
+ intros; simpl.
destruct (Regset.subset (pre_output_regs path0) alive) eqn:SUB_ALIVE'; try congruence.
- inversion_SOME p'.
- destruct (Regset.subset (input_regs p') (pre_output_regs path0)) eqn:SUB_PATH; try congruence.
- intros NPATH NPATH' _. econstructor; eauto.
- instantiate (1:=p'). rewrite <- NPC; auto.
- eapply eqlive_reg_monotonic; eauto; simpl.
- intros. apply Regset.subset_2 in SUB_PATH.
+ destruct (Regset.subset (input_regs p) (pre_output_regs path0)) eqn:SUB_PATH; try congruence.
+ apply Regset.subset_2 in SUB_PATH.
unfold Regset.Subset in SUB_PATH.
- apply SUB_PATH in H; auto.
+ econstructor; eauto. { rewrite <- NPC; eauto. }
+ eapply eqlive_reg_monotonic; eauto.
Qed.
Lemma pre_output_regs_correct f pc0 path0 stk stk' sp (st:sstate) rs0 m0 t s is rs':
@@ -376,6 +387,12 @@ Proof.
exploit exit_checker_eqlive_builtin_res; eauto.
intros. destruct H as [p [PATH EQLIVE']].
econstructor; eauto.
+ + (* Icond *)
+ eexists; split.
+ * econstructor.
+ * generalize ICHK.
+ unfold inst_checker; simpl in *.
+ destruct Pos.eq_dec; destruct (Regset.subset _ _) eqn:SUB_ALIVE; try congruence.
+ (* Sjumptable *)
eexists; split.
* econstructor; eauto.