diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-04-04 19:42:54 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-04-04 19:42:54 -0400 |
commit | c89853497a4b1f481475da5e6e72e0c2612445c4 (patch) | |
tree | b4d46a9bd4094870377aeb05f1f2d9a6ac04cff0 /TODO | |
parent | 6c64119f553abe741d9e3d4a10d96d4caf9efdbe (diff) | |
download | roux-c89853497a4b1f481475da5e6e72e0c2612445c4.tar.gz |
write down some more ideas
Diffstat (limited to 'TODO')
-rw-r--r-- | TODO | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/TODO b/TODO index f8af8cc..e144c66 100644 --- a/TODO +++ b/TODO @@ -6,26 +6,49 @@ Features Instructions - ADD SUB SDIV UDIV SREM UREM MUL LSL LSR ASL ASR -- SEXT ZEXT +- SEXT ZEXT (we need 8, 16, 32, 64 bits) - CMP ... -- ALLOC STORE LOAD -- PTR +- ALLOC STORE LOAD (we need 8, 16, 32, 64 bits) +(- PTR) - CALL BRZ JMP RET +Machine +- SREG GREG +- Register use/defs for all instructions. + Types -- Integer (64 bits) -- Structure "{a,b,c}" -- Pointer to type "t" +- Integer (32 & 64 bits) +(- Structure "{a,b,c}") +(- Pointer (to type "t")) Questions - Q: Should we allow constant operands? A: It looks like `Con instructions are a bad idea because they introduce spurious live ranges. + This was not a huge problem, modifications s in loc and + getreg only fixed this. Still, it makes use larger bit + vectors during the liveness analysis. +- Q: How to represent the IR? + A: + So far, a graph of basic blocks composed of quadruples + seems to be the most convenient. +- Q: Do we need types? Problems -- x = y op z +- x = y op z [fixed using freeze] if x is spilled, y can be moved to a spill location to free one register for x, this is kind of stupid. + We can probably fix this by having a better heuristic + for spilling decisions. - [tentative fix: 4fc98da] Phi defined variables with spill location do not work. +- At the end of a block we call loc on all live variables, + if there are not enough registers, some variables get + assigned spill locations. We need to be able to spill + variables that are already in register. + NOTE: Following Braun & Hack we could do one pass + first that determines what variables are in register + at the end of loops. This sounds good because + back-edges are actually easier to detect than loop + headers! |