TypeExpandInteger for vectors?

It looks like in various places in SelectionDAG and related machinery we appear to implicitly or explicitly assume that TypeExpandInteger only applies to scalars.

Does anybody know why that is?

For our target (Pixel Visual Core: https://www.blog.google/products/pixel/pixel-visual-core-image-processing-and-machine-learning-pixel-2/) expanding a N-bit vector op into two (N/2)-bit vector ops is a natural way to legalize some of our vector operations, but we’re finding that we need to modify a bunch of random places in the code to make it work. I’m curious if there is a cleaner way, or some big picture thing I’m missing.


– Sean Silva

To be clear: the vector ops are all of the same number of elements. Just the bit width of the element type changes.

I think it just hasn’t been a priority for any in-tree target; most code doesn’t use illegal vector types much, and the default strategy generates decent code in most cases. (You might have an easier time just adding a few target-specific DAGCombines for specific operations which lead to low-quality code.) -Eli

Thanks Eli. Good idea of using DAG combines for this, I’ll see if that works for us.

– Sean Silva