Skip to content

Commit 643cb86

Browse files
committed
insert and double check at function start
1 parent b611801 commit 643cb86

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

llvm/lib/Transforms/Scalar/JumpThreading.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,13 +1498,16 @@ Constant *JumpThreadingPass::evaluateOnPredecessorEdge(BasicBlock *BB,
14981498
BasicBlock *PredPredBB,
14991499
Value *V,
15001500
const DataLayout &DL) {
1501-
SmallPtrSet<Value *, 8> Visited({V});
1501+
SmallPtrSet<Value *, 8> Visited;
15021502
return evaluateOnPredecessorEdge(BB, PredPredBB, V, DL, Visited);
15031503
}
15041504

15051505
Constant *JumpThreadingPass::evaluateOnPredecessorEdge(
15061506
BasicBlock *BB, BasicBlock *PredPredBB, Value *V, const DataLayout &DL,
15071507
SmallPtrSet<Value *, 8> &Visited) {
1508+
if (!Visited.insert(V).second)
1509+
return nullptr;
1510+
15081511
BasicBlock *PredBB = BB->getSinglePredecessor();
15091512
assert(PredBB && "Expected a single predecessor");
15101513

@@ -1535,12 +1538,10 @@ Constant *JumpThreadingPass::evaluateOnPredecessorEdge(
15351538
Constant *Op0 = nullptr;
15361539
Constant *Op1 = nullptr;
15371540
if (Value *V0 = CondCmp->getOperand(0); !Visited.contains(V0)) {
1538-
Visited.insert(V0);
15391541
Op0 = evaluateOnPredecessorEdge(BB, PredPredBB, V0, DL, Visited);
15401542
Visited.erase(V0);
15411543
}
15421544
if (Value *V1 = CondCmp->getOperand(1); !Visited.contains(V1)) {
1543-
Visited.insert(V1);
15441545
Op1 = evaluateOnPredecessorEdge(BB, PredPredBB, V1, DL, Visited);
15451546
Visited.erase(V1);
15461547
}

0 commit comments

Comments
 (0)