diff options
| author | Vitaly Buka <vitalybuka@google.com> | 2025-10-25 09:47:56 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-25 09:47:56 -0700 |
| commit | 05c495de132f7609537686f60f312059ea70b4a6 (patch) | |
| tree | b9eab72ed75cd3ac241068264185de7549944a0b /llvm/lib/CodeGen/TargetOptionsImpl.cpp | |
| parent | 059d90d08f610d5919c42646f267bbab77f7bee4 (diff) | |
| download | llvm-05c495de132f7609537686f60f312059ea70b4a6.zip llvm-05c495de132f7609537686f60f312059ea70b4a6.tar.gz llvm-05c495de132f7609537686f60f312059ea70b4a6.tar.bz2 | |
[SpecialCaseList] Filtering Globs with matching prefix and suffix (#164543)
This commit enhances the `SpecialCaseList::GlobMatcher` to filter globs
more efficiently by considering both prefixes and suffixes.
Previously, the `GlobMatcher` used a `RadixTree` to store globs based
on their prefixes. This allowed for quick lookup of potential matches
by matching the query string's prefix against the stored prefixes.
However, for globs with common prefixes but different suffixes,
unnecessary glob matching attempts could still occur.
This change introduces a nested `RadixTree` structure:
`PrefixSuffixToGlob: RadixTree<Prefix, RadixTree<Suffix, Globs>>`.
Now, when a query string is matched, it first finds matching prefixes,
and then within those prefix matches, it further filters by matching
the reversed suffix of the query string against the reversed suffixes
of the globs. This significantly reduces the number of `Glob::match`
calls, especially for large special case lists with many globs sharing
common prefixes but differing in their suffixes.
According to SpecialCaseListBM:
Lookup benchmarks (significant improvements):
```
OVERALL_GEOMEAN -0.5815
```
Lookup `*suffix` and `prefix*suffix` like benchmarks (huge
improvements):
```
OVERALL_GEOMEAN -0.9316
```
https://gist.github.com/vitalybuka/e586751902760ced6beefcdf0d7b26fd
Diffstat (limited to 'llvm/lib/CodeGen/TargetOptionsImpl.cpp')
0 files changed, 0 insertions, 0 deletions
