aboutsummaryrefslogtreecommitdiffstats
path: root/mppa_k1c/Asmblockdeps.v
diff options
context:
space:
mode:
authorSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2019-03-02 09:22:37 +0100
committerSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2019-03-02 09:22:37 +0100
commit55d62972391310a71e7bc0eff362fc339455b23b (patch)
tree84dfc04b6b25c92ad6e0090310d34db14a37966c /mppa_k1c/Asmblockdeps.v
parent59948b3348964f4b16f408ffe690f2c78ca80959 (diff)
downloadcompcert-kvx-55d62972391310a71e7bc0eff362fc339455b23b.tar.gz
compcert-kvx-55d62972391310a71e7bc0eff362fc339455b23b.zip
(Unsafe) coercion of ??bool into bool
Diffstat (limited to 'mppa_k1c/Asmblockdeps.v')
-rw-r--r--mppa_k1c/Asmblockdeps.v17
1 files changed, 17 insertions, 0 deletions
diff --git a/mppa_k1c/Asmblockdeps.v b/mppa_k1c/Asmblockdeps.v
index c2477e66..80383c2f 100644
--- a/mppa_k1c/Asmblockdeps.v
+++ b/mppa_k1c/Asmblockdeps.v
@@ -1313,6 +1313,7 @@ Admitted. (* FIXME - à voir avec Sylvain *)
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) ->
@@ -1329,6 +1330,22 @@ 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.
+
+Definition pure_bblock_eq_test (verb: bool) (p1 p2: Asmblock.bblock): bool := unsafe_coerce (bblock_eq_test verb p1 p2).
+
+Theorem pure_bblock_eq_test_correct verb p1 p2:
+ forall ge fn, Ge = Genv ge fn ->
+ pure_bblock_eq_test verb p1 p2 = true -> Asmblockgenproof0.bblock_equiv ge fn p1 p2.
+Proof.
+ intros; unfold pure_bblock_eq_test. intros; eapply bblock_eq_test_correct; eauto.
+ apply unsafe_coerce_not_really_correct; eauto.
+Qed.
+
+
End SECT.
Extract Constant bblock_equivb => "PostpassSchedulingOracle.bblock_equivb'".