[PATCH] Add a target legalize hook for SplitVectorOperand

Eli Friedman eli.friedman at gmail.com
Mon Jul 22 15:05:36 PDT 2013


On Mon, Jul 22, 2013 at 10:10 AM, Justin Holewinski
<justin.holewinski at gmail.com> wrote:
> CustomLowerNode was not being called during SplitVectorOperand,
> meaning custom legalization could not be used by targets.
>
> Is there a reason this is missing, or just an oversight?
>
> This also adds a test case for NVPTX that depends on this custom
> legalization.
>
> http://llvm-reviews.chandlerc.com/D1195
>
> Files:
>   lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
>   lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
>   test/CodeGen/NVPTX/vector-stores.ll
>
> Index: lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
> ===================================================================
> --- lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
> +++ lib/CodeGen/SelectionDAG/LegalizeTypes.cpp
> @@ -919,6 +919,11 @@
>      // The target didn't want to custom lower it after all.
>      return false;
>
> +  if (!LegalizeResult && Results[0].getNode() == N)
> +    // The target just returned the same node, so it must not have wanted to
> +    // custom lower it after all.
> +    return false;

Please fix your custom lowering implementation...

>    // Make everything that once used N's values now use those in Results instead.
>    assert(Results.size() == N->getNumValues() &&
>           "Custom lowering returned the wrong number of results!");
> Index: lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
> ===================================================================
> --- lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
> +++ lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
> @@ -1031,6 +1031,10 @@
>          dbgs() << "\n");
>    SDValue Res = SDValue();
>
> +  // See if the target wants to custom split this node.
> +  if (CustomLowerNode(N, N->getOperand(OpNo).getValueType(), false))
> +    return false;
> +
>    if (Res.getNode() == 0) {
>      switch (N->getOpcode()) {
>      default:

This looks fine.

-Eli



More information about the llvm-commits mailing list