Skip to content

[5.7] Merge basic performance enhancements and unmerged prior dependencies #499

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Jun 28, 2022

Conversation

natecook1000
Copy link
Member

@natecook1000 natecook1000 commented Jun 17, 2022

This PR pulls in some basic performance improvements from #497, #495, and #494. Those are built on top of the benchmark suite which we pull in #491. These have some conflicts as they are built on top of a few un-cherry-picked PRs #469, #470, #482, and #471, which we cherry-pick here. They require compiler side changes in swiftlang/swift#59555. We have verified that this batch passes CI and we recommend taking these changes as a batch.

rxwei and others added 14 commits June 17, 2022 16:59
Obtain match output elements without materializing the output.
Fully generalize "whole match" in the engine and enable transforming custom types
Add additional capture transform tests.
top level code is real weird, let's not talk about it
20x perf speedup in the "BasicBacktrack" benchmarks.
* Re-use the same executor, remember semantic mode.

Gives around a 20% perf improvement to first-match style benchmarks.

* Remove history preservation

Cuts down on memory usage and avoids some ARC overhead. ~20% gains
on "AllMatches" and related benchmarks.

* Lower-level matchSeq

Avoid collection algorithms inside matchSeq, which are liable to add ARC and inefficiencies. Results in a 3x improvement to ReluctantQuantWithTerminal.
Gives a 7x improvement to firstMatch-style benchmarks like "FirstMatch", 2-3x to CSS and basic backtracking benchmarks.

Thanks to @rctcwyvrn for the original code.
@milseman
Copy link
Member

If this needs to be coordinated with swiftlang/swift#59555, then it makes sense to merge together. Otherwise we lose most of the value from a batch PR "just for testing".

@natecook1000 natecook1000 changed the title [DNM] Batch cherry-picks for testing [5.7] Merge latest changes into 5.7 branch Jun 23, 2022
@milseman milseman changed the title [5.7] Merge latest changes into 5.7 branch [5.7] Merge basic performance enhancements and unmerged prior dependencies Jun 23, 2022
@stephentyrone stephentyrone self-requested a review June 28, 2022 19:13
@milseman milseman merged commit 05dec42 into swiftlang:swift/release/5.7 Jun 28, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants