Jeremy Siek 6 years ago
parent
commit
d543112a41
1 changed files with 141 additions and 23 deletions
  1. 141 23
      notes.md

+ 141 - 23
notes.md

@@ -9,7 +9,7 @@ Revising the architecture to better match Dybvig's P523 compiler
 
 * to do: insert type checking
 
-
+--------------------------------------------------------------------------------
 R1:
 
     exp ::= x | n | (op exp*) | (let ([x exp]) exp)
@@ -22,7 +22,6 @@ V
     exp ::= x | n | (op exp*) | (let ([x exp]) exp)
     R1 ::= (program () exp)
 
-
 remove-complex-opera*
 |
 V
@@ -31,7 +30,6 @@ V
     exp ::= arg | (op arg*) | (let ([x exp]) exp)
     R1' ::= (program () exp)
 
-
 create-CFG (the graph is empty for this assignment)
 |
 V
@@ -39,7 +37,7 @@ V
     arg ::= x | n
     exp ::= arg | (op arg*)
     stmt ::= (assign x exp)
-	tail ::= (return exp) | (stmt . tail)
+    tail ::= (return exp) | (seq stmt tail)
     C0 ::= (program () tail)
 
 uncover-locals
@@ -49,7 +47,7 @@ V
     arg ::= x | n
     exp ::= arg | (op arg*)
     stmt ::= (assign x exp)
-	tail ::= (return exp) | (stmt . tail)
+    tail ::= (return exp) | (seq stmt tail)
     C0 ::= (program ((locals . x*)) tail)
     
 select-instructions
@@ -57,8 +55,13 @@ select-instructions
 V
 
     imm ::= (var x) | (deref r n) | (int n)
+<<<<<<< HEAD
     instr ::= (addq imm imm) | (retq) | ...
     x86-CFG ::= (program ((locals . x*)) instr*)
+=======
+    instr ::= (addq imm imm) | ...
+    x86 ::= (program ((locals . x*)) instr*)
+>>>>>>> 65d8b657cf3fb531ba65dfa5cf93c3318f5bafba
 
 assign-homes
 |
@@ -108,10 +111,10 @@ V
 
     arg ::= x | n | #t | #f
     exp ::= arg | (op arg*)
-    tail ::= (goto label) | (if (op arg*) (goto label) (goto label))
-          | (return exp) | (stmt . tail)
+    tail ::= (return exp) | (seq stmt tail)
+           | (goto label) | (if (op arg*) ((goto label)) ((goto label)))
     stmt ::= (assign x exp)
-    CFG ::= (program ((type . type) (flow-graph . ([label . tail]*))) tail)
+    C1 ::= (program ((type . type) (flow-graph . ((label . tail)*))) tail)
 
 optimize-jumps
 |
@@ -125,22 +128,21 @@ V
 
     arg ::= x | n | #t | #f
     exp ::= arg | (op arg*)
-    tail ::= (return exp) | (stmt . tail)
-	      | (goto label) | (if (op arg*) (goto label) (goto label))
+    tail ::= (return exp) | (seq stmt tail)
+           | (goto label) | (if (op exp*) ((goto label)) ((goto label)))
     stmt ::= (assign x exp)
-    CFG ::= (program ((locals . x*) (type . type)
-	                  (flow-graph . ([label . tail]*)))
-				     tail)
+    C1 ::= (program ((type . type) (flow-graph . ((label . tail)*))
+                     (locals . x*)) 
+                    tail)
 
 select-instructions
 |
 V
 
     imm ::= (var x) | (deref r n) | (int n)
-    instr ::= (addq imm imm) | (jmp label) | (jmp-if cc label) | (retq)
-    x86-CFG ::= (program ((locals . x*) (type . type) 
-	                      (flow-graph . ([label . instr*]*))
-					     instr*)
+    instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq) 
+    x86 ::= (program ((locals . x*) (type . type) 
+                      (flow-graph . ((label . instr*)*))) instr*)
 
 uncover-live
 |
@@ -149,15 +151,15 @@ V
     imm ::= (var x) | (deref r n) | (int n)
     instr ::= (addq imm imm) | (jmp label) | (jmp-if cc label) | (retq)
 	block ::= (block (lives ls*) instr*)
-    x86-CFG ::= (program ((locals . x*) (type . type)
-	                      (flow-graph . ([label . block]*))) block)
+    x86 ::= (program ((locals . x*) (type . type)
+                      (flow-graph . ([label . block]*))) block)
 
 build-interference
 |
 V
 
