blob: 2c348dda9ce047f8c29521b18bb28a10f8fc1b43 [file] [log] [blame]
Chris Lattner643ecd42001-09-07 16:10:35 +00001* Don't emit constant pool blocks for methods with empty constant pools!
Chris Lattner491bff42001-08-27 05:17:20 +00002* Need to implement getelementptr, load, and store for indirection through
3 arrays and multidim arrays
Chris Lattner49fec962001-07-14 06:04:27 +00004* 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 Lattner8b9f7c02001-07-08 21:18:41 +00007* Need to implement constant propogation of cast instructions!
Chris Lattner05b9a7f2001-06-30 06:37:33 +00008* 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 Lattner100efcb2001-07-03 05:35:04 +000010 as < fib.ll | opt -inline -sccp -dce -sccp -dce |dis
Chris Lattner643ecd42001-09-07 16:10:35 +000011* fix the constprop br <x> <dst1> <dst1> case. Must handle PHI nodes correctly
Chris Lattner3f7fe712001-06-29 05:21:05 +000012* Fix DCE to work better, so that SCCP can show it's true value.
13* Implement ADCE
Chris Lattner0305cfd2001-06-27 23:24:50 +000014* 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 Lattner0305cfd2001-06-27 23:24:50 +000018* 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 Lattnera4fbb1a2001-06-20 23:09:27 +000032* The dropAllReferences code can be a noop when NDEBUG!!!
Chris Lattner1ffbbf42001-06-20 19:26:00 +000033* Finish xvcg output
Chris Lattnerdb092622001-06-11 15:03:43 +000034* pred/succ iterators on basic blocks don't handle switch statements correctly
Chris Lattner00950542001-06-06 20:29:01 +000035* Provide a pass that eliminates critical edges from the CFG
Chris Lattner00950542001-06-06 20:29:01 +000036* 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 Lattner643ecd42001-09-07 16:10:35 +000042 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 Lattner00950542001-06-06 20:29:01 +000044* Need a way to attach bytecode block info at various levels of asm code.
Chris Lattner00950542001-06-06 20:29:01 +000045* 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 Lattner00950542001-06-06 20:29:01 +000057 * pointer int *
58 * "packed format", like this: [4 x sbyte]: Packed SIMD datatype
59* Maybe 'tailcall' also?
Chris Lattner00950542001-06-06 20:29:01 +000060* 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.