forked from OSchip/llvm-project
[JumpThreading] NFC: Simplify ComputeValueKnownInPredecessorsImpl
Summary: ComputeValueKnownInPredecessorsImpl is the main folding mechanism in JumpThreading.cpp. To avoid potential infinite recursion while chasing use-def chains, it uses: DenseSet<std::pair<Value *, BasicBlock *>> &RecursionSet to keep track of Value-BB pairs that we've processed. Now, when ComputeValueKnownInPredecessorsImpl recursively calls itself, it always passes BB as is, so the second element is always BB. This patch simplifes the function by dropping "BasicBlock *" from RecursionSet. Reviewers: wmi, efriedma Subscribers: hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D77699
This commit is contained in:
parent
09f345080e
commit
91eb442fde
|
@ -128,14 +128,13 @@ public:
|
|||
bool ComputeValueKnownInPredecessorsImpl(
|
||||
Value *V, BasicBlock *BB, jumpthreading::PredValueInfo &Result,
|
||||
jumpthreading::ConstantPreference Preference,
|
||||
DenseSet<std::pair<Value *, BasicBlock *>> &RecursionSet,
|
||||
Instruction *CxtI = nullptr);
|
||||
DenseSet<Value *> &RecursionSet, Instruction *CxtI = nullptr);
|
||||
bool
|
||||
ComputeValueKnownInPredecessors(Value *V, BasicBlock *BB,
|
||||
jumpthreading::PredValueInfo &Result,
|
||||
jumpthreading::ConstantPreference Preference,
|
||||
Instruction *CxtI = nullptr) {
|
||||
DenseSet<std::pair<Value *, BasicBlock *>> RecursionSet;
|
||||
DenseSet<Value *> RecursionSet;
|
||||
return ComputeValueKnownInPredecessorsImpl(V, BB, Result, Preference,
|
||||
RecursionSet, CxtI);
|
||||
}
|
||||
|
|
|
@ -611,14 +611,13 @@ static Constant *getKnownConstant(Value *Val, ConstantPreference Preference) {
|
|||
/// This returns true if there were any known values.
|
||||
bool JumpThreadingPass::ComputeValueKnownInPredecessorsImpl(
|
||||
Value *V, BasicBlock *BB, PredValueInfo &Result,
|
||||
ConstantPreference Preference,
|
||||
DenseSet<std::pair<Value *, BasicBlock *>> &RecursionSet,
|
||||
ConstantPreference Preference, DenseSet<Value *> &RecursionSet,
|
||||
Instruction *CxtI) {
|
||||
// This method walks up use-def chains recursively. Because of this, we could
|
||||
// get into an infinite loop going around loops in the use-def chain. To
|
||||
// prevent this, keep track of what (value, block) pairs we've already visited
|
||||
// and terminate the search if we loop back to them
|
||||
if (!RecursionSet.insert(std::make_pair(V, BB)).second)
|
||||
if (!RecursionSet.insert(V).second)
|
||||
return false;
|
||||
|
||||
// If V is a constant, then it is known in all predecessors.
|
||||
|
|
Loading…
Reference in New Issue