[llvm] r318368 - [X86] Custom type legalize v2f32 masked gathers instead of trying to cleanup after type legalization.
Akira Hatanaka via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 16 23:04:53 PST 2017
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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171116/e4ba2692/attachment.html>
More information about the llvm-commits
mailing list