Index: llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp =================================================================== --- llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp +++ llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp @@ -326,7 +326,7 @@ /// V plus its non-dominating operands. If that cost is greater than /// CostRemaining, false is returned and CostRemaining is undefined. static bool DominatesMergePoint(Value *V, BasicBlock *BB, - SmallPtrSetImpl *AggressiveInsts, + SmallPtrSetImpl &AggressiveInsts, unsigned &CostRemaining, const TargetTransformInfo &TTI, unsigned Depth = 0) { @@ -360,13 +360,8 @@ if (!BI || BI->isConditional() || BI->getSuccessor(0) != BB) return true; - // If we aren't allowing aggressive promotion anymore, then don't consider - // instructions in the 'if region'. - if (!AggressiveInsts) - return false; - // If we have seen this instruction before, don't count it again. - if (AggressiveInsts->count(I)) + if (AggressiveInsts.count(I)) return true; // Okay, it looks like the instruction IS in the "condition". Check to @@ -384,7 +379,7 @@ // is expected to be undone in CodeGenPrepare if the speculation has not // enabled further IR optimizations. if (Cost > CostRemaining && - (!SpeculateOneExpensiveInst || !AggressiveInsts->empty() || Depth > 0)) + (!SpeculateOneExpensiveInst || !AggressiveInsts.empty() || Depth > 0)) return false; // Avoid unsigned wrap. @@ -397,7 +392,7 @@ Depth + 1)) return false; // Okay, it's safe to do this! Remember this instruction. - AggressiveInsts->insert(I); + AggressiveInsts.insert(I); return true; } @@ -2315,9 +2310,9 @@ continue; } - if (!DominatesMergePoint(PN->getIncomingValue(0), BB, &AggressiveInsts, + if (!DominatesMergePoint(PN->getIncomingValue(0), BB, AggressiveInsts, MaxCostVal0, TTI) || - !DominatesMergePoint(PN->getIncomingValue(1), BB, &AggressiveInsts, + !DominatesMergePoint(PN->getIncomingValue(1), BB, AggressiveInsts, MaxCostVal1, TTI)) return false; }