clang-format: Store pointers to seen formatting states.

As the memory ownership is handled by the SpecificBumpPtrAllocator
anyway, there is no need to duplicate states when inserting them into
the Seen-set. This leads to an improvement of ~10% on the benchmark
formatting file.

No functional changes intended.

llvm-svn: 209422
This commit is contained in:
Daniel Jasper 2014-05-22 11:47:01 +00:00
parent b230595839
commit 1f6c7e9358
1 changed files with 8 additions and 2 deletions

View File

@ -1005,6 +1005,12 @@ private:
return Style.ColumnLimit - (InPPDirective ? 2 : 0); return Style.ColumnLimit - (InPPDirective ? 2 : 0);
} }
struct CompareLineStatePointers {
bool operator()(LineState *obj1, LineState *obj2) const {
return *obj1 < *obj2;
}
};
/// \brief Analyze the entire solution space starting from \p InitialState. /// \brief Analyze the entire solution space starting from \p InitialState.
/// ///
/// This implements a variant of Dijkstra's algorithm on the graph that spans /// This implements a variant of Dijkstra's algorithm on the graph that spans
@ -1014,7 +1020,7 @@ private:
/// ///
/// If \p DryRun is \c false, directly applies the changes. /// If \p DryRun is \c false, directly applies the changes.
unsigned analyzeSolutionSpace(LineState &InitialState, bool DryRun = false) { unsigned analyzeSolutionSpace(LineState &InitialState, bool DryRun = false) {
std::set<LineState> Seen; std::set<LineState *, CompareLineStatePointers> Seen;
// Increasing count of \c StateNode items we have created. This is used to // Increasing count of \c StateNode items we have created. This is used to
// create a deterministic order independent of the container. // create a deterministic order independent of the container.
@ -1044,7 +1050,7 @@ private:
if (Count > 10000) if (Count > 10000)
Node->State.IgnoreStackForComparison = true; Node->State.IgnoreStackForComparison = true;
if (!Seen.insert(Node->State).second) if (!Seen.insert(&Node->State).second)
// State already examined with lower penalty. // State already examined with lower penalty.
continue; continue;