aboutsummaryrefslogtreecommitdiffstats
path: root/scheduling/BTLtoRTLproof.v
diff options
context:
space:
mode:
authorLéo Gourdin <leo.gourdin@lilo.org>2021-11-02 10:10:34 +0100
committerLéo Gourdin <leo.gourdin@lilo.org>2021-11-02 10:10:34 +0100
commit173e6c25b2937d6e6941973aa7b116e1d6405513 (patch)
treee5f63f343a3d1a1341dc2e8a09f6cdb706226de3 /scheduling/BTLtoRTLproof.v
parentf9e4d91431334d88992e62a232a9e2ff2f6fcdc9 (diff)
downloadcompcert-kvx-173e6c25b2937d6e6941973aa7b116e1d6405513.tar.gz
compcert-kvx-173e6c25b2937d6e6941973aa7b116e1d6405513.zip
Porting the BTL non-trap loads approach to RTL
Diffstat (limited to 'scheduling/BTLtoRTLproof.v')
-rw-r--r--scheduling/BTLtoRTLproof.v20
1 files changed, 14 insertions, 6 deletions
diff --git a/scheduling/BTLtoRTLproof.v b/scheduling/BTLtoRTLproof.v
index cbdc81bd..2e3c5cd8 100644
--- a/scheduling/BTLtoRTLproof.v
+++ b/scheduling/BTLtoRTLproof.v
@@ -230,12 +230,20 @@ Proof.
intros; rewrite symbols_preserved; trivial.
- (* exec_load *)
inv MIB. exists pc'; split; auto; constructor.
- apply plus_one. inv LOAD.
- eapply exec_Iload; eauto.
- all: try (destruct (eval_addressing _ _ _ _) eqn:EVAL;
- [ eapply exec_Iload_notrap2 | eapply exec_Iload_notrap1]; eauto).
- all: erewrite <- eval_addressing_preserved; eauto;
- intros; rewrite symbols_preserved; trivial.
+ apply plus_one. inversion LOAD; subst.
+ + eapply exec_Iload; eauto. eapply has_loaded_normal; eauto.
+ rewrite <- EVAL. erewrite <- eval_addressing_preserved; eauto.
+ intros; rewrite symbols_preserved; trivial.
+ + destruct (eval_addressing) eqn:EVAL in LOAD0.
+ * specialize (LOAD0 v).
+ eapply exec_Iload; eauto. eapply has_loaded_default; eauto.
+ rewrite eval_addressing_preserved with (ge1:=ge).
+ intros a EVAL'; rewrite EVAL in EVAL'; inv EVAL'. apply LOAD0; auto.
+ intros; rewrite symbols_preserved; trivial.
+ * eapply exec_Iload; eauto. eapply has_loaded_default; eauto.
+ rewrite eval_addressing_preserved with (ge1:=ge).
+ intros a EVAL'; rewrite EVAL in EVAL'; inv EVAL'.
+ intros; rewrite symbols_preserved; trivial.
- (* exec_store *)
inv MIB. exists pc'; split; auto; constructor.
apply plus_one. eapply exec_Istore; eauto.