From: Matt Arsenault Date: Fri, 21 Jul 2017 18:06:36 +0000 (+0000) Subject: AMDGPU: Fix getMemOpBaseRegImmOfs for flat with offsets X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3cf398140526739f438eef08d10dc1cadc56c5ee;p=llvm AMDGPU: Fix getMemOpBaseRegImmOfs for flat with offsets git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308762 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/AMDGPU/SIInstrInfo.cpp b/lib/Target/AMDGPU/SIInstrInfo.cpp index 7d4ba2c52da..6cce7ca4175 100644 --- a/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -305,9 +305,19 @@ bool SIInstrInfo::getMemOpBaseRegImmOfs(MachineInstr &LdSt, unsigned &BaseReg, } if (isFLAT(LdSt)) { - const MachineOperand *AddrReg = getNamedOperand(LdSt, AMDGPU::OpName::vaddr); - BaseReg = AddrReg->getReg(); - Offset = 0; + const MachineOperand *VAddr = getNamedOperand(LdSt, AMDGPU::OpName::vaddr); + if (VAddr) { + // Can't analyze 2 offsets. + if (getNamedOperand(LdSt, AMDGPU::OpName::saddr)) + return false; + + BaseReg = VAddr->getReg(); + } else { + // scratch instructions have either vaddr or saddr. + BaseReg = getNamedOperand(LdSt, AMDGPU::OpName::saddr)->getReg(); + } + + Offset = getNamedOperand(LdSt, AMDGPU::OpName::offset)->getImm(); return true; }