diff options
| author | Manuel Klimek <klimek@google.com> | 2013-06-19 15:42:45 +0000 |
|---|---|---|
| committer | Manuel Klimek <klimek@google.com> | 2013-06-19 15:42:45 +0000 |
| commit | a0c025f5d268229527599ab12c581e0289851e5f (patch) | |
| tree | 5129d2ae248a9ea379e814cbddb8e044451159be /llvm/tools/llvm-ar/ArchiveReader.cpp | |
| parent | 7014179ccba58d2f5675e2f5d108b3718f10edfb (diff) | |
| download | bcm5719-llvm-a0c025f5d268229527599ab12c581e0289851e5f.tar.gz bcm5719-llvm-a0c025f5d268229527599ab12c581e0289851e5f.zip | |
Completely revamp node binding for AST matchers.
This is in preparation for the backwards references to bound
nodes, which will expose a lot more about how matches occur. Main
changes:
- instead of building the tree of bound nodes, we build a "set" of bound
nodes and explode all possible match combinations while running
through the matchers; this will allow us to also implement matchers
that filter down the current set of matches, like "equalsBoundNode"
- take the set of bound nodes at the start of the match into
consideration when doing memoization; as part of that, reevaluated
that memoization gives us benefits that are large enough (it still
does - the effect on common match patterns is up to an order of
magnitude)
- reset the bound nodes when a node does not match, thus never leaking
information from partial sub-matcher matches for failing matchers
Effects:
- we can now correctly "explode" combinatorial matches, for example:
allOf(forEachDescendant(...bind("a")),
forEachDescendant(...bind("b"))) will now trigger matches for all
combinations of matching "a" and "b"s.
- we now never expose bound nodes from partial matches in matchers that
did not match in the end - this fixes a long-standing issue
FIXMEs:
- rename BoundNodesTreeBuilder to BoundNodesBuilder or
BoundNodesSetBuilder, as we don't build a tree any more; this is out
of scope for this change, though
- we're seeing some performance regressions (around 10%), but I expect
some performance tuning will get that back, and it's easily worth
the increase in expressiveness for now
llvm-svn: 184313
Diffstat (limited to 'llvm/tools/llvm-ar/ArchiveReader.cpp')
0 files changed, 0 insertions, 0 deletions

