diff options
| author | David Greene <greened@obbligato.org> | 2018-10-04 14:07:59 +0000 |
|---|---|---|
| committer | David Greene <greened@obbligato.org> | 2018-10-04 14:07:59 +0000 |
| commit | 4f916df29edb27f187936ff4a81718248e98a05b (patch) | |
| tree | d5a905ac8d5f7687fb1935d06d54bdeb3a07d799 /llvm/lib/Target/X86/X86ISelLowering.cpp | |
| parent | b5bbfef6cd89af8b13a3e96e72202400f6783b68 (diff) | |
| download | bcm5719-llvm-4f916df29edb27f187936ff4a81718248e98a05b.tar.gz bcm5719-llvm-4f916df29edb27f187936ff4a81718248e98a05b.zip | |
[X86] Set correct MMO offset on scalarized load pieces
When scalarizing a load, be sure to update the offset in the
MachineMemOperand for each scalar load.
llvm-svn: 343776
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelLowering.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp index 212016c94a7..79f5f875201 100644 --- a/llvm/lib/Target/X86/X86ISelLowering.cpp +++ b/llvm/lib/Target/X86/X86ISelLowering.cpp @@ -19971,15 +19971,20 @@ static SDValue LowerLoad(SDValue Op, const X86Subtarget &Subtarget, SmallVector<SDValue, 8> Chains; SDValue Ptr = Ld->getBasePtr(); - SDValue Increment = DAG.getConstant(SclrLoadTy.getSizeInBits() / 8, dl, + unsigned OffsetInc = SclrLoadTy.getSizeInBits() / 8; + SDValue Increment = DAG.getConstant(OffsetInc, dl, TLI.getPointerTy(DAG.getDataLayout())); SDValue Res = DAG.getUNDEF(LoadUnitVecVT); + unsigned Offset = 0; for (unsigned i = 0; i < NumLoads; ++i) { + unsigned NewAlign = MinAlign(Ld->getAlignment(), Offset); + // Perform a single load. SDValue ScalarLoad = - DAG.getLoad(SclrLoadTy, dl, Ld->getChain(), Ptr, Ld->getPointerInfo(), - Ld->getAlignment(), Ld->getMemOperand()->getFlags()); + DAG.getLoad(SclrLoadTy, dl, Ld->getChain(), Ptr, + Ld->getPointerInfo().getWithOffset(Offset), + NewAlign, Ld->getMemOperand()->getFlags()); Chains.push_back(ScalarLoad.getValue(1)); // Create the first element type using SCALAR_TO_VECTOR in order to avoid // another round of DAGCombining. @@ -19990,6 +19995,7 @@ static SDValue LowerLoad(SDValue Op, const X86Subtarget &Subtarget, ScalarLoad, DAG.getIntPtrConstant(i, dl)); Ptr = DAG.getNode(ISD::ADD, dl, Ptr.getValueType(), Ptr, Increment); + Offset += OffsetInc; } SDValue TF = DAG.getNode(ISD::TokenFactor, dl, MVT::Other, Chains); |

