aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mppa_k1c/Asmblockdeps.v24
-rw-r--r--mppa_k1c/PostpassScheduling.v60
2 files changed, 10 insertions, 74 deletions
diff --git a/mppa_k1c/Asmblockdeps.v b/mppa_k1c/Asmblockdeps.v
index 4912a96f..63ccdeac 100644
--- a/mppa_k1c/Asmblockdeps.v
+++ b/mppa_k1c/Asmblockdeps.v
@@ -1375,27 +1375,8 @@ Theorem bblock_eq_test_correct verb p1 p2 :
Proof.
wlp_simplify.
Qed.
-Global Opaque bblock_eq_test.
Hint Resolve bblock_eq_test_correct: wlp.
-
-Inductive bblock_equiv' (bb bb': L.bblock) :=
- | bblock_equiv_intro':
- (forall s, exec Ge bb s = exec Ge bb' s) ->
- bblock_equiv' bb bb'.
-
-Lemma bblock_equiv'_refl: forall tbb, bblock_equiv' tbb tbb.
-Proof.
- repeat constructor.
-Qed.
-
-Axiom bblock_equivb: L.bblock -> L.bblock -> bool.
-
-Axiom bblock_equiv'_eq:
- forall b1 b2,
- bblock_equivb b1 b2 = true -> bblock_equiv' b1 b2. (* FIXME - à voir avec Sylvain *)
-
-
(* Coerce bblock_eq_test into a pure function (this is a little unsafe like all oracles in CompCert). *)
Import UnsafeImpure.
@@ -1410,7 +1391,8 @@ Proof.
apply unsafe_coerce_not_really_correct; eauto.
Qed.
+Definition bblock_equivb: Asmblock.bblock -> Asmblock.bblock -> bool := pure_bblock_eq_test true.
-End SECT.
+Definition bblock_equiv_eq := pure_bblock_eq_test_correct true.
-Extract Constant bblock_equivb => "PostpassSchedulingOracle.bblock_equivb'".
+End SECT.
diff --git a/mppa_k1c/PostpassScheduling.v b/mppa_k1c/PostpassScheduling.v
index 0c1cf605..373c6a1b 100644
--- a/mppa_k1c/PostpassScheduling.v
+++ b/mppa_k1c/PostpassScheduling.v
@@ -31,54 +31,6 @@ Definition exec' := L.run.
Definition exec := exec_bblock.
-Definition bblock_equivb' := bblock_equivb.
-
-Lemma trans_equiv_stuck:
- forall b1 b2 ge fn rs m,
- bblock_equiv' (P.Genv ge fn) (trans_block b1) (trans_block b2) ->
- (exec ge fn b1 rs m = Stuck <-> exec ge fn b2 rs m = Stuck).
-Proof.
- intros. inv H.
- pose (trans_state_match (State rs m)).
- split.
- - intros. eapply forward_simu_stuck in H; eauto. rewrite H0 in H. eapply trans_block_reverse_stuck.
- reflexivity. eassumption. eassumption.
- - intros. eapply forward_simu_stuck in H; eauto. rewrite <- H0 in H. eapply trans_block_reverse_stuck.
- reflexivity. eassumption. eassumption.
-Qed.
-
-Lemma bblock_equiv'_comm:
- forall ge fn b1 b2,
- bblock_equiv' (P.Genv ge fn) b1 b2 <-> bblock_equiv' (P.Genv ge fn) b2 b1.
-Proof.
- intros. repeat constructor. all: inv H; congruence.
-Qed.
-
-Theorem trans_exec:
- forall b1 b2 ge f, bblock_equiv' (P.Genv ge f) (trans_block b1) (trans_block b2) -> bblock_equiv ge f b1 b2.
-Proof.
- repeat constructor. intros rs1 m1.
- destruct (exec_bblock _ _ b1 _ _) as [rs2 m2|] eqn:EXEB; destruct (exec_bblock _ _ b2 _ _) as [rs3 m3|] eqn:EXEB2; auto.
- - pose (trans_state_match (State rs1 m1)).
- exploit forward_simu.
- reflexivity.
- eapply EXEB.
- eapply m.
- intros (s2' & EXEB' & MS).
- exploit forward_simu.
- reflexivity.
- eapply EXEB2.
- eapply m.
- intros (s3' & EXEB'2 & MS2). inv H.
- rewrite H0 in EXEB'. rewrite EXEB'2 in EXEB'. inv EXEB'.
- exploit (state_equiv (State rs2 m2) (State rs3 m3) s2'). eauto.
- congruence.
- - rewrite trans_equiv_stuck in EXEB2. 2: eapply bblock_equiv'_comm; eauto. unfold exec in EXEB2. rewrite EXEB2 in EXEB. discriminate.
- - rewrite trans_equiv_stuck in EXEB; eauto. unfold exec in EXEB. rewrite EXEB in EXEB2. discriminate.
-Qed.
-
-
-
(* Lemmas necessary for defining concat_all *)
Lemma app_nonil {A: Type} (l l': list A) : l <> nil -> l ++ l' <> nil.
Proof.
@@ -257,7 +209,7 @@ Qed.
Definition verify_schedule (bb bb' : bblock) : res unit :=
- match (bblock_equivb' (trans_block bb) (trans_block bb')) with
+ match (bblock_equivb bb bb') with
| true => OK tt
| false => Error (msg "PostpassScheduling.verify_schedule")
end.
@@ -276,7 +228,8 @@ Lemma verify_schedule_no_header:
forall bb bb',
verify_schedule (no_header bb) bb' = verify_schedule bb bb'.
Proof.
- intros. unfold verify_schedule. rewrite trans_block_noheader_inv. reflexivity.
+ intros. unfold verify_schedule. unfold bblock_equivb. unfold pure_bblock_eq_test. unfold bblock_eq_test. rewrite trans_block_noheader_inv.
+ reflexivity.
Qed.
@@ -285,7 +238,8 @@ Lemma stick_header_verify_schedule:
stick_header hd bb' = hbb' ->
verify_schedule bb bb' = verify_schedule bb hbb'.
Proof.
- intros. unfold verify_schedule. rewrite <- H. rewrite trans_block_header_inv. reflexivity.
+ intros. unfold verify_schedule. unfold bblock_equivb. unfold pure_bblock_eq_test. unfold bblock_eq_test.
+ rewrite <- H. rewrite trans_block_header_inv. reflexivity.
Qed.
Lemma check_size_stick_header:
@@ -468,8 +422,8 @@ Proof.
intros (tbb & CONC & STH).
exists tbb. split; auto.
rewrite verify_schedule_no_header in EQ0. erewrite stick_header_verify_schedule in EQ0; eauto.
- apply trans_exec. apply bblock_equiv'_eq. unfold verify_schedule in EQ0. unfold bblock_equivb' in EQ0.
- destruct (bblock_equivb _ _); auto; try discriminate.
+ eapply bblock_equiv_eq; eauto. unfold verify_schedule in EQ0. unfold bblock_equivb in EQ0.
+ destruct (pure_bblock_eq_test true _ _); auto; try discriminate.
Qed.
Theorem verified_schedule_correct: