[PATCH] D17366: AMDGPU/SI: Fix s_waitcnt insertion for flat instructions

Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Feb 19 07:37:39 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL261330: AMDGPU/SI: Fix s_waitcnt insertion for flat instructions (authored by tstellar).

Changed prior to commit:
  http://reviews.llvm.org/D17366?vs=48274&id=48494#toc

Repository:
  rL LLVM

http://reviews.llvm.org/D17366

Files:
  llvm/trunk/lib/Target/AMDGPU/SIInsertWaits.cpp
  llvm/trunk/test/CodeGen/AMDGPU/waitcnt-flat.ll

Index: llvm/trunk/test/CodeGen/AMDGPU/waitcnt-flat.ll
===================================================================
--- llvm/trunk/test/CodeGen/AMDGPU/waitcnt-flat.ll
+++ llvm/trunk/test/CodeGen/AMDGPU/waitcnt-flat.ll
@@ -0,0 +1,16 @@
+; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=kaveri | FileCheck --check-prefix=GCN %s
+; RUN: llc < %s -mtriple=amdgcn--amdhsa -mcpu=fiji | FileCheck --check-prefix=GCN %s
+
+; If flat_store_dword and flat_load_dword use different registers for the data
+; operand, this test is not broken.  It just means it is no longer testing
+; for the original bug.
+
+; GCN: {{^}}test:
+; GCN: flat_store_dword v[{{[0-9]+:[0-9]+}}], [[DATA:v[0-9]+]]
+; GCN: s_waitcnt vmcnt(0) lgkmcnt(0)
+; GCN: flat_load_dword [[DATA]], v[{{[0-9]+:[0-9]+}}]
+define void @test(i32 addrspace(1)* %out, i32 %in) {
+  store volatile i32 0, i32 addrspace(1)* %out
+  %val = load volatile i32, i32 addrspace(1)* %out
+  ret void
+}
Index: llvm/trunk/lib/Target/AMDGPU/SIInsertWaits.cpp
===================================================================
--- llvm/trunk/lib/Target/AMDGPU/SIInsertWaits.cpp
+++ llvm/trunk/lib/Target/AMDGPU/SIInsertWaits.cpp
@@ -231,15 +231,17 @@
     return false;
 
   // Check if this operand is the value being stored.
-  // Special case for DS instructions, since the address
+  // Special case for DS/FLAT instructions, since the address
   // operand comes before the value operand and it may have
   // multiple data operands.
 
-  if (TII->isDS(MI)) {
+  if (TII->isDS(MI) || TII->isFLAT(MI)) {
     MachineOperand *Data = TII->getNamedOperand(MI, AMDGPU::OpName::data);
     if (Data && Op.isIdenticalTo(*Data))
       return true;
+  }
 
+  if (TII->isDS(MI)) {
     MachineOperand *Data0 = TII->getNamedOperand(MI, AMDGPU::OpName::data0);
     if (Data0 && Op.isIdenticalTo(*Data0))
       return true;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D17366.48494.patch
Type: text/x-patch
Size: 1859 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160219/db749e04/attachment.bin>


More information about the llvm-commits mailing list