diff options
author | Philip Reames <listmail@philipreames.com> | 2018-08-21 00:55:35 +0000 |
---|---|---|
committer | Philip Reames <listmail@philipreames.com> | 2018-08-21 00:55:35 +0000 |
commit | a5a8546ac6ada30b59d3237d77fa74dc496f344c (patch) | |
tree | 8c280a82427eeb0caa35c4811ec447a3ff718dec /llvm/lib/Analysis/AliasSetTracker.cpp | |
parent | 578c64da0c41b2f6186f69036aa0ed7f4ad2b70e (diff) | |
download | bcm5719-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.cpp | 3 |
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; |