Open
Description
We plan to continue improving JIT optimization capabilities for loop code. An overview of many JIT optimization possibilities is here; this issue will focus on issues we choose to address in .NET 10.
Significant work was done in .NET 9; the list of work here for .NET 10 is much more modest.
The corresponding .NET 9 issue is #93144.
Planned for .NET 10
Update loop inversion implementation
The current loop inversion algorithm is lexical. Convert it to be graph based. This is part of the JIT flowgraph modernization push, and is tracked by #107749.
Loop cloning
- Loops aren't cloned for Spans #82946 Support loop cloning for Span
- Support loop cloning of class member arrays #77071 Support loop cloning of class member arrays
- Support loop cloning with non-int iteration variables #85552 Support loop cloning with non-int iteration variables
Multi-dimensional array improvements
- RyuJIT: support cloning loop nests with multi-dimensional array accesses #71674 RyuJIT: support cloning loop nests with multi-dimensional array accesses
- Improve hoisting, CSE, LSRA for MD array accesses #71676 Improve hoisting, CSE, LSRA for MD array accesses
Induction variable optimizations
- Support IV opts on CSE'd values (JIT: Put all CSEs into SSA #106637)
Loop peeling
- (Stretch) Implement loop peeling #93142 Implement loop peeling