diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-08-15 20:52:09 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-08-15 20:52:09 +0000 |
commit | 91386c7be498996d25b23d8ff36a65c7b31ddbd5 (patch) | |
tree | bbaf44f9a5089230070aaf38e806681e5d256eed /llvm/lib/Analysis/AliasSetTracker.cpp | |
parent | 1d5d2cac8c65ef20f3e0e10731bc5a2f784d9dbc (diff) | |
download | bcm5719-llvm-91386c7be498996d25b23d8ff36a65c7b31ddbd5.tar.gz bcm5719-llvm-91386c7be498996d25b23d8ff36a65c7b31ddbd5.zip |
Atomic load/store support in LICM.
llvm-svn: 137648
Diffstat (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp')
-rw-r--r-- | llvm/lib/Analysis/AliasSetTracker.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp index a11142d0e15..3fcd3b55de5 100644 --- a/llvm/lib/Analysis/AliasSetTracker.cpp +++ b/llvm/lib/Analysis/AliasSetTracker.cpp @@ -126,8 +126,6 @@ void AliasSet::addPointer(AliasSetTracker &AST, PointerRec &Entry, void AliasSet::addUnknownInst(Instruction *I, AliasAnalysis &AA) { UnknownInsts.push_back(I); - if (!I->mayReadOrWriteMemory()) - return; if (!I->mayWriteToMemory()) { AliasTy = MayAlias; AccessTy |= Refs; @@ -297,22 +295,28 @@ bool AliasSetTracker::add(Value *Ptr, uint64_t Size, const MDNode *TBAAInfo) { bool AliasSetTracker::add(LoadInst *LI) { + if (LI->getOrdering() > Monotonic) return addUnknown(LI); + AliasSet::AccessType ATy = AliasSet::Refs; + if (!LI->isUnordered()) ATy = AliasSet::ModRef; bool NewPtr; AliasSet &AS = addPointer(LI->getOperand(0), AA.getTypeStoreSize(LI->getType()), LI->getMetadata(LLVMContext::MD_tbaa), - AliasSet::Refs, NewPtr); + ATy, NewPtr); if (LI->isVolatile()) AS.setVolatile(); return NewPtr; } bool AliasSetTracker::add(StoreInst *SI) { + if (SI->getOrdering() > Monotonic) return addUnknown(SI); + AliasSet::AccessType ATy = AliasSet::Mods; + if (!SI->isUnordered()) ATy = AliasSet::ModRef; bool NewPtr; Value *Val = SI->getOperand(0); AliasSet &AS = addPointer(SI->getOperand(1), AA.getTypeStoreSize(Val->getType()), SI->getMetadata(LLVMContext::MD_tbaa), - AliasSet::Mods, NewPtr); + ATy, NewPtr); if (SI->isVolatile()) AS.setVolatile(); return NewPtr; } |