projects
/
platform
/
upstream
/
llvm.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
b3931b8
)
R600/SI: Insert s_waitcnt before s_barrier instructions.
author
Tom Stellard
<thomas.stellard@amd.com>
Tue, 6 Jan 2015 19:52:07 +0000
(19:52 +0000)
committer
Tom Stellard
<thomas.stellard@amd.com>
Tue, 6 Jan 2015 19:52:07 +0000
(19:52 +0000)
This ensures that all memory operations are complete when all threads
reach the barrier.
llvm-svn: 225290
llvm/lib/Target/R600/SIInsertWaits.cpp
patch
|
blob
|
history
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.global.ll
patch
|
blob
|
history
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.local.ll
patch
|
blob
|
history
diff --git
a/llvm/lib/Target/R600/SIInsertWaits.cpp
b/llvm/lib/Target/R600/SIInsertWaits.cpp
index
2e56508
..
181b116
100644
(file)
--- a/
llvm/lib/Target/R600/SIInsertWaits.cpp
+++ b/
llvm/lib/Target/R600/SIInsertWaits.cpp
@@
-428,7
+428,11
@@
bool SIInsertWaits::runOnMachineFunction(MachineFunction &MF) {
for (MachineBasicBlock::iterator I = MBB.begin(), E = MBB.end();
I != E; ++I) {
- Changes |= insertWait(MBB, I, handleOperands(*I));
+ // Wait for everything before a barrier.
+ if (I->getOpcode() == AMDGPU::S_BARRIER)
+ Changes |= insertWait(MBB, I, LastIssued);
+ else
+ Changes |= insertWait(MBB, I, handleOperands(*I));
pushInstruction(MBB, I);
}
diff --git
a/llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.global.ll
b/llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.global.ll
index
31e1709
..
a11d9ae
100644
(file)
--- a/
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.global.ll
+++ b/
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.global.ll
@@
-3,6
+3,8
@@
; FUNC-LABEL: {{^}}test_barrier_global:
; EG: GROUP_BARRIER
+; SI: buffer_store_dword
+; SI: s_waitcnt
; SI: s_barrier
define void @test_barrier_global(i32 addrspace(1)* %out) {
diff --git
a/llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.local.ll
b/llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.local.ll
index
94b3cbc
..
76c2453
100644
(file)
--- a/
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.local.ll
+++ b/
llvm/test/CodeGen/R600/llvm.AMDGPU.barrier.local.ll
@@
-3,6
+3,9
@@
; FUNC-LABEL: {{^}}test_barrier_local:
; EG: GROUP_BARRIER
+
+; SI: buffer_store_dword
+; SI: s_waitcnt
; SI: s_barrier
define void @test_barrier_local(i32 addrspace(1)* %out) {