From a5a8546ac6ada30b59d3237d77fa74dc496f344c Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Tue, 21 Aug 2018 00:55:35 +0000 Subject: [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 --- llvm/lib/Analysis/AliasSetTracker.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp') 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()); + !match(I, m_Intrinsic()) && + !(I->use_empty() && match(I, m_Intrinsic())); if (!MayWriteMemory) { Alias = SetMayAlias; Access |= RefAccess; -- cgit v1.2.3