Latest Results
Split AST to ASM compilation phase to AST -> IR -> ASM (#7713)
## Description
This PR splits the `compile_ast_to_asm` compilation phase into two
distinctive phases: `compile_ast_to_ir` and `compile_ir_to_asm`. This
gives us additional metrics and more insight into how much time each
phase is taking. It also allows us to run `forc check` up to the ASM
generation phase to collect compilation errors that occur only at the IR
stage, if we want to do it. Currently, some checks like, e.g., purity
are done at the IR generation stage and are, e.g., not available to LSP
which uses `check`. If we decide to extend the `check` phase, this will
be done in a separate PR.
## Checklist
- [ ] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [ ] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [ ] If my change requires substantial documentation changes, I have
[requested support from the DevRel
team](https://github.com/FuelLabs/devrel-requests/issues/new/choose)
- [ ] I have added tests that prove my fix is effective or that my
feature works.
- [ ] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers. Fix `copy_prop_reverse` cycle detection (#7702)
## Description
This PR solves a bug when a valid `sway` code generates a cycle of
`memcpys`. One simple example is the `e2e` test at
`test/src/e2e_vm_tests/test_programs/should_pass/language/references/arg_ref_mut_return_by_value`.
The IR generated is something like:
```
v35v1 = get_local __ptr { u64 }, s, !30
...
v76v1 = load v35v1, !33
br block0(v76v1), !33
block0(mut v71v1: { u64 }):
v38v1 = get_local __ptr { u64 }, s, !41
store v71v1 to v38v1, !41
```
We end-up copying `s` into itself.
The issue that this caused was that `copy_prop_reverse` inside the
`memcpyopt` was hanging forever.
Now, `copy_prop_reverse` cycle detection is more robust and detect any
cycle, but we just bail all the optimizations as before.
To mark future improvements, I have add some optimizations I found at
https://github.com/FuelLabs/sway/issues/7282#issuecomment-5196527165,
and have put some TODOS around the code pointing to this issue.
## Checklist
- [x] I have linked to any relevant issues.
- [x] I have commented my code, particularly in hard-to-understand
areas.
- [ ] I have updated the documentation where relevant (API docs, the
reference, and the Sway book).
- [ ] If my change requires substantial documentation changes, I have
[requested support from the DevRel
team](https://github.com/FuelLabs/devrel-requests/issues/new/choose)
- [ ] I have added tests that prove my fix is effective or that my
feature works.
- [ ] I have added (or requested a maintainer to add) the necessary
`Breaking*` or `New Feature` labels where relevant.
- [x] I have done my best to ensure that my PR adheres to [the Fuel Labs
Code Review
Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md).
- [x] I have requested a review from the relevant team or maintainers.
---------
Co-authored-by: Igor Rončević <ironcev@hotmail.com> Latest Branches
0%
ironcev/split-ast-to-asm-compilation-phase 0%
xunilrj/inline-spill-prediction 0%
© 2026 CodSpeed Technology