diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2009-03-26 09:50:18 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2009-03-26 09:50:18 +0000 |
commit | 00b605a1d52696b055dd232a05dd54a312680b93 (patch) | |
tree | 7ebbd57e1d7c60e8b52e07526617c1aa30f3740f /common/Mem.v | |
parent | c90abe06d110eb9c39b941792d896c741dc851dd (diff) | |
download | compcert-kvx-00b605a1d52696b055dd232a05dd54a312680b93.tar.gz compcert-kvx-00b605a1d52696b055dd232a05dd54a312680b93.zip |
Added tail call optimization pass
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1015 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'common/Mem.v')
-rw-r--r-- | common/Mem.v | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/common/Mem.v b/common/Mem.v index de3e8c94..e169dfc7 100644 --- a/common/Mem.v +++ b/common/Mem.v @@ -1796,6 +1796,26 @@ Proof. unfold inject_id; intros. congruence. Qed. +Lemma free_left_lessdef: + forall m1 m2 b, + lessdef m1 m2 -> lessdef (free m1 b) m2. +Proof. + intros. destruct H. split. + rewrite <- H. auto. + apply free_left_inj; auto. +Qed. + +Lemma free_right_lessdef: + forall m1 m2 b, + lessdef m1 m2 -> low_bound m1 b >= high_bound m1 b -> + lessdef m1 (free m2 b). +Proof. + intros. destruct H. unfold lessdef. split. + rewrite H. auto. + apply free_right_inj; auto. intros. unfold inject_id in H2. inv H2. + red; intro. inv H2. generalize (size_chunk_pos chunk); intro. omega. +Qed. + Lemma valid_block_lessdef: forall m1 m2 b, lessdef m1 m2 -> valid_block m1 b -> valid_block m2 b. Proof. |