[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