Add more notes
[oota-llvm.git] / docs / ChrisNotes.txt
1 * Fix the const pool printer to print out constants in some sort of "sorted"
2   order.  Then enable TestOptimizer.sh to diff -sccp output.  Currently it 
3   doesn't work because the diff fails because of ordering of the constant 
4   pool. :(
5 * Enable DoConstantPoolMerging to do trivial DCE of constant values.
6 * Fix DCE to work better, so that SCCP can show it's true value.
7 * Should provide "castTerminator, castPHI, etc" functions in Instruction, and
8   similar functions in other classes, that effectively do dynamic casts.  This
9   would allow code like this:
10     if (I->isTerminator()) {
11       TerminatorInst *TI = (TerminatorInst*)I;
12       ...
13     }
14   to be written as:
15     if (TerminatorInst *TI = I->castTerminatorInst()) {
16        ...
17     }
18 * Think about whether edge split SSA form would be useful to do.
19 * Inlining should attempt to give block names the same name in the inlined 
20   method (using SymbolTable::getUniqueName)
21 * The dropAllReferences code can be a noop when NDEBUG!!!
22 * Finish xvcg output
23 * pred/succ iterators on basic blocks don't handle switch statements correctly
24 * Enhance BB to make predecessor handling easier (to update PHI nodes)
25 * Provide a pass that eliminates critical edges from the CFG
26 * Provide a print pass to print out xvcg format files for vis
27 * I need to provide an option to the bytecode loader to ignore memory 
28   dependance edges.  Instead, the VM would just treat memory operations 
29   (load, store, getfield, putfield, call) as pinned instructions.
30 * I need to have a way to prevent taking the address of a constant pool
31   reference.  You should only be able to take the address of a variable.
32   Maybe taking the address of a constant copies it?  What about virtual 
33   function tables?  Maybe a const pointer would be better...
34 * Structures should be accessed something like this: ubyte is ok.  Limits 
35   structure size to 256 members.  This can be fixed later by either: 
36     1. adding varient that takes ushort
37     2. Splitting structures into nested structures each of half size
38   <float> %f = load *{int, {float}} Str, 1, 0
39   store float %f, *{int, {float}} Str, 1, 0
40 * I'm noticing me writing a lot of code that looks like this (dtor material here):
41   ConstPool.dropAllReferences();
42   ConstPool.delete_all();
43   ConstPool.setParent(0);
44   ~ConstPool
45
46 * Need a way to attach bytecode block info at various levels of asm code.
47 * Rename "ConstantPool" to "ConstPool"
48 * Maybe ConstantPool objects should keep themselves sorted as things are 
49   inserted.
50 * Need to be able to inflate recursive types.  %x = { *%x }, %x = %x ()
51 * Recognize and save comments in assembly and bytecode format
52 * Encode line number table in bytecode (like #line), optional table
53
54 * Encode negative relative offsets in the bytecode file
55
56 * Implement switch to switch on a constant pool array of type: 
57   [{ label, int }] or [label]   (lookup vs index switch)
58 * Apparently bison has a %pure_parser option.  Maybe useful for Assembly/Parser
59
60 * Implement a header file that can read either assembly or bytecode, implement 
61   a writer that can output either based on what is read with this reader..
62 * Implement the following derived types:
63   * structure/record               { int %foo, int %bar} or { %foo = int, int }
64   * pointer                          int *
65   * "packed format", like this:    [4 x sbyte]: Packed SIMD datatype
66 * Maybe 'tailcall' also?
67 * Include a method level bytecode block that defines a mapping between values 
68   and registers that defines a minimally register allocated code.  This can
69   make me finally address how to encode extensions in assembly.
70 * Bytecode reader should use extensions that may or may not be linked into the
71   application to read blocks.  Thus an easy way to ignore symbol table info
72   would be to not link in that reader into the app.