diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-11-03 23:19:16 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-11-03 23:19:16 +0000 |
commit | 840257a49c26c5c7d66ee17eeaaf5a43fad0b9da (patch) | |
tree | eda3b865cc17c5c710a5b6e8fe79d62e24a2b9e4 /llvm/lib/Analysis/AliasSetTracker.cpp | |
parent | 5b02a19f909bf7610c629ac1f16e79bd88a3d442 (diff) | |
download | bcm5719-llvm-840257a49c26c5c7d66ee17eeaaf5a43fad0b9da.tar.gz bcm5719-llvm-840257a49c26c5c7d66ee17eeaaf5a43fad0b9da.zip |
Use AA in LoadCombine
LoadCombine can be smarter about aborting when a writing instruction is
encountered, instead of aborting upon encountering any writing instruction, use
an AliasSetTracker, and only abort when encountering some write that might
alias with the loads that could potentially be combined.
This was originally motivated by comments made (and a test case provided) by
David Majnemer in response to PR21448. It turned out that LoadCombine was not
responsible for that PR, but LoadCombine should also be improved so that
unrelated stores (and @llvm.assume) don't interrupt load combining.
llvm-svn: 221203
Diffstat (limited to 'llvm/lib/Analysis/AliasSetTracker.cpp')
-rw-r--r-- | llvm/lib/Analysis/AliasSetTracker.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/AliasSetTracker.cpp b/llvm/lib/Analysis/AliasSetTracker.cpp index 843a5413209..9d941e55797 100644 --- a/llvm/lib/Analysis/AliasSetTracker.cpp +++ b/llvm/lib/Analysis/AliasSetTracker.cpp @@ -242,7 +242,12 @@ bool AliasSetTracker::containsPointer(Value *Ptr, uint64_t Size, return false; } - +bool AliasSetTracker::containsUnknown(Instruction *Inst) const { + for (const_iterator I = begin(), E = end(); I != E; ++I) + if (!I->Forward && I->aliasesUnknownInst(Inst, AA)) + return true; + return false; +} AliasSet *AliasSetTracker::findAliasSetForUnknownInst(Instruction *Inst) { AliasSet *FoundSet = nullptr; |