[llvm] r308762 - AMDGPU: Fix getMemOpBaseRegImmOfs for flat with offsets

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 21 11:06:36 PDT 2017


Author: arsenm
Date: Fri Jul 21 11:06:36 2017
New Revision: 308762

URL: http://llvm.org/viewvc/llvm-project?rev=308762&view=rev
Log:
AMDGPU: Fix getMemOpBaseRegImmOfs for flat with offsets

Modified:
    llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.cpp

Modified: llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.cpp?rev=308762&r1=308761&r2=308762&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.cpp (original)
+++ llvm/trunk/lib/Target/AMDGPU/SIInstrInfo.cpp Fri Jul 21 11:06:36 2017
@@ -305,9 +305,19 @@ bool SIInstrInfo::getMemOpBaseRegImmOfs(
   }
 
   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;
   }
 




More information about the llvm-commits mailing list