aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--scheduling/RTLpathSE_impl.v60
-rw-r--r--scheduling/RTLpathSE_simu_specs.v5
2 files changed, 23 insertions, 42 deletions
diff --git a/scheduling/RTLpathSE_impl.v b/scheduling/RTLpathSE_impl.v
index 87a064d5..38930a75 100644
--- a/scheduling/RTLpathSE_impl.v
+++ b/scheduling/RTLpathSE_impl.v
@@ -31,7 +31,7 @@ Definition DEBUG (s: pstring): ?? unit := XDEBUG tt (fun _ => RET s).
Definition hsval_get_hid (hsv: hsval): hashcode :=
match hsv with
| HSinput _ hid => hid
- | HSop _ _ _ hid => hid
+ | HSop _ _ hid => hid
| HSload _ _ _ _ _ hid => hid
end.
@@ -50,7 +50,7 @@ Definition hsmem_get_hid (hsm: hsmem): hashcode :=
Definition hsval_set_hid (hsv: hsval) (hid: hashcode): hsval :=
match hsv with
| HSinput r _ => HSinput r hid
- | HSop o lhsv hsm _ => HSop o lhsv hsm hid
+ | HSop o lhsv _ => HSop o lhsv hid
| HSload hsm trap chunk addr lhsv _ => HSload hsm trap chunk addr lhsv hid
end.
@@ -104,10 +104,9 @@ Local Hint Resolve hsmem_set_hid_correct: core.
Definition hsval_hash_eq (sv1 sv2: hsval): ?? bool :=
match sv1, sv2 with
| HSinput r1 _, HSinput r2 _ => struct_eq r1 r2 (* NB: really need a struct_eq here ? *)
- | HSop op1 lsv1 sm1 _, HSop op2 lsv2 sm2 _ =>
+ | HSop op1 lsv1 _, HSop op2 lsv2 _ =>
DO b1 <~ phys_eq lsv1 lsv2;;
- DO b2 <~ phys_eq sm1 sm2;;
- if b1 && b2
+ if b1
then struct_eq op1 op2 (* NB: really need a struct_eq here ? *)
else RET false
| HSload sm1 trap1 chk1 addr1 lsv1 _, HSload sm2 trap2 chk2 addr2 lsv2 _ =>
@@ -282,25 +281,27 @@ Qed.
Global Opaque hSinput.
Local Hint Resolve hSinput_correct: wlp.
-Definition hSop_hcodes (op:operation) (lhsv: list_hsval) (hsm: hsmem) :=
+Definition hSop_hcodes (op:operation) (lhsv: list_hsval) :=
DO hc <~ hash op_hcode;;
DO hv <~ hash op;;
- RET [hc;hv;list_hsval_get_hid lhsv; hsmem_get_hid hsm].
+ RET [hc;hv;list_hsval_get_hid lhsv].
Extraction Inline hSop_hcodes.
-Definition hSop (op:operation) (lhsv: list_hsval) (hsm: hsmem): ?? hsval :=
- DO hv <~ hSop_hcodes op lhsv hsm;;
- hC_hsval {| hdata:=HSop op lhsv hsm unknown_hid; hcodes :=hv |}.
+Definition hSop (op:operation) (lhsv: list_hsval): ?? hsval :=
+ DO hv <~ hSop_hcodes op lhsv;;
+ hC_hsval {| hdata:=HSop op lhsv unknown_hid; hcodes :=hv |}.
-Lemma hSop_correct op lhsv hsm:
- WHEN hSop op lhsv hsm ~> hv THEN forall ge sp rs0 m0 lsv sm
- (LR: list_sval_refines ge sp rs0 m0 lhsv lsv)
- (MR: smem_refines ge sp rs0 m0 hsm sm),
- sval_refines ge sp rs0 m0 hv (Sop op lsv sm).
+Lemma hSop_correct op lhsv:
+ WHEN hSop op lhsv ~> hv THEN forall ge sp rs0 m0 lsv sm m
+ (MEM: seval_smem ge sp sm rs0 m0 = Some m)
+ (MVALID: forall b ofs, Mem.valid_pointer m b ofs = Mem.valid_pointer m0 b ofs)
+ (LR: list_sval_refines ge sp rs0 m0 lhsv lsv),
+ sval_refines ge sp rs0 m0 hv (Sop op lsv sm).
Proof.
wlp_simplify.
- rewrite <- LR, <- MR.
- auto.
+ rewrite <- H, MEM, LR.
+ destruct (seval_list_sval _ _ lsv _); try congruence.
+ eapply op_valid_pointer_eq; eauto.
Qed.
Global Opaque hSop.
Local Hint Resolve hSop_correct: wlp.
@@ -529,31 +530,10 @@ Definition root_apply (rsv: root_sval) (lr: list reg) (st: sistate_local): sval
end.
Coercion root_apply: root_sval >-> Funclass.
-Definition hSop_hSinit (op:operation) (lhsv: list_hsval): ?? hsval :=
- DO hsi <~ hSinit ();;
- hSop op lhsv hsi (** magically remove the dependency on sm ! *)
- .
-
-Lemma hSop_hSinit_correct op lhsv:
- WHEN hSop_hSinit op lhsv ~> hv THEN forall ge sp rs0 m0 lsv sm m
- (MEM: seval_smem ge sp sm rs0 m0 = Some m)
- (MVALID: forall b ofs, Mem.valid_pointer m b ofs = Mem.valid_pointer m0 b ofs)
- (LR: list_sval_refines ge sp rs0 m0 lhsv lsv),
- sval_refines ge sp rs0 m0 hv (Sop op lsv sm).
-Proof.
- wlp_simplify.
- erewrite H0; [ idtac | eauto | eauto ].
- rewrite H, MEM.
- destruct (seval_list_sval _ _ lsv _); try congruence.
- eapply op_valid_pointer_eq; eauto.
-Qed.
-Global Opaque hSop_hSinit.
-Local Hint Resolve hSop_hSinit_correct: wlp.
-
Definition root_happly (rsv: root_sval) (lr: list reg) (hst: hsistate_local) : ?? hsval :=
DO lhsv <~ hlist_args hst lr;;
match rsv with
- | Rop op => hSop_hSinit op lhsv
+ | Rop op => hSop op lhsv
| Rload trap chunk addr => hSload hst trap chunk addr lhsv
end.
@@ -624,7 +604,7 @@ Definition simplify (rsv: root_sval) (lr: list reg) (hst: hsistate_local): ?? hs
| Some arg => hsi_sreg_get hst arg (** optimization of Omove *)
| None =>
DO lhsv <~ hlist_args hst lr;;
- hSop_hSinit op lhsv
+ hSop op lhsv
end
| Rload _ chunk addr =>
DO lhsv <~ hlist_args hst lr;;
diff --git a/scheduling/RTLpathSE_simu_specs.v b/scheduling/RTLpathSE_simu_specs.v
index 0c5ed3b8..48f5f65d 100644
--- a/scheduling/RTLpathSE_simu_specs.v
+++ b/scheduling/RTLpathSE_simu_specs.v
@@ -59,7 +59,7 @@ Definition siexits_simu (dm: PTree.t node) (f: RTLpath.function) (lse1 lse2: lis
Inductive hsval :=
| HSinput (r: reg) (hid: hashcode)
- | HSop (op: operation) (lhsv: list_hsval) (hsm: hsmem) (hid: hashcode)
+ | HSop (op: operation) (lhsv: list_hsval) (hid: hashcode) (** NB: does not depend on the memory ! *)
| HSload (hsm: hsmem) (trap: trapping_mode) (chunk: memory_chunk) (addr: addressing) (lhsv: list_hsval) (hid: hashcode)
with list_hsval :=
| HSnil (hid: hashcode)
@@ -86,10 +86,11 @@ Inductive hsfval :=
| HSreturn (res: option hsval)
.
+(** * gives the semantics of hash-consed symbolic values *)
Fixpoint hsval_proj hsv :=
match hsv with
| HSinput r _ => Sinput r
- | HSop op hl hm _ => Sop op (hsval_list_proj hl) (hsmem_proj hm)
+ | HSop op hl _ => Sop op (hsval_list_proj hl) Sinit (** NB: use the initial memory of the path ! *)
| HSload hm t chk addr hl _ => Sload (hsmem_proj hm) t chk addr (hsval_list_proj hl)
end
with hsval_list_proj hl :=