summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2017-04-11 22:29:31 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2017-04-11 22:29:31 +0000
commit9ac40026ddc7e759287f0a5cffa88ea8a1fb9d3e (patch)
tree4f4ccd780aa94ccb0d3ca872535891d8aa8d56b2 /llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
parentefa9f4b2107f5f89dbc78b355fe2614cdc541f85 (diff)
downloadbcm5719-llvm-9ac40026ddc7e759287f0a5cffa88ea8a1fb9d3e.tar.gz
bcm5719-llvm-9ac40026ddc7e759287f0a5cffa88ea8a1fb9d3e.zip
AMDGPU: Insert wait at start of callee functions
llvm-svn: 300000
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIInsertWaits.cpp')
-rw-r--r--llvm/lib/Target/AMDGPU/SIInsertWaits.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp b/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
index b14ef3ad361..47257ce16ce 100644
--- a/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
+++ b/llvm/lib/Target/AMDGPU/SIInsertWaits.cpp
@@ -690,5 +690,19 @@ bool SIInsertWaits::runOnMachineFunction(MachineFunction &MF) {
for (MachineInstr *I : RemoveMI)
I->eraseFromParent();
+ if (!MFI->isEntryFunction()) {
+ // Wait for any outstanding memory operations that the input registers may
+ // depend on. We can't track them and it's better to to the wait after the
+ // costly call sequence.
+
+ // TODO: Could insert earlier and schedule more liberally with operations
+ // that only use caller preserved registers.
+ MachineBasicBlock &EntryBB = MF.front();
+ BuildMI(EntryBB, EntryBB.getFirstNonPHI(), DebugLoc(), TII->get(AMDGPU::S_WAITCNT))
+ .addImm(0);
+
+ Changes = true;
+ }
+
return Changes;
}
OpenPOWER on IntegriCloud