aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Interference_adjacency.v
diff options
context:
space:
mode:
authorblazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2010-01-08 07:53:02 +0000
committerblazy <blazy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2010-01-08 07:53:02 +0000
commita8c744000247af207b489d3cdd4e3d3cf60f72e1 (patch)
tree96c7ee4e244fccdb840233007604ba52d97c09e0 /backend/Interference_adjacency.v
parent283afabc594b385e4f17fa59647aa8cddee27f85 (diff)
downloadcompcert-a8c744000247af207b489d3cdd4e3d3cf60f72e1.tar.gz
compcert-a8c744000247af207b489d3cdd4e3d3cf60f72e1.zip
ajout branche allocation de registres
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1220 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'backend/Interference_adjacency.v')
-rwxr-xr-xbackend/Interference_adjacency.v66
1 files changed, 66 insertions, 0 deletions
diff --git a/backend/Interference_adjacency.v b/backend/Interference_adjacency.v
new file mode 100755
index 00000000..3d5d90dd
--- /dev/null
+++ b/backend/Interference_adjacency.v
@@ -0,0 +1,66 @@
+Require Import InterfGraphMapImp.
+Require Import Graph_Facts.
+Require Import FSets.
+Require Import SetsFacts.
+Require Import Edges.
+
+Import Edge RegFacts Props RegRegProps.
+
+(* Some properties about the interference adjacency
+ and the same about preference adjacency *)
+
+(* x is not in its own interference neighborhood *)
+Lemma not_in_interf_self : forall x g,
+~VertexSet.In x (interference_adj x g).
+
+Proof.
+intros x g. rewrite in_interf. intro H.
+elim (In_graph_edge_diff_ext _ _ H). auto.
+Qed.
+
+(* x is not in its own preference neighborhood *)
+Lemma not_in_pref_self : forall x g,
+~VertexSet.In x (preference_adj x g).
+
+Proof.
+intros x g. rewrite in_pref. intro H. destruct H.
+elim (In_graph_edge_diff_ext _ _ H). auto.
+Qed.
+
+(* If x is an interference neighbor of y in g
+ then y is an interference neighbor of x in g *)
+Lemma interf_adj_comm : forall x y g,
+VertexSet.In x (interference_adj y g) -> VertexSet.In y (interference_adj x g).
+
+Proof.
+intros x y g H. rewrite in_interf. rewrite edge_comm. rewrite <-in_interf. auto.
+Qed.
+
+(* If x is a preference neighbor of y in g
+ then y is a preference neighbor of x in g *)
+Lemma pref_adj_comm : forall x y g,
+VertexSet.In x (preference_adj y g) -> VertexSet.In y (preference_adj x g).
+
+Proof.
+intros x y g H.
+rewrite in_pref in H. destruct H. rewrite edge_comm in H.
+rewrite in_pref. exists x0. assumption.
+Qed.
+
+(* If x is an interference neighbor of any vertex of g then x is in g *)
+Lemma in_interf_in : forall x r g,
+VertexSet.In x (interference_adj r g) -> In_graph x g.
+
+Proof.
+intros x r g H. rewrite in_interf in H.
+apply (proj1 (In_graph_edge_in_ext _ _ H)).
+Qed.
+
+(* If x is a preferenec neighbor of any vertex then x is in g *)
+Lemma in_pref_in : forall x r g,
+VertexSet.In x (preference_adj r g) -> In_graph x g.
+
+Proof.
+intros x r g H. rewrite in_pref in H. destruct H.
+apply (proj1 (In_graph_edge_in_ext _ _ H)).
+Qed.