[llvm] 63599bd - [Attributor][NFC] Refactoring `AANoFreeArgument::updateImpl`
Hideto Ueno via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 12 05:35:30 PST 2019
Author: Hideto Ueno
Date: 2019-12-12T13:27:53Z
New Revision: 63599bd072740dee95b0f866297fb1471042032c
URL: https://github.com/llvm/llvm-project/commit/63599bd072740dee95b0f866297fb1471042032c
DIFF: https://github.com/llvm/llvm-project/commit/63599bd072740dee95b0f866297fb1471042032c.diff
LOG: [Attributor][NFC] Refactoring `AANoFreeArgument::updateImpl`
Summary: Refactoring `AANoFreeArgument::updateImpl`. There is no test change.
Reviewers: sstefan1, jdoerfert
Reviewed By: sstefan1
Subscribers: hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D71349
Added:
Modified:
llvm/lib/Transforms/IPO/Attributor.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/IPO/Attributor.cpp b/llvm/lib/Transforms/IPO/Attributor.cpp
index 48da7e7bdd03..2a26db5476cb 100644
--- a/llvm/lib/Transforms/IPO/Attributor.cpp
+++ b/llvm/lib/Transforms/IPO/Attributor.cpp
@@ -1539,62 +1539,39 @@ struct AANoFreeFloating : AANoFreeImpl {
/// See Abstract Attribute::updateImpl(...).
ChangeStatus updateImpl(Attributor &A) override {
const IRPosition &IRP = getIRPosition();
- Function *F = IRP.getAnchorScope();
-
- const AAIsDead &LivenessAA =
- A.getAAFor<AAIsDead>(*this, IRPosition::function(*F));
const auto &NoFreeAA =
A.getAAFor<AANoFree>(*this, IRPosition::function_scope(IRP));
if (NoFreeAA.isAssumedNoFree())
return ChangeStatus::UNCHANGED;
- SmallPtrSet<const Use *, 8> Visited;
- SmallVector<const Use *, 8> Worklist;
-
Value &AssociatedValue = getIRPosition().getAssociatedValue();
- for (Use &U : AssociatedValue.uses())
- Worklist.push_back(&U);
-
- while (!Worklist.empty()) {
- const Use *U = Worklist.pop_back_val();
- if (!Visited.insert(U).second)
- continue;
-
- auto *UserI = U->getUser();
- if (!UserI)
- continue;
-
- if (LivenessAA.isAssumedDead(cast<Instruction>(UserI)))
- continue;
-
+ auto Pred = [&](const Use &U, bool &Follow) -> bool {
+ Instruction *UserI = cast<Instruction>(U.getUser());
if (auto *CB = dyn_cast<CallBase>(UserI)) {
- if (CB->isBundleOperand(U))
- return indicatePessimisticFixpoint();
- if (!CB->isArgOperand(U))
- continue;
-
- unsigned ArgNo = CB->getArgOperandNo(U);
+ if (CB->isBundleOperand(&U))
+ return false;
+ if (!CB->isArgOperand(&U))
+ return true;
+ unsigned ArgNo = CB->getArgOperandNo(&U);
const auto &NoFreeArg = A.getAAFor<AANoFree>(
*this, IRPosition::callsite_argument(*CB, ArgNo));
-
- if (NoFreeArg.isAssumedNoFree())
- continue;
-
- return indicatePessimisticFixpoint();
+ return NoFreeArg.isAssumedNoFree();
}
if (isa<GetElementPtrInst>(UserI) || isa<BitCastInst>(UserI) ||
isa<PHINode>(UserI) || isa<SelectInst>(UserI)) {
- for (Use &U : UserI->uses())
- Worklist.push_back(&U);
- continue;
- }
+ Follow = true;
+ return true;
+ };
// Unknown user.
+ return false;
+ };
+ if (!A.checkForAllUses(Pred, *this, AssociatedValue))
return indicatePessimisticFixpoint();
- }
+
return ChangeStatus::UNCHANGED;
}
};
More information about the llvm-commits
mailing list