> Projects I could mentor, but an other mentor would be best:
> 10) Implement a type-based alias analysis in LLVM
> 11) Implement non-call exception handling in LLVM
I could mentor exception handling work. As well as non-call
exceptions there's a bunch of stuff to be done to optimize
exception handling.
(1) Move the personality function out of eh.selector and
make it per function. Have it be specified as a function
attribute like the garbage collector gc annotation.
(2) Move the catch-all definition out of eh.selector and
stick it in the LLVM meta-data (there needs to be some
kind of personality -> catch-all map in the meta-data).
With (1) and (2) done, it is possible to eliminate
eh.selector calls if they have no uses, and also not
to generate them in the first place if they were only
there to provide the personality and the catch-all.
(3) Instead of outputting explicit calls to the unwinder
rewind function in llvm-gcc, use a rewind intrinsic or
the unwind instruction instead. Teach codegen to lower
this to the appropriate unwinder call (this depends on
the target).
(4) If the only thing in a landing pad is a rewind,
change the invoke into a normal call. The point of (1)-(3)
above is to be able to do this. You get pointless invokes
all the time due to constructors/destructors which don't
actually do anything (but you only discover this after
having created the invoke + landing pad etc). This would
allow them to be turned into normal calls for a nice code
size reduction and code simplification.
(5) Lots of other stuff, see PR1508, PR2157 and PR2154
for starters.
Ciao,
Duncan.