[PATCH] D83246: [Attributor] use liveness information from AAIsDead in AAReachability and cache query results
Shinji Okumura via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 6 11:54:59 PDT 2020
okura updated this revision to Diff 275779.
okura added a comment.
Added a comment
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D83246/new/
https://reviews.llvm.org/D83246
Files:
llvm/include/llvm/Transforms/IPO/Attributor.h
llvm/lib/Transforms/IPO/AttributorAttributes.cpp
Index: llvm/lib/Transforms/IPO/AttributorAttributes.cpp
===================================================================
--- llvm/lib/Transforms/IPO/AttributorAttributes.cpp
+++ llvm/lib/Transforms/IPO/AttributorAttributes.cpp
@@ -2469,7 +2469,7 @@
const auto &ReachabilityAA =
A.getAAFor<AAReachability>(*this, IRPosition::function(*ScopeFn));
- if (!ReachabilityAA.isAssumedReachable(UserI, getCtxI()))
+ if (!ReachabilityAA.isAssumedReachable(UserI, getCtxI(), A))
return true;
if (auto *CB = dyn_cast<CallBase>(UserI)) {
Index: llvm/include/llvm/Transforms/IPO/Attributor.h
===================================================================
--- llvm/include/llvm/Transforms/IPO/Attributor.h
+++ llvm/include/llvm/Transforms/IPO/Attributor.h
@@ -715,6 +715,19 @@
/// Return the map conaining all the knowledge we have from `llvm.assume`s.
const RetainedKnowledgeMap &getKnowledgeMap() const { return KnowledgeMap; }
+ bool getPotentiallyReachable(const Instruction *From, const Instruction *To) {
+ auto KeyPair = std::make_pair(From, To);
+ auto Iter = PotentiallyReachableMap.find(KeyPair);
+ const Function &F = *From->getFunction();
+ if (Iter != PotentiallyReachableMap.end())
+ return Iter->second;
+ bool Result = isPotentiallyReachable(
+ From, To, nullptr, AG.getAnalysis<DominatorTreeAnalysis>(F),
+ AG.getAnalysis<LoopAnalysis>(F));
+ PotentiallyReachableMap.insert(std::make_pair(KeyPair, Result));
+ return Result;
+ }
+
private:
struct FunctionInfo {
~FunctionInfo();
@@ -774,6 +787,10 @@
/// Set of inlineable functions
SmallPtrSet<const Function *, 8> InlineableFunctions;
+ /// A map for caching results of queries for isPotentiallyReachable
+ DenseMap<std::pair<const Instruction *, const Instruction *>, bool>
+ PotentiallyReachableMap;
+
/// Give the Attributor access to the members so
/// Attributor::identifyDefaultAbstractAttributes(...) can initialize them.
friend struct Attributor;
@@ -2291,16 +2308,21 @@
/// Returns true if 'From' instruction is assumed to reach, 'To' instruction.
/// Users should provide two positions they are interested in, and the class
/// determines (and caches) reachability.
- bool isAssumedReachable(const Instruction *From,
- const Instruction *To) const {
- return isPotentiallyReachable(From, To);
+ bool isAssumedReachable(const Instruction *From, const Instruction *To,
+ Attributor &A) const {
+ const auto &LivenessAA =
+ A.getAAFor<AAIsDead>(*this, IRPosition::value(*From));
+ if (A.isAssumedDead(*From, this, &LivenessAA))
+ return false;
+ return A.getInfoCache().getPotentiallyReachable(From, To);
}
/// Returns true if 'From' instruction is known to reach, 'To' instruction.
/// Users should provide two positions they are interested in, and the class
/// determines (and caches) reachability.
- bool isKnownReachable(const Instruction *From, const Instruction *To) const {
- return isPotentiallyReachable(From, To);
+ bool isKnownReachable(const Instruction *From, const Instruction *To,
+ Attributor &A) const {
+ return A.getInfoCache().getPotentiallyReachable(From, To);
}
/// Create an abstract attribute view for the position \p IRP.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83246.275779.patch
Type: text/x-patch
Size: 3397 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200706/4345715a/attachment.bin>
More information about the llvm-commits
mailing list