-    x86-CFG ::= (program ((locals . x*) (type . type)
-	                      (flow-graph . ([label . block]*))
+    x86 ::= (program ((locals . x*) (type . type)
+                      (flow-graph . ([label . block]*))
 						  (conflicts . graph))
 					     block)
 
@@ -166,10 +168,126 @@ allocate-registers
 V
 
     imm ::= (reg r) | (deref r n) | (int n)
-    instr ::= (addq imm imm) | (jmp label) | (jmp-if cc label label) | (retq)
-    x86-CFG ::= (program (x ...) (type type) ([label . instr*]*) instr*)
+    instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq)
+    x86 ::= (program  ((locals . x*) (type . type) 
+                       (flow-graph . ((label . instr*)*))) instr*)
     
 print-x86
 |
 V
 
+--------------------------------------------------------------------------------
+
+R3:
+
+    exp ::= x | n | #t | #f | (op exp*) | (let ([x exp]) exp) | (if exp exp exp)
+          | (vector exp+) | (vector-ref exp n) | (vector-set! exp n exp)
+          | (void)
+    R2 ::= (program exp)
+
+type-check
+|
+V
+
+    type ::= ... | Void | (Vector type*)
+    exp ::= x | n | #t | #f | (op exp*) | (let ([x exp]) exp) | (if exp exp exp)
+          | (vector exp+) | (vector-ref exp n) | (vector-set! exp n exp)
+          | (void)
+          | (has-type exp type)
+    R2 ::= (program ((type . type)) exp)
+
+expose-allocation
+|
+V
+
+    type ::= ... | Void | (Vector type*)
+    exp ::= x | n | #t | #f | (op exp*) | (let ([x exp]) exp) | (if exp exp exp)
+          | (vector exp+) | (vector-ref exp n) | (vector-set! exp n exp)
+          | (void) | (has-type exp type)
+          | (collect n) | (allocate n type) | (global-value x)
+    R2 ::= (program ((type . type)) exp)
+
+remove-complex-opera*
+|
+V
+
+    arg ::= x | n | #t | #f | (void)
+    exp ::= arg | (op arg*) | (let ([x exp]) exp) | (if exp exp exp)
+          | (vector exp+) | (vector-ref exp n) | (vector-set! exp n exp)
+          | (void) | (has-type exp type)
+          | (collect n) | (allocate n type) | (global-value x)
+    R2 ::= (program ((type . type)) exp)
+
+create-CFG
+|
+V
+
+    arg ::= x | n | #t | #f | (void)
+    exp ::= arg | (op arg*) | (allocate n type) | (global-value x) 
+          | (has-type exp type)
+    tail ::= (goto label) | (if (op arg*) ((goto label)) ((goto label)))
+          | (return exp) | (seq stmt tail)
+    stmt ::= (assign x exp) | (collect n)
+    C1 ::= (program ((type . type) (flow-graph . ((label . tail)*))) tail)
+
+uncover-locals
+|
+V
+
+    ...
+    C1 ::= (program ((locals . ((x . type)*)) (type . type) 
+                     (flow-graph . ((label . tail)*))) tail)
+
+select-instructions
+|
+V
+
+    imm ::= (var x) | (deref r n) | (int n) | (global-value x)
+    instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq) 
+    x86-CFG ::= (program ((locals . ((x . type)*)) (type . type) 
+                          (flow-graph . ((label . instr*)*))) instr*)
+
+uncover-live
+|
+V
+
+    imm ::= (var x) | (deref r n) | (int n) | (global-value x)
+    instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq) 
+    block ::= (block (lives x**) instr*)
+    x86-CFG ::= (program ((locals . ((x . type)*)) (type . type) 
+                          (flow-graph . ((label . block)*))) block)
+
+build-interference
+|
+V
+
+    ...
+    x86-CFG ::= (program ((locals . ((x . type)*)) (type . type) 
+                          (conflicts . graph)
+                          (flow-graph . ((label . instr*)*))) instr*)
+
+build-move-graph
+|
+V
+
+    ...
+    x86-CFG ::= (program ((locals . ((x . type)*)) (type . type) 
+                          (conflicts . graph) (move-graph . graph)
+                          (flow-graph . ((label . instr*)*))) instr*)
+
+allocate-registers
+|
+V
+
+    imm ::= (reg x) | (deref r n) | (int n) | (global-value x)
+    instr ::= (addq imm imm) | ... | (jmp label) | (jmp-if cc label) | (retq) 
+    x86-CFG ::= (program ((locals . ((x . type)*)) (type . type) 
+                          (flow-graph . ((label . instr*)*))) instr*)
+
+patch-instructions
+|
+V
+
+    same as above
+
+print-x96