From: Matt Arsenault Date: Fri, 12 Feb 2016 02:22:21 +0000 (+0000) Subject: AMDGPU: Fix mishandling alignment when scalarizing vector loads/stores X-Git-Tag: llvmorg-3.9.0-rc1~14333 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=16f7bcb661b9c1ab952f800321223056c6807359;p=platform%2Fupstream%2Fllvm.git AMDGPU: Fix mishandling alignment when scalarizing vector loads/stores I don't think this was causing any real problems, so I'm not sure how to test for this. llvm-svn: 260646 --- diff --git a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp index f5600c1..c9d52fd 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp @@ -1061,7 +1061,9 @@ SDValue AMDGPUTargetLowering::ScalarizeVectorLoad(const SDValue Op, SmallVector Chains; SDLoc SL(Op); + unsigned BaseAlign = Load->getAlignment(); unsigned MemEltSize = MemEltVT.getStoreSize(); + MachinePointerInfo SrcValue(Load->getMemOperand()->getValue()); for (unsigned i = 0; i < NumElts; ++i) { @@ -1073,7 +1075,7 @@ SDValue AMDGPUTargetLowering::ScalarizeVectorLoad(const SDValue Op, Load->getChain(), Ptr, SrcValue.getWithOffset(i * MemEltSize), MemEltVT, Load->isVolatile(), Load->isNonTemporal(), - Load->isInvariant(), Load->getAlignment()); + Load->isInvariant(), MinAlign(BaseAlign, i * MemEltSize)); Loads.push_back(NewLoad.getValue(0)); Chains.push_back(NewLoad.getValue(1)); } @@ -1212,6 +1214,7 @@ SDValue AMDGPUTargetLowering::ScalarizeVectorStore(SDValue Op, SmallVector Chains; + unsigned BaseAlign = Store->getAlignment(); unsigned EltSize = MemEltVT.getStoreSize(); MachinePointerInfo SrcValue(Store->getMemOperand()->getValue()); @@ -1226,7 +1229,7 @@ SDValue AMDGPUTargetLowering::ScalarizeVectorStore(SDValue Op, DAG.getTruncStore(Store->getChain(), SL, Val, Ptr, SrcValue.getWithOffset(i * EltSize), MemEltVT, Store->isNonTemporal(), Store->isVolatile(), - Store->getAlignment()); + MinAlign(BaseAlign, i * EltSize)); Chains.push_back(NewStore); }