[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