forked from OSchip/llvm-project
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:
parent
b230595839
commit
1f6c7e9358
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue