1 This is a list of things that need to be worked on. It will hopefully 2 be complete soon. 3 4 Correctness 5 ----------- 6 - Debugging info (check & fix as much as we can) 7 8 Optimizations (better compiled code) 9 ------------------------------------ 10 - Reduce register pressure in scheduler 11 - More strength reduction: multiply -> shift/add combos (Worth doing?) 12 - Add a value range propagation pass (for bounds elim & bitwidth reduction) 13 - Make dead store pass inter-block 14 - If there are a lot of MOVQ $0, ..., then load 15 0 into a register and use the register as the source instead. 16 - Allow arrays of length 1 (or longer, with all constant indexes?) to be SSAable. 17 - If strings are being passed around without being interpreted (ptr 18 and len fields being accessed) pass them in xmm registers? 19 Same for interfaces? 20 - Non-constant rotate detection. 21 - Do 0 <= x && x < n with one unsigned compare 22 - nil-check removal in indexed load/store case: 23 lea (%rdx,%rax,1),%rcx 24 test %al,(%rcx) // nil check 25 mov (%rdx,%rax,1),%cl // load to same address 26 - any pointer generated by unsafe arithmetic must be non-nil? 27 (Of course that may not be true in general, but it is for all uses 28 in the runtime, and we can play games with unsafe.) 29 30 Optimizations (better compiler) 31 ------------------------------- 32 - Handle signed division overflow and sign extension earlier 33 34 Regalloc 35 -------- 36 - Make less arch-dependent 37 - Handle 2-address instructions 38 - Make liveness analysis non-quadratic 39 40 Future/other 41 ------------ 42 - Start another architecture (arm?) 43 - 64-bit ops on 32-bit machines 44 - Should we get rid of named types in favor of underlying types during SSA generation? 45 - Infrastructure for enabling/disabling/configuring passes 46 - Modify logging for at least pass=1, to be Warnl compatible 47