Skip to content
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.