summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis/AliasSetTracker.cpp
diff options
context:
space:
mode:
authorPhilip Reames <listmail@philipreames.com>2018-08-21 00:55:35 +0000
committerPhilip Reames <listmail@philipreames.com>2018-08-21 00:55:35 +0000
commita5a8546ac6ada30b59d3237d77fa74dc496f344c (patch)
tree8c280a82427eeb0caa35c4811ec447a3ff718dec /llvm/lib/Analysis/AliasSetTracker.cpp
parent578c64da0c41b2f6186f69036aa0ed7f4ad2b70e (diff)
downloadbcm5719-llvm-a5a8546ac6ada30b59d3237d77fa74dc496f344c.tar.gz
bcm5719-llvm-a5a8546ac6ada30b59d3237d77fa74dc496f344c.zip
[AST] Mark invariant.starts as being readonly
These intrinsics are modelled as writing for control flow purposes, but they don't actually write to any location. Marking these - as we did for guards - allows LICM to hoist loads out of loops containing invariant.starts. Differential Revision: https://reviews.llvm.org/D50861 llvm-svn: 340245
Diffstat (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp')
-rw-r--r--llvm/lib/Analysis/AliasSetTracker.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp
index 23c598d4edb..0470247cf6c 100644
--- a/llvm/lib/Analysis/AliasSetTracker.cpp
+++ b/llvm/lib/Analysis/AliasSetTracker.cpp
@@ -174,7 +174,8 @@ void AliasSet::addUnknownInst(Instruction *I, AliasAnalysis &AA) {
// but don't actually modify any specific memory location.
using namespace PatternMatch;
bool MayWriteMemory = I->mayWriteToMemory() &&
- !match(I, m_Intrinsic<Intrinsic::experimental_guard>());
+ !match(I, m_Intrinsic<Intrinsic::experimental_guard>()) &&
+ !(I->use_empty() && match(I, m_Intrinsic<Intrinsic::invariant_start>()));
if (!MayWriteMemory) {
Alias = SetMayAlias;
Access |= RefAccess;
OpenPOWER on IntegriCloud