[PATCH] Add a target legalize hook for SplitVectorOperand
Justin Holewinski
justin.holewinski at gmail.com
Mon Jul 22 17:50:27 PDT 2013
Unfortunately, it's not my lowering code. This change triggers a
legalization loop in CodeGen/Generic/2009-03-29-SoftFloatVectorExtract.ll
when X86 is used as the default. The X86 target lowers an i64
extract_vector_elt to itself, causing the loop. I don't know enough about
the X86 custom lowering code to know where to start looking. I'll see if I
can identify the issue.
On Jul 22, 2013 6:05 PM, "Eli Friedman" <eli.friedman at gmail.com> wrote:
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130722/7b7a17e2/attachment.html>
More information about the llvm-commits
mailing list