Skip to content
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

feat: Apply optimizations to unconstrained code #2348

Merged
merged 34 commits into from
Sep 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
5377440
Generate brillig at the end of Ssa; rework inlining
jfecher Aug 16, 2023
82ed09e
Fix typo in fold_constants call
jfecher Aug 16, 2023
e9859ad
Use btree_map
jfecher Aug 16, 2023
25f8fe8
Remove code from #2190
jfecher Aug 16, 2023
9b8e19c
Rename ssa_builder module to function_builder
jfecher Aug 16, 2023
734d7ef
Add resolve calls to brillig
jfecher Aug 16, 2023
4d4602f
Simplify reachable brillig function analysis
jfecher Aug 16, 2023
78c1921
Add everything except alias handling
jfecher Aug 22, 2023
49cc0c8
Fix all tests
jfecher Aug 23, 2023
88913c1
clippy
jfecher Aug 23, 2023
dab8535
Merge branch 'master' into jf/optimize-brillig
TomAFrench Aug 23, 2023
8804a3f
Mild cleanup
jfecher Aug 23, 2023
cd29ec8
Undo some unneeded changes
jfecher Aug 23, 2023
f3f34aa
Partially revert cleanup commit which broke some tests
jfecher Aug 24, 2023
0887db5
Add large doc comment
jfecher Aug 24, 2023
a8a3f36
Merge branch 'master' into jf/new-mem2reg
jfecher Aug 24, 2023
33feb07
Add test and remove printlns
jfecher Aug 24, 2023
2574c33
Remove todos
jfecher Aug 24, 2023
0229a33
Merge branch 'jf/new-mem2reg' into jf/optimize-brillig
jfecher Aug 25, 2023
ce304d5
Merge new mem2reg pass
jfecher Aug 25, 2023
d3507c9
Merge branch 'jf/optimize-brillig' of https://github.com/noir-lang/no…
jfecher Aug 25, 2023
5bce8cf
Apply fix from mem2reg branch
jfecher Aug 25, 2023
7317238
Support aliasing arrays in mem2reg
jfecher Aug 25, 2023
4ac1ac3
Move last_stores in Block struct
jfecher Aug 25, 2023
080d4b4
Merge branch 'master' into jf/optimize-brillig
jfecher Aug 25, 2023
679f564
Satisfy clippy
jfecher Aug 25, 2023
c2e5d61
Constant fold during mem2reg pass
jfecher Aug 28, 2023
88387f5
Merge branch 'master' into jf/optimize-brillig
jfecher Aug 30, 2023
07cca3a
Update bytecode for tests
jfecher Aug 30, 2023
e785652
Update crates/noirc_evaluator/src/ssa/opt/mem2reg.rs
jfecher Sep 1, 2023
73a8624
Update crates/noirc_evaluator/src/ssa/opt/mem2reg.rs
jfecher Sep 1, 2023
3e31b3f
Update crates/noirc_evaluator/src/ssa/opt/inlining.rs
jfecher Sep 1, 2023
fa4c911
Merge master
jfecher Sep 1, 2023
6074fb5
Merge branch 'jf/optimize-brillig' of https://github.com/noir-lang/no…
jfecher Sep 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/+2bXY7bIBDHx+CPONVurxD1oVLfTJxsnDffo1WrRnGu0qfeuesutP9gnN2NmTUbgRRBDMz8gMDAmJRE9JGeQvL4ETpePX6kTtvBPGt1XE0LKvEnq0JeAemdjkvreR9ySLeeOHL//VRlwFo62nmv81OG8ZGgbwU6U+DJdNqU/eBgzOl/G1qPfOQYQwJdyCIDYkkDYskCYklmZilpuPaVkJ/BM2HV7fMU5Bc6LRxyCkc5bPuCoe2op4XvRtcSGIoAWLKAWNKAWGRALMJiKSEf55Sw6hYUls166RwvyLE3aj3Bo0zfmy0BsurqYbPpdutO1epntd4fmm212R4eGtWobbM9rpu67ppNs9sf9rtqrzZ1p07bfd2dnsIlzmtlnzSonC5rrWWpt9rISn+yzjayqSONm1jc0PhuE1l67H68J+aJwDFIKYPcjPz9+LnanfkfowpEsvZpNTFIOrcIXMweT7PKgTtVtjIJBtn/dODiZO90+2BOr4KGlhUtdz9PP9FwrBJIC11GXiiTjMjBU7Spb07R5LdPWDwCrIuvcQfl0Jn9934gV5ZOyaDbyJpq/XPytzAX5HdBtl1RREEvSKyLfcHE2YejjksaLhS34hLsF4MxlxvH8YocfUSga8zlNjdLMjPLmGvJ3tmPHU9dx1iTn0H8A/Jzh+zCIRtdgDbXc64qDjfdmOvB6BpzVc3FIgNisV0yCZ27NlY0/H1JKPNZx3cjde3fK9b9AnXja4D4GuBaFu559BqW9/RKwrhX0UYIhzwzBxYgA+0GHtTMs6VOS4e+0sG1dNTFvjR1Wh1X08LfvkQ9rcVgmBKLb06WIiCWLCCWNCAWGRCLsFgSyDf22cxJtM+mzFcd343UzaGOXfc71C3ofI/o2kvi2vGSvSvrq5X3fqdlAenfjo41Id5puRjinRZGlriZjXda7HLxTku80xLvtEznjjaLhyXarNu0Wd8gP9qsaSzRZkWbdQ13tFk8LNFm3abN+gX50WZNY4k2K9qsa7jjfwccshcga+J/B46JxYjhD6yJrJOVOgAA
H4sIAAAAAAAA/+1Y227CMAx1m15hYk97R/uCpBdI3/iVIdr//4RREY9D6NC0xtNAWKpqnHJyYjeO3ZKIXukk0fGK3X19vJTTfWHbzt31PDFROCyNfGPQeY2lZx8lA30XiEcW3k86Ba7lxDpXbjwRiI+C+dYwZwJ8Uqcr8KsEl8zjkk5wyYED2wqn52DjdeDY1Tu/C0QeMUNvohiwar1pmn5b9aY2H7rq9rbVTbvfWGNNa9tDZeu6t43ddvtuqzvT1L0Z2q7uh5Pc4vlb7MERVfOxKodl/ipBKZJJUMmEjskJN1LoNZE3j+/HFQlvBIkgJQK4KYV7+aXWnYaPkQZIUZ/qmaLo8nSS4hywSjETdOdiG1YEsL/mwOTEJ2sONq5KYjonsgziwXEa9+k7XccqAj12z6gbz0Tf4GB1xP/n6ojC+kSk0hNNvlzmZ+DM8fcYyLU3pxKYm7Hmnv4ZhUvMOYVNyH6LQfSvE5Joss+FeBJdlvJ+oniUVm9Fwm3Jvff5Behv9FjBf/b5Zy4/6fOluBQel3yCC8eqEOay8LiUE1yWTl+A7cXpS7BxfHnsbr9/FBTs+8ch8jiifAIjg9F/MRUAAA==
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/+1Zy1LCQBCckAjkqQjcPeotQFHlMTdv3vQD/P+P0MXtSmezwMEZSkumitqEXaZ7mpndCWQiksq33fgR98nXa+LvU3+P97FG6D1nnR/bn9km0fPVWnGc/AGOqQFH2JMfc58nbFO67nTwd1N9fVqX88j7xvPOlDGEMIS0Ak4h4xqcSq9hp8Njw/4zwgROSvOVH2tDTWZyWhNwmRHPXJfHzvmby9CS4L6j65y4FLpcWqvvvCT+c9IXcyXFhLFU5pEQJvwyByPcvfNRnYm/ivCoLhh/ZYa7+XA+6jPx1xEe9QXjZ35FhOsNzc2CdVY5A/8ZYQInpflHisGtC/cO1YP82oANOf73Buzdj9cG7KRtnT7H6iXUSAg/l/FDkcUhnciwQexk2Ag6K4nDxI7LroxgF5fR4dAAzXR97n9b06h8WLUOlw/ujjAY1+JAryj2RMaNRErXD9IbH/jIK3AuJN4YxJqYksaaPm8ZMzfTHd0Dy+0da1oTa2i4pjGPvM+l/9641pQfNg6x5DKMJQ84854zt+Ny2HNC7OKIDtp7DuIU0l9kuPfFHlS09yn2n8k4L1KaRyNQ+3XcmIKfdu47H430Fua944Fab4jHrS6PLfvPCPOWNMD8c6BTQ2ss+S2ktybg53jc+esF8bjX5bFj/xlh3pMGiwATP/ZY1NhSeuP+BZqAy5LmLHJ4SZosKG5ogvmXQBMLLisZa8L1BC4r0sQiX1ekCTC5njD/GmhiwWUd0YRrB1zWpIlF7axJE2By7WD+jTQx/wFAZPivTGifem+jdM4ZAAA=
H4sIAAAAAAAA/+1Yy26DMBBcgsPDPHLrtafmVok0zakX1P5J//8jWtIdMRgrOdQbqY+VosUseMfDrhniRCSXL9uqxzj7/G10nOsY53GN0LnJRvXD9+yQpZtrsMK4+QEYcwOMsL36WuuEraDjMU3+Y5Gen2GqedR9r7hd4hxCOYS4Qh4v6x4sZOZwTIPjwPM7yok8OcVb9Z3Gq8TPcqqZUpaWBeORjivCWqfFMlhx7Qk/1grsDcUL8j4xjoxyYl6MvV3eE9Z4af1NBEdzw/U3ZnkP79Mc7ZX1txEc7Q3Xz/jqCFbsD9Pz2QbXWdUM5neU0xMexB/Ud4o33DuSvkD/hc8S418XPm/qf5vwyRPnMBBTJ4OX9VmMsEATuSxG+IWdWBgNvGEXOm8VyWspFDL9IQfO8wZ8J7Ox0EE/VBQrI9fx8Ta4h8VRabzminCMAe7JnMSFDOPOCXdJ9wF36r66hsPLXCvMX+pelGC9BR0DD+L36o0+KM6Cu45wEqtDQxHzxPM7Wdc+99A+4MQCSxPhxJOPieHEIvTI8ztZC9Cc4o8BJxa908lsG8IAThrCAE4s6rUjTpCzIjyIPwecWGDpZc0J9w6w9MSJRb32xElH+cEJ4i8BJxZYdrLmhHsHWHbEiUXv7IgT5OTeQfyVODH/KBJZ/kMc2geU+HEOWhYAAA==
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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
Original file line number Diff line number Diff line change
@@ -1 +1 @@
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

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1 +1 @@
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
Original file line number Diff line number Diff line change
@@ -1 +1 @@
H4sIAAAAAAAA/9WZ0XLSQBSGEwKhIRZpqy22aANarRYcynjhJc/ijT6ID2533X/6dY0ZZnp2WnaGyW7Ocv7vnD0bFiizLMuzv624ew2yf5vs23BdP67d5na+1ik5e3vCWewJZ39POAeJOF37Ha7V3asM/T7uaf8VuCd7D/eKKPYKdrUS/a1RPKV9vteDwO/aOHAf2GpsnP9hlJ88Gm/RP0AOK+N4nY8RtMQlnRr2HjhGthz+OVxF8WtMvl1ZiydmTbFWZYjR0KevRebUta5arBHfC2MW52+Y3a+r/Me5ZR2ObRn8fniJeKU5xvgw9DlP/T7sfH7KPg/Xw8A/seW/dT6OWvgnGIuF847AL3sJftk/RfzHtvy+HsnlWlc9HoPVuhYcy0mUH6fzylbHP09Oovg0llYNhnFClrpFO8WzjLmVb1d736D52lZzk0cxNWCQVoE5v8D1PfTd/jkNfdbpGfqneJ/im0bvcfpvbOPzdTQFxxZjabGOzhKy1C3ao//k4dxYu4KmWtcz5BwsF7Ys/vNkBi1xSaeGfQqOmXFOcmjKr8Yz6KY4sxjH4j8jGItrXevL+N4a51VnFq2r/CuP4uSZ5dKYwWm9y3bPxyVYGlsWv95zU5+bH87HAvyKVew17HPEtjDOcw5N+dV4Ad0Ue8g4Fr+Hmuxh66oZxvfeOK/aQ1pX+Vcem3BNfe6/QrzS5Ln/Q+hfJeb4CI6LFg7pc576/RbOAvaf4erO78PgTzZ+Jl/bxuWPT/ru0IPmNTRvbDV9jX/JHrauGr8By9KWxa/rClrikk4NO+t8Zcvhn2HLKH6Nybcra/EMWJctrDrXu/r+3DKPfdWl5lXwzz3xNUF8qyg+jaXF8/oyIUvdop3i94k45ia7X6sJ8q97msvvhvEeNv2xXQJuExZBuO2PqD/gZR/zrRoAAA==
H4sIAAAAAAAA/9WY3U7CQBCFt91SKBUEREARFG+8Ba685BX0EXz/h5BZ58hxbRoSZ2OYpOnuzmbmO7M/KZTOucx9mT8+Hffb4D/oe/s322V2sbYpOfML4fQXwllcCGcnEafYu76r41Nqu6AxnD9PY/DnNOYj7RX5YSW1D0Z6Svt6bzvKLzZU7p5tjr3E70b1yaL+gdo9qmFlrFdi9CkXuJCnJn9OHH1bjnAPV5F+9JnvXFb/z6wp1qpUjYYxw17kmoq17cWa9F0Zs0i8rjutK+LHteV9OLRlCOfhmvQi55D6A23zPLQL8vP9Cf9G3wPlH9ny7yTGuIF/RH2w8Lwx8cNfEj/8LxH/xJb/lVlyd1rrCbHeNHB7Gps2zC1I08yWeSf789b9tLYzNCOWuS1L2L8LygUu5KnJPyWOhXFNMsqJuOgvKG+KO9JYS7gjWYtY2/qyvjvjuuKOxLoiPuoITr4jl8YMkuvenV+PJbE82LKE9V6Zxtx/SIw18UMr2Gvyr0jb2rjOGeVEXPTXlDfFGTLWEs4QaxFr2zOs79G4rjhDWFfERx3Bmfo7Y3OS+52TvzOetL1JzPFMHPMGDuTneWgXDZye/G/6lu8FqXm85qY/lJ0myBVC4Jr+RPoE4wNXe2kSAAA=
Loading