cache result of operator*

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107969 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gabor Greif 2010-07-09 14:36:49 +00:00
parent a29742df5f
commit 0814985887

View File

@ -2128,26 +2128,27 @@ bool GVN::performPRE(Function &F) {
for (pred_iterator PI = pred_begin(CurrentBlock),
PE = pred_end(CurrentBlock); PI != PE; ++PI) {
BasicBlock *P = *PI;
// We're not interested in PRE where the block is its
// own predecessor, or in blocks with predecessors
// that are not reachable.
if (*PI == CurrentBlock) {
if (P == CurrentBlock) {
NumWithout = 2;
break;
} else if (!localAvail.count(*PI)) {
} else if (!localAvail.count(P)) {
NumWithout = 2;
break;
}
DenseMap<uint32_t, Value*>::iterator predV =
localAvail[*PI]->table.find(ValNo);
if (predV == localAvail[*PI]->table.end()) {
PREPred = *PI;
localAvail[P]->table.find(ValNo);
if (predV == localAvail[P]->table.end()) {
PREPred = P;
++NumWithout;
} else if (predV->second == CurInst) {
NumWithout = 2;
} else {
predMap[*PI] = predV->second;
predMap[P] = predV->second;
++NumWith;
}
}