mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-31 09:11:13 +00:00
1b6e1fca14
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@415 91177308-0d34-0410-b5e6-96231b3b80d8
65 lines
3.4 KiB
Plaintext
65 lines
3.4 KiB
Plaintext
* Need to implement getelementptr, load, and store for indirection through
|
|
arrays and multidim arrays
|
|
* Indirect calls should use the icall instruction
|
|
* Rewrite the llvm parser/lexer in http://www.antlr.org when time permits.
|
|
They actually do C++. Imagine that.
|
|
* Need to implement constant propogation of cast instructions!
|
|
* Fix DCE to elminate br <c>, %L1, %L1 so that it can optimize the main of
|
|
fib.ll better. Currently I have to do this to get best results:
|
|
as < fib.ll | opt -inline -sccp -dce -sccp -dce |dis
|
|
* fix the constprop br <x> <dst1> <dst1> case. Must handle PHI nodes correctly
|
|
* Fix DCE to work better, so that SCCP can show it's true value.
|
|
* Implement ADCE
|
|
* Fix the const pool printer to print out constants in some sort of "sorted"
|
|
order. Then enable TestOptimizer.sh to diff -sccp output. Currently it
|
|
doesn't work because the diff fails because of ordering of the constant
|
|
pool. :(
|
|
* Should provide "castTerminator, castPHI, etc" functions in Instruction, and
|
|
similar functions in other classes, that effectively do dynamic casts. This
|
|
would allow code like this:
|
|
if (I->isTerminator()) {
|
|
TerminatorInst *TI = (TerminatorInst*)I;
|
|
...
|
|
}
|
|
to be written as:
|
|
if (TerminatorInst *TI = I->castTerminatorInst()) {
|
|
...
|
|
}
|
|
* Think about whether edge split SSA form would be useful to do.
|
|
* Inlining should attempt to give block names the same name in the inlined
|
|
method (using SymbolTable::getUniqueName)
|
|
* The dropAllReferences code can be a noop when NDEBUG!!!
|
|
* Finish xvcg output
|
|
* pred/succ iterators on basic blocks don't handle switch statements correctly
|
|
* Provide a pass that eliminates critical edges from the CFG
|
|
* I need to provide an option to the bytecode loader to ignore memory
|
|
dependance edges. Instead, the VM would just treat memory operations
|
|
(load, store, getfield, putfield, call) as pinned instructions.
|
|
* I need to have a way to prevent taking the address of a constant pool
|
|
reference. You should only be able to take the address of a variable.
|
|
Maybe taking the address of a constant copies it? What about virtual
|
|
function tables? Maybe a const pointer would be better... Alternatively,
|
|
we could alloca a local variable, copy a constant into it, and use that...
|
|
* Need a way to attach bytecode block info at various levels of asm code.
|
|
* Recognize and save comments in assembly and bytecode format
|
|
* Encode line number table in bytecode (like #line), optional table
|
|
|
|
* Encode negative relative offsets in the bytecode file
|
|
|
|
* Implement switch to switch on a constant pool array of type:
|
|
[{ label, int }] or [label] (lookup vs index switch)
|
|
* Apparently bison has a %pure_parser option. Maybe useful for Assembly/Parser
|
|
|
|
* Implement a header file that can read either assembly or bytecode, implement
|
|
a writer that can output either based on what is read with this reader..
|
|
* Implement the following derived types:
|
|
* pointer int *
|
|
* "packed format", like this: [4 x sbyte]: Packed SIMD datatype
|
|
* Maybe 'tailcall' also?
|
|
* Include a method level bytecode block that defines a mapping between values
|
|
and registers that defines a minimally register allocated code. This can
|
|
make me finally address how to encode extensions in assembly.
|
|
* Bytecode reader should use extensions that may or may not be linked into the
|
|
application to read blocks. Thus an easy way to ignore symbol table info
|
|
would be to not link in that reader into the app.
|