-
Notifications
You must be signed in to change notification settings - Fork 28
Home
Jeff Bush edited this page Mar 8, 2014
·
202 revisions
To do:
- Investigate MCLinker instead of LLD: https://code.google.com/p/mclinker/
- Add whole program tests to ensure large stack frames work correctly.
- ADDE/ADDC/SUBE/SUBC not efficient, use branches, which are unnecessary
- Call instruction limits text size to 1MB. Using low 5 bits of branch for non-conditional branches and making the call offset be a multiple of four would increase this to 64MB (or load function addresses from constant pool)
- Support assembly of cache control instructions with offset (mostly for completeness...)
- Doing a block load with a vector pointer register in assembly is silently ignored (treated as scalar): load_v v0, (v1). Make this flag an error for the wrong type of register.
- VectorProcDAGToDAGISel::SelectADDRri checks for add of int<13>. This does not correspond to the size of the offset field in a memory instruction. Need to adjust and possibly check for masked and unmasked versions (which have differently sized fields)
- Move runtime functions like __udivsi3 into a library built in the compiler tree and automatically pulled into linker (basically a lite version of compiler-rt)
- Add __all intrinsic for if conditionals.
- A setne instruction that has an immediate 0 can be eliminated (optimization)
- Add VectorProcTargetTransformInfo to enable loop vectorization (more work is needed)
- Bug (?): LLD puts first segment at a non-zero address
- Explore using bitcode as object files and enabling link time optimizations (http://llvm.org/docs/LinkTimeOptimization.html)
- Fix special unary ops (ftoi, itof, reciprocal, sext.8, sext.16): support all instruction formats, add to standard test suite.
- Compute capacity of immediate field based on instruction--currently conservatively uses smallest size available (VectorProcTargetLowering::LowerConstant)
- Make clang builtins do a little more checking and return errors for invalid arguments instead of asserting in backend.
- Unordered floating point comparisons not supported
- Investigating creating vector of pointers type, represent in builtins/intrinsics <16 x i32*> (http://blog.llvm.org/2011/12/llvm-31-vector-changes.html)
- Perhaps create a new vector type specific to this architecture that has more sane behavior around conversions.