diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2022-02-05 18:04:23 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2022-02-05 18:05:05 +0000 |
| commit | ecbca9f5fb7d7613d2b94982c4825eb0d33d6842 (patch) | |
| tree | 3a4038f3b7bafaeade9fd6146ea8021237616657 /llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp | |
| parent | 6f8fc217eaa12bf657be1c6468ed9938d10168b3 (diff) | |
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp | 14 |
1 files changed, 4 insertions, 10 deletions
diff --git a/llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp b/llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp index c18637bdbc43..44bdbe37dec0 100644 --- a/llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp +++ b/llvm/lib/Target/AMDGPU/SILoadStoreOptimizer.cpp @@ -938,12 +938,6 @@ bool SILoadStoreOptimizer::checkAndPrepareMerge( // 2. It is safe to move MBBI down past the instruction that I will // be merged into. - if (MBBI->hasUnmodeledSideEffects()) { - // We can't re-order this instruction with respect to other memory - // operations, so we fail both conditions mentioned above. - return false; - } - if (MBBI->mayLoadOrStore() && (!memAccessesCanBeReordered(*CI.I, *MBBI, AA) || !canMoveInstsAcrossMemOp(*MBBI, InstsToMove, AA))) { @@ -1977,10 +1971,10 @@ SILoadStoreOptimizer::collectMergeableInsts( if (promoteConstantOffsetToImm(MI, Visited, AnchorList)) Modified = true; - // Don't combine if volatile. We also won't be able to merge across this, so - // break the search. We can look after this barrier for separate merges. - if (MI.hasOrderedMemoryRef()) { - LLVM_DEBUG(dbgs() << "Breaking search on memory fence: " << MI); + // Treat volatile accesses, ordered accesses and unmodeled side effects as + // barriers. We can look after this barrier for separate merges. + if (MI.hasOrderedMemoryRef() || MI.hasUnmodeledSideEffects()) { + LLVM_DEBUG(dbgs() << "Breaking search on barrier: " << MI); // Search will resume after this instruction in a separate merge list. ++BlockI; |
