[PATCH] D21534: GlobalISel: first outline of legalization interface.

Tim Northover via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 22 14:39:31 PDT 2016


> I'm not sure if this is really going to work the way you want. On x86 with
> AVX (but not AVX2), is LOAD <8 x i32> legal?  I mean, you could declare that
> it is... but you're going to end up with a bunch of vector shuffles trying
> to legalize ADD <8 x i32>. You could clean it up afterwards with some sort
> of optimization pass to split vectors where it's profitable... but it gets
> complicated when you start dealing with values with multiple uses and PHI
> nodes.

This still seems to be something for RegBankSelect to me. It's going
to see something like

    %0(256) = G_LOAD <4 x i32> ...
    %1(128) = G_EXTRACT <2 x i32> %0, 0
    %2(128) = G_EXTRACT <2 x i32> %0, 1
    %3(128) = G_ADD <2 x i32> %1, ...
    %4(128) = G_ADD <2 x i32> %2, ...
    %5(256) = G_SEQ <4 x i32> %3 %4

and ought to have the cost model necessary to decide that (XMM, XMM)
is the best register class (in whatever representation it has, an
extension of the .td RegClasses with tuples) rather than YMM.

Tim.


More information about the llvm-commits mailing list