Coverage
--------
-- Floating point numbers
- Complex numbers
-- Integer division (MOD)
-- Fat objects (strings/slices/interfaces) vs. Phi
- Defer?
- Closure args
- PHEAP vars
- GC maps
- Write barriers
- Debugging info
-- Handle flags register correctly (clobber/spill/restore)
-- Proper panic edges from checks & calls (+deferreturn)
+- Deferreturn
- Can/should we move control values out of their basic block?
- Anything to do for the race detector?
-- Slicing details (avoid ptr to next object)
+- Slicing details (avoid ptr to next object) [done for string]
Optimizations (better compiled code)
------------------------------------
- Combining nil checks with subsequent load
- Implement memory zeroing with REPSTOSQ and DuffZero
- Implement memory copying with REPMOVSQ and DuffCopy
-- Make deadstore work with zeroing
-- Add branch predictions
- Add a value range propagation pass (for bounds elim & bitwidth reduction)
-- Stackalloc: group pointer-containing variables & spill slots together
- Stackalloc: organize values to allow good packing
- Regalloc: use arg slots as the home for arguments (don't copy args to locals)
- Reuse stack slots for noninterfering & compatible values (but see issue 8740)
Regalloc
--------
- Make less arch-dependent
-- Don't spill everything at every basic block boundary
- Allow args and return values to be ssa-able
- Handle 2-address instructions
-- Make calls clobber all registers
- Make liveness analysis non-quadratic
- Materialization of constants