[llvm] r318368 - [X86] Custom type legalize v2f32 masked gathers instead of trying to cleanup after type legalization.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 16 23:06:32 PST 2017


Fixed in r318509.

~Craig

On Thu, Nov 16, 2017 at 11:04 PM, Akira Hatanaka via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Can you revert this? This bot has been red since yesterday.
>
> On Thu, Nov 16, 2017 at 4:05 PM, Akira Hatanaka <ahatanak at gmail.com>
> wrote:
>
>> Do you know whether this is causing the following bot to fail?
>>
>> http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-
>> expensive/9317/consoleFull#1531177838d489585b-5106-414a-ac11-3ff90657619c
>>
>> The assertion in masked_gather_scatter.ll started to fail in build #9307.
>>
>> On Wed, Nov 15, 2017 at 6:07 PM, Craig Topper via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: ctopper
>>> Date: Wed Nov 15 18:07:45 2017
>>> New Revision: 318368
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=318368&view=rev
>>> Log:
>>> [X86] Custom type legalize v2f32 masked gathers instead of trying to
>>> cleanup after type legalization.
>>>
>>> Modified:
>>>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>>
>>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X8
>>> 6/X86ISelLowering.cpp?rev=318368&r1=318367&r2=318368&view=diff
>>> ============================================================
>>> ==================
>>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Wed Nov 15 18:07:45
>>> 2017
>>> @@ -1370,6 +1370,11 @@ X86TargetLowering::X86TargetLowering(con
>>>          setOperationAction(ISD::CTPOP, VT, Legal);
>>>      }
>>>
>>> +    // Custom legalize 2x32 to get a little better code.
>>> +    if (Subtarget.hasVLX()) {
>>> +      setOperationAction(ISD::MGATHER, MVT::v2f32, Custom);
>>> +    }
>>> +
>>>      // Custom lower several nodes.
>>>      for (auto VT : { MVT::v4i32, MVT::v8i32, MVT::v2i64, MVT::v4i64,
>>>                       MVT::v4f32, MVT::v8f32, MVT::v2f64, MVT::v4f64 }) {
>>> @@ -24378,32 +24383,6 @@ static SDValue LowerMGATHER(SDValue Op,
>>>      SDValue RetOps[] = { Sext, NewGather.getValue(1) };
>>>      return DAG.getMergeValues(RetOps, dl);
>>>    }
>>> -  if (N->getMemoryVT() == MVT::v2f32 && Subtarget.hasVLX()) {
>>> -    // This transformation is for optimization only.
>>> -    // The type legalizer extended mask and index to 4 elements vector
>>> -    // in order to match requirements of the common gather node - same
>>> -    // vector width of index and value. X86 Gather node allows mismatch
>>> -    // of vector width in order to select more optimal instruction at
>>> the
>>> -    // end.
>>> -    assert(VT == MVT::v4f32 && Src0.getValueType() == MVT::v4f32 &&
>>> -           "Unexpected type in masked gather");
>>> -    if (Mask.getOpcode() == ISD::CONCAT_VECTORS &&
>>> -        ISD::isBuildVectorAllZeros(Mask.getOperand(1).getNode()) &&
>>> -        Index.getOpcode() == ISD::CONCAT_VECTORS &&
>>> -        Index.getOperand(1).isUndef()) {
>>> -      Mask = Mask.getOperand(0);
>>> -      Index = Index.getOperand(0);
>>> -    } else
>>> -      return Op;
>>> -    SDValue Ops[] = { N->getChain(), Src0, Mask, N->getBasePtr(), Index
>>> };
>>> -    SDValue NewGather = DAG.getTargetMemSDNode<X86MaskedGatherSDNode>(
>>> -      DAG.getVTList(MVT::v4f32, MVT::v2i1, MVT::Other), Ops, dl,
>>> -      N->getMemoryVT(), N->getMemOperand());
>>> -
>>> -    SDValue RetOps[] = { NewGather.getValue(0), NewGather.getValue(2) };
>>> -    return DAG.getMergeValues(RetOps, dl);
>>> -
>>> -  }
>>>    return Op;
>>>  }
>>>
>>> @@ -24902,6 +24881,29 @@ void X86TargetLowering::ReplaceNodeResul
>>>      Results.push_back(DAG.getBuildVector(DstVT, dl, Elts));
>>>      return;
>>>    }
>>> +  case ISD::MGATHER: {
>>> +    EVT VT = N->getValueType(0);
>>> +    if (VT == MVT::v2f32 && Subtarget.hasVLX()) {
>>> +      auto *Gather = cast<MaskedGatherSDNode>(N);
>>> +      SDValue Index = Gather->getIndex();
>>> +      if (Index.getValueType() != MVT::v2i64)
>>> +        return;
>>> +      SDValue Mask = Gather->getMask();
>>> +      assert(Mask.getValueType() == MVT::v2i1 && "Unexpected mask
>>> type");
>>> +      SDValue Src0 = DAG.getNode(ISD::CONCAT_VECTORS, dl, MVT::v4f32,
>>> +                                 Gather->getValue(),
>>> +                                 DAG.getUNDEF(MVT::v2f32));
>>> +      SDValue Ops[] = { Gather->getChain(), Src0, Mask,
>>> Gather->getBasePtr(),
>>> +                        Index };
>>> +      SDValue Res = DAG.getTargetMemSDNode<X86MaskedGatherSDNode>(
>>> +        DAG.getVTList(MVT::v4f32, MVT::v2i1, MVT::Other), Ops, dl,
>>> +        Gather->getMemoryVT(), Gather->getMemOperand());
>>> +      Results.push_back(Res);
>>> +      Results.push_back(Res.getValue(2));
>>> +      return;
>>> +    }
>>> +    break;
>>> +  }
>>>    }
>>>  }
>>>
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171116/be1e3c19/attachment.html>


More information about the llvm-commits mailing list