From a05a81b10ae6e2fc4f22a59bdb7c7417cca41cfd Mon Sep 17 00:00:00 2001 From: Owen Anderson Date: Tue, 10 Jul 2007 00:09:25 +0000 Subject: [PATCH] Use a cheaper test, delaying calling find_leader() until we know that it's necessary. This improves the time to optimize Anton's testcase from 21.1s to 17.6s. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38479 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/GVNPRE.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/Transforms/Scalar/GVNPRE.cpp b/lib/Transforms/Scalar/GVNPRE.cpp index 4a5dca94098..007c6777195 100644 --- a/lib/Transforms/Scalar/GVNPRE.cpp +++ b/lib/Transforms/Scalar/GVNPRE.cpp @@ -565,6 +565,7 @@ class ValueNumberedSet { bool insert(Value* v) { return contents.insert(v); } void insert(iterator I, iterator E) { contents.insert(I, E); } void erase(Value* v) { contents.erase(v); } + unsigned count(Value* v) { return contents.count(v); } size_t size() { return contents.size(); } void set(unsigned i) { @@ -1173,15 +1174,16 @@ bool GVNPRE::elimination() { isa(BI) || isa(BI) || isa(BI) || isa(BI) || isa(BI) || isa(BI)) { - Value *leader = find_leader(availableOut[BB], VN.lookup(BI)); - - if (leader != 0) + + if (availableOut[BB].test(VN.lookup(BI)) && ! availableOut[BB].count(BI)) { + Value *leader = find_leader(availableOut[BB], VN.lookup(BI)); if (Instruction* Instr = dyn_cast(leader)) if (Instr->getParent() != 0 && Instr != BI) { replace.push_back(std::make_pair(BI, leader)); erase.push_back(BI); ++NumEliminated; } + } } } } -- 2.34.1