Chris Lattner | 643ecd4 | 2001-09-07 16:10:35 +0000 | [diff] [blame^] | 1 | * Don't emit constant pool blocks for methods with empty constant pools! |
Chris Lattner | 491bff4 | 2001-08-27 05:17:20 +0000 | [diff] [blame] | 2 | * Need to implement getelementptr, load, and store for indirection through |
| 3 | arrays and multidim arrays |
Chris Lattner | 49fec96 | 2001-07-14 06:04:27 +0000 | [diff] [blame] | 4 | * Indirect calls should use the icall instruction |
| 5 | * Rewrite the llvm parser/lexer in http://www.antlr.org when time permits. |
| 6 | They actually do C++. Imagine that. |
Chris Lattner | 8b9f7c0 | 2001-07-08 21:18:41 +0000 | [diff] [blame] | 7 | * Need to implement constant propogation of cast instructions! |
Chris Lattner | 05b9a7f | 2001-06-30 06:37:33 +0000 | [diff] [blame] | 8 | * Fix DCE to elminate br <c>, %L1, %L1 so that it can optimize the main of |
| 9 | fib.ll better. Currently I have to do this to get best results: |
Chris Lattner | 100efcb | 2001-07-03 05:35:04 +0000 | [diff] [blame] | 10 | as < fib.ll | opt -inline -sccp -dce -sccp -dce |dis |
Chris Lattner | 643ecd4 | 2001-09-07 16:10:35 +0000 | [diff] [blame^] | 11 | * fix the constprop br <x> <dst1> <dst1> case. Must handle PHI nodes correctly |
Chris Lattner | 3f7fe71 | 2001-06-29 05:21:05 +0000 | [diff] [blame] | 12 | * Fix DCE to work better, so that SCCP can show it's true value. |
| 13 | * Implement ADCE |
Chris Lattner | 0305cfd | 2001-06-27 23:24:50 +0000 | [diff] [blame] | 14 | * Fix the const pool printer to print out constants in some sort of "sorted" |
| 15 | order. Then enable TestOptimizer.sh to diff -sccp output. Currently it |
| 16 | doesn't work because the diff fails because of ordering of the constant |
| 17 | pool. :( |
Chris Lattner | 0305cfd | 2001-06-27 23:24:50 +0000 | [diff] [blame] | 18 | * Should provide "castTerminator, castPHI, etc" functions in Instruction, and |
| 19 | similar functions in other classes, that effectively do dynamic casts. This |
| 20 | would allow code like this: |
| 21 | if (I->isTerminator()) { |
| 22 | TerminatorInst *TI = (TerminatorInst*)I; |
| 23 | ... |
| 24 | } |
| 25 | to be written as: |
| 26 | if (TerminatorInst *TI = I->castTerminatorInst()) { |
| 27 | ... |
| 28 | } |
| 29 | * Think about whether edge split SSA form would be useful to do. |
| 30 | * Inlining should attempt to give block names the same name in the inlined |
| 31 | method (using SymbolTable::getUniqueName) |
Chris Lattner | a4fbb1a | 2001-06-20 23:09:27 +0000 | [diff] [blame] | 32 | * The dropAllReferences code can be a noop when NDEBUG!!! |
Chris Lattner | 1ffbbf4 | 2001-06-20 19:26:00 +0000 | [diff] [blame] | 33 | * Finish xvcg output |
Chris Lattner | db09262 | 2001-06-11 15:03:43 +0000 | [diff] [blame] | 34 | * pred/succ iterators on basic blocks don't handle switch statements correctly |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 35 | * Provide a pass that eliminates critical edges from the CFG |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 36 | * I need to provide an option to the bytecode loader to ignore memory |
| 37 | dependance edges. Instead, the VM would just treat memory operations |
| 38 | (load, store, getfield, putfield, call) as pinned instructions. |
| 39 | * I need to have a way to prevent taking the address of a constant pool |
| 40 | reference. You should only be able to take the address of a variable. |
| 41 | Maybe taking the address of a constant copies it? What about virtual |
Chris Lattner | 643ecd4 | 2001-09-07 16:10:35 +0000 | [diff] [blame^] | 42 | function tables? Maybe a const pointer would be better... Alternatively, |
| 43 | we could alloca a local variable, copy a constant into it, and use that... |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 44 | * Need a way to attach bytecode block info at various levels of asm code. |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 45 | * Recognize and save comments in assembly and bytecode format |
| 46 | * Encode line number table in bytecode (like #line), optional table |
| 47 | |
| 48 | * Encode negative relative offsets in the bytecode file |
| 49 | |
| 50 | * Implement switch to switch on a constant pool array of type: |
| 51 | [{ label, int }] or [label] (lookup vs index switch) |
| 52 | * Apparently bison has a %pure_parser option. Maybe useful for Assembly/Parser |
| 53 | |
| 54 | * Implement a header file that can read either assembly or bytecode, implement |
| 55 | a writer that can output either based on what is read with this reader.. |
| 56 | * Implement the following derived types: |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 57 | * pointer int * |
| 58 | * "packed format", like this: [4 x sbyte]: Packed SIMD datatype |
| 59 | * Maybe 'tailcall' also? |
Chris Lattner | 0095054 | 2001-06-06 20:29:01 +0000 | [diff] [blame] | 60 | * Include a method level bytecode block that defines a mapping between values |
| 61 | and registers that defines a minimally register allocated code. This can |
| 62 | make me finally address how to encode extensions in assembly. |
| 63 | * Bytecode reader should use extensions that may or may not be linked into the |
| 64 | application to read blocks. Thus an easy way to ignore symbol table info |
| 65 | would be to not link in that reader into the app. |