[llvm-commits] [llvm] r38475 - /llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp
Owen Anderson
resistor at mac.com
Mon Jul 9 15:29:51 PDT 2007
Author: resistor
Date: Mon Jul 9 17:29:50 2007
New Revision: 38475
URL: http://llvm.org/viewvc/llvm-project?rev=38475&view=rev
Log:
Take advantage of the new fast SmallPtrSet assignment operator when propagating AVAIL_OUT sets.
This reduces the time to optimize Anton's testcase from 31.2s to 21.s!
Modified:
llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp?rev=38475&r1=38474&r2=38475&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/GVNPRE.cpp Mon Jul 9 17:29:50 2007
@@ -574,7 +574,8 @@
numbers.set(i);
}
- void copyNumbers(ValueNumberedSet& other) {
+ void operator=(const ValueNumberedSet& other) {
+ contents = other.contents;
numbers = other.numbers;
}
@@ -710,11 +711,10 @@
void GVNPRE::val_replace(ValueNumberedSet& s, Value* v) {
uint32_t num = VN.lookup(v);
Value* leader = find_leader(s, num);
- while (leader != 0) {
+ if (leader != 0)
s.erase(leader);
- leader = find_leader(s, num);
- }
s.insert(v);
+ s.set(num);
}
/// phi_translate - Given a value, its parent block, and a predecessor of its
@@ -1154,8 +1154,6 @@
/// elimination by walking the dominator tree and removing any instruction that
/// is dominated by another instruction with the same value number.
bool GVNPRE::elimination() {
- DOUT << "\n\nPhase 3: Elimination\n\n";
-
bool changed_function = false;
std::vector<std::pair<Instruction*, Value*> > replace;
@@ -1167,10 +1165,6 @@
E = df_end(DT.getRootNode()); DI != E; ++DI) {
BasicBlock* BB = DI->getBlock();
- //DOUT << "Block: " << BB->getName() << "\n";
- //dump(availableOut[BB]);
- //DOUT << "\n\n";
-
for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
BI != BE; ++BI) {
@@ -1354,7 +1348,6 @@
if (BB->getTerminator()->getNumSuccessors() == 1) {
if (BB->getTerminator()->getSuccessor(0) != BB &&
visited.count(BB->getTerminator()->getSuccessor(0)) == 0) {
- DOUT << "DEFER: " << BB->getName() << "\n";
return true;
}
else {
@@ -1459,12 +1452,8 @@
BasicBlock* BB = DI->getBlock();
// A block inherits AVAIL_OUT from its dominator
- if (DI->getIDom() != 0) {
- currAvail.insert(availableOut[DI->getIDom()->getBlock()].begin(),
- availableOut[DI->getIDom()->getBlock()].end());
-
- currAvail.copyNumbers(availableOut[DI->getIDom()->getBlock()]);
- }
+ if (DI->getIDom() != 0)
+ currAvail = availableOut[DI->getIDom()->getBlock()];
for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
BI != BE; ++BI)
@@ -1517,8 +1506,6 @@
iterations++;
}
-
- DOUT << "ITERATIONS: " << iterations << "\n";
}
/// insertion_pre - When a partial redundancy has been identified, eliminate it
@@ -1528,7 +1515,6 @@
std::map<BasicBlock*, Value*>& avail,
std::map<BasicBlock*, ValueNumberedSet>& new_sets) {
for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE; ++PI) {
- DOUT << "PRED: " << (*PI)->getName() << "\n";
Value* e2 = avail[*PI];
if (!availableOut[*PI].test(VN.lookup(e2))) {
User* U = cast<User>(e2);
More information about the llvm-commits
mailing list