Index: lib/Target/R600/SIInstrInfo.cpp =================================================================== --- lib/Target/R600/SIInstrInfo.cpp +++ lib/Target/R600/SIInstrInfo.cpp @@ -161,6 +161,18 @@ return false; } +static bool isStride64(unsigned Opc) { + switch (Opc) { + case AMDGPU::DS_READ2ST64_B32: + case AMDGPU::DS_READ2ST64_B64: + case AMDGPU::DS_WRITE2ST64_B32: + case AMDGPU::DS_WRITE2ST64_B64: + return true; + default: + return false; + } +} + bool SIInstrInfo::getLdStBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg, unsigned &Offset, const TargetRegisterInfo *TRI) const { @@ -203,6 +215,9 @@ EltSize = getOpRegClass(*LdSt, Data0Idx)->getSize(); } + if (isStride64(Opc)) + EltSize *= 64; + const MachineOperand *AddrReg = getNamedOperand(*LdSt, AMDGPU::OpName::addr); BaseReg = AddrReg->getReg();