Figure out a strategy for region restrictions
There are piles of restrictions in the hardware on register regions. We need a comprehensive strategy for making sure that, at the end of the day, the code we emit is legal. Right now, we have a stride parameter in ibc_logical_reg
and it's used in a somewhat ad-hock fasion. There's a lot that, to be honest, kind-of works by luck. Most likely, what we need is:
- A strategy for assigning strides during the compile process. (This gets tricky because strides affect SIMD splitting which generates new instructions and new registers which need strides).
- A final legalization pass that runs right before RA and deals with any final issues that simple stride assignment wasn't able to manage. Likely, this is where we get to implement all the ICL and little-core "fun"