Chris Lattner | db09262 | 2001-06-11 15:03:43 +0000 | [diff] [blame^] | 1 | * pred/succ iterators on basic blocks don't handle switch statements correctly |
Chris Lattner | 753bfec | 2001-06-07 16:58:13 +0000 | [diff] [blame] | 2 | * Enhance BB to make predecessor handling easier (to update PHI nodes) |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 3 | * Provide a pass that eliminates critical edges from the CFG |
Chris Lattner | db09262 | 2001-06-11 15:03:43 +0000 | [diff] [blame^] | 4 | * Provide a print pass to print out xvcg format files for vis |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 5 | * I need to provide an option to the bytecode loader to ignore memory |
| 6 | dependance edges. Instead, the VM would just treat memory operations |
| 7 | (load, store, getfield, putfield, call) as pinned instructions. |
| 8 | * I need to have a way to prevent taking the address of a constant pool |
| 9 | reference. You should only be able to take the address of a variable. |
| 10 | Maybe taking the address of a constant copies it? What about virtual |
| 11 | function tables? Maybe a const pointer would be better... |
| 12 | * Structures should be accessed something like this: ubyte is ok. Limits |
| 13 | structure size to 256 members. This can be fixed later by either: |
| 14 | 1. adding varient that takes ushort |
| 15 | 2. Splitting structures into nested structures each of half size |
Chris Lattner | db09262 | 2001-06-11 15:03:43 +0000 | [diff] [blame^] | 16 | <float> %f = load *{int, {float}} Str, 1, 0 |
| 17 | store float %f, *{int, {float}} Str, 1, 0 |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 18 | * I'm noticing me writing a lot of code that looks like this (dtor material here): |
| 19 | ConstPool.dropAllReferences(); |
| 20 | ConstPool.delete_all(); |
| 21 | ConstPool.setParent(0); |
| 22 | ~ConstPool |
| 23 | |
| 24 | * Need a way to attach bytecode block info at various levels of asm code. |
| 25 | * Rename "ConstantPool" to "ConstPool" |
| 26 | * Maybe ConstantPool objects should keep themselves sorted as things are |
| 27 | inserted. |
| 28 | * Need to be able to inflate recursive types. %x = { *%x }, %x = %x () |
| 29 | * Recognize and save comments in assembly and bytecode format |
| 30 | * Encode line number table in bytecode (like #line), optional table |
| 31 | |
| 32 | * Encode negative relative offsets in the bytecode file |
| 33 | |
| 34 | * Implement switch to switch on a constant pool array of type: |
| 35 | [{ label, int }] or [label] (lookup vs index switch) |
| 36 | * Apparently bison has a %pure_parser option. Maybe useful for Assembly/Parser |
| 37 | |
| 38 | * Implement a header file that can read either assembly or bytecode, implement |
| 39 | a writer that can output either based on what is read with this reader.. |
| 40 | * Implement the following derived types: |
| 41 | * structure/record { int %foo, int %bar} or { %foo = int, int } |
| 42 | * pointer int * |
| 43 | * "packed format", like this: [4 x sbyte]: Packed SIMD datatype |
| 44 | * Maybe 'tailcall' also? |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 45 | * Include a method level bytecode block that defines a mapping between values |
| 46 | and registers that defines a minimally register allocated code. This can |
| 47 | make me finally address how to encode extensions in assembly. |
| 48 | * Bytecode reader should use extensions that may or may not be linked into the |
| 49 | application to read blocks. Thus an easy way to ignore symbol table info |
| 50 | would be to not link in that reader into the app. |