diff options
author | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-04-11 22:29:31 +0000 |
---|---|---|
committer | Matt Arsenault <Matthew.Arsenault@amd.com> | 2017-04-11 22:29:31 +0000 |
commit | 9ac40026ddc7e759287f0a5cffa88ea8a1fb9d3e (patch) | |
tree | 4f4ccd780aa94ccb0d3ca872535891d8aa8d56b2 /llvm/lib/Target/AMDGPU/SIInsertWaits.cpp | |
parent | efa9f4b2107f5f89dbc78b355fe2614cdc541f85 (diff) | |
download | bcm5719-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.cpp | 14 |
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; } |