[LLVMdev] X86 LowerVECTOR_SHUFFLE Question

David Greene dag at cray.com
Fri Feb 25 13:19:57 PST 2011


In ToT, LowerVECTOR_SHUFFLE for x86 has this code:

  if (X86::isUNPCKLMask(SVOp))
    getTargetShuffleNode(getUNPCKLOpcode(VT) dl, VT, V1, V2, DAG);

why would this not be:

  if (X86::isUNPCKLMask(SVOp))
    return SVOp;

I'm trying to add support for VUNPCKL and am getting into trouble
because the existing code ends up creating:

VUNPCKLPS
  load
  load

which is badness come selection time.  Legalize doesn't get a chance to
look below the target shuffle node to see that there are two memory
operands.

Back in the 2.7 days, we used to just return the shuffle as is if it was
already legal.  Why the change to create a target node?  Will there be
problems if I change the code to return the shuffle as-is?

Thanks!

                       -Dave



More information about the llvm-dev mailing list