summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/R600/AMDGPUTargetMachine.cpp
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2013-01-18 21:15:53 +0000
committerTom Stellard <thomas.stellard@amd.com>2013-01-18 21:15:53 +0000
commitc4cabef7823177f6e21bfd4207490b2543609208 (patch)
tree3d65525bb00017e6ff3ca3ec4eedfcc1c6debf8d /llvm/lib/Target/R600/AMDGPUTargetMachine.cpp
parentbe8ebeebf7582151a6b9b18cbc1804759ff24b13 (diff)
downloadbcm5719-llvm-c4cabef7823177f6e21bfd4207490b2543609208.tar.gz
bcm5719-llvm-c4cabef7823177f6e21bfd4207490b2543609208.zip
R600: Proper insert S_WAITCNT instructions
Some instructions like memory reads/writes are executed asynchronously, so we need to insert S_WAITCNT instructions to block before accessing their results. Previously we have just inserted S_WAITCNT instructions after each async instruction, this patch fixes this and adds a prober insertion pass. Patch by: Christian König Tested-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Tom Stellard <thomas.stellard@amd.com> Signed-off-by: Christian König <deathsimple@vodafone.de> llvm-svn: 172846
Diffstat (limited to 'llvm/lib/Target/R600/AMDGPUTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/R600/AMDGPUTargetMachine.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/R600/AMDGPUTargetMachine.cpp b/llvm/lib/Target/R600/AMDGPUTargetMachine.cpp
index d09dc2efffe..26ac928347d 100644
--- a/llvm/lib/Target/R600/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/R600/AMDGPUTargetMachine.cpp
@@ -116,6 +116,11 @@ bool AMDGPUPassConfig::addPreRegAlloc() {
}
bool AMDGPUPassConfig::addPostRegAlloc() {
+ const AMDGPUSubtarget &ST = TM->getSubtarget<AMDGPUSubtarget>();
+
+ if (ST.device()->getGeneration() > AMDGPUDeviceInfo::HD6XXX) {
+ addPass(createSIInsertWaits(*TM));
+ }
return false;
}
OpenPOWER on IntegriCloud