diff options
author | Craig Topper <craig.topper@gmail.com> | 2019-12-30 19:07:36 -0800 |
---|---|---|
committer | Craig Topper <craig.topper@gmail.com> | 2019-12-30 19:36:04 -0800 |
commit | 787e078f3ec89bce82a789d2ee01beecc98db4d7 (patch) | |
tree | a56bc362f6717dd304177f8e82298e3462bee6ef /llvm/lib/Target | |
parent | 831898ff8acd4f5d8c5a644e6e566cefa23e2d6c (diff) | |
download | bcm5719-llvm-787e078f3ec89bce82a789d2ee01beecc98db4d7.tar.gz bcm5719-llvm-787e078f3ec89bce82a789d2ee01beecc98db4d7.zip |
[TargetLowering][AMDGPU] Make scalarizeVectorLoad return a pair of SDValues instead of creating a MERGE_VALUES node. NFCI
This allows us to clean up some places that were peeking through
the MERGE_VALUES node after the call. By returning the SDValues
directly, we can clean that up.
Unfortunately, there are several call sites in AMDGPU that wanted
the MERGE_VALUES and now need to create their own.
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 17 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/R600ISelLowering.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIISelLowering.cpp | 7 |
3 files changed, 19 insertions, 9 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index 5d8a2e26ab1..4cfbbe3f12f 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -1396,16 +1396,19 @@ SDValue AMDGPUTargetLowering::SplitVectorLoad(const SDValue Op, SelectionDAG &DAG) const { LoadSDNode *Load = cast<LoadSDNode>(Op); EVT VT = Op.getValueType(); + SDLoc SL(Op); // If this is a 2 element vector, we really want to scalarize and not create // weird 1 element vectors. - if (VT.getVectorNumElements() == 2) - return scalarizeVectorLoad(Load, DAG); + if (VT.getVectorNumElements() == 2) { + SDValue Ops[2]; + std::tie(Ops[0], Ops[1]) = scalarizeVectorLoad(Load, DAG); + return DAG.getMergeValues(Ops, SL); + } SDValue BasePtr = Load->getBasePtr(); EVT MemVT = Load->getMemoryVT(); - SDLoc SL(Op); const MachinePointerInfo &SrcValue = Load->getMemOperand()->getPointerInfo(); @@ -2869,11 +2872,13 @@ SDValue AMDGPUTargetLowering::performLoadCombine(SDNode *N, // the bytes again are not eliminated in the case of an unaligned copy. if (!allowsMisalignedMemoryAccesses( VT, AS, Align, LN->getMemOperand()->getFlags(), &IsFast)) { + SDValue Ops[2]; + if (VT.isVector()) - return scalarizeVectorLoad(LN, DAG); + std::tie(Ops[0], Ops[1]) = scalarizeVectorLoad(LN, DAG); + else + std::tie(Ops[0], Ops[1]) = expandUnalignedLoad(LN, DAG); - SDValue Ops[2]; - std::tie(Ops[0], Ops[1]) = expandUnalignedLoad(LN, DAG); return DAG.getMergeValues(Ops, SDLoc(N)); } diff --git a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp index dbc9afaa33c..1b1f5f9a404 100644 --- a/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/R600ISelLowering.cpp @@ -1456,7 +1456,9 @@ SDValue R600TargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const { if ((LoadNode->getAddressSpace() == AMDGPUAS::LOCAL_ADDRESS || LoadNode->getAddressSpace() == AMDGPUAS::PRIVATE_ADDRESS) && VT.isVector()) { - return scalarizeVectorLoad(LoadNode, DAG); + SDValue Ops[2]; + std::tie(Ops[0], Ops[1]) = scalarizeVectorLoad(LoadNode, DAG); + return DAG.getMergeValues(Ops, DL); } // This is still used for explicit load from addrspace(8) diff --git a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp index e9f2a675de9..00e25a1713a 100644 --- a/llvm/lib/Target/AMDGPU/SIISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/SIISelLowering.cpp @@ -7489,8 +7489,11 @@ SDValue SITargetLowering::LowerLOAD(SDValue Op, SelectionDAG &DAG) const { // resource descriptor, we can only make private accesses up to a certain // size. switch (Subtarget->getMaxPrivateElementSize()) { - case 4: - return scalarizeVectorLoad(Load, DAG); + case 4: { + SDValue Ops[2]; + std::tie(Ops[0], Ops[1]) = scalarizeVectorLoad(Load, DAG); + return DAG.getMergeValues(Ops, DL); + } case 8: if (NumElements > 2) return SplitVectorLoad(Op, DAG); |