-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Remove mono specific SpanHelpers #78015
Commits on Nov 18, 2022
-
Revert "[Mono] Restore old code to solve the recent SpanHelpers regre…
…ssions (dotnet#75917)" This reverts commit 254844a.
Configuration menu - View commit details
-
Copy full SHA for d946c3b - Browse repository at this point
Copy the full SHA d946c3bView commit details -
[System.Span] Optimize hot loops by simplifying offset computation
Before, for every single element, the address `address + offset + ct` had to be computed. In theory, a smart compiler would be able to reuse `address + offset` value and offset it only by a constant to obtain every single element. Do this explicitly to avoid reliance on advanced optimizations.
Configuration menu - View commit details
-
Copy full SHA for 3b73bb5 - Browse repository at this point
Copy the full SHA 3b73bb5View commit details -
[System.Span] Refactor hot loop code
This would replace code like ``` load b.neq add ret load b.neq add ret load .... ``` with ``` load b.eq load b.eq load ... ``` This makes the code more compact in the hot loop, reduces overall code size and thus improves performance. This pattern is widely used and it was also used before with Span lookups.
Configuration menu - View commit details
-
Copy full SHA for a48fb6f - Browse repository at this point
Copy the full SHA a48fb6fView commit details -
Configuration menu - View commit details
-
Copy full SHA for fe06a72 - Browse repository at this point
Copy the full SHA fe06a72View commit details -
Configuration menu - View commit details
-
Copy full SHA for ff36071 - Browse repository at this point
Copy the full SHA ff36071View commit details -
[mono][interp] Improve detection of dead bblocks
Before we were marking bblocks as dead if they had their in_count 0. This is not enough however, since it doesn't account for loops. We now do a full traversal of the bblock graph to detect unreachable bblocks.
Configuration menu - View commit details
-
Copy full SHA for fb2bcde - Browse repository at this point
Copy the full SHA fb2bcdeView commit details -
[mono][interp] Reorder bblocks to facilitate propagation of values
Consider for example the following pattern used commonly with conditional branches: ``` br.s [nil <- nil], BB0 ... ceq0.i4 [32 <- 40], br.s [nil <- nil], BB1 BB0: ldc.i4.0 [32 <- nil], BB1: brfalse.i4.s [nil <- 32], BB_EXIT BB2: ldstr [56 <- nil], 2 ``` This commit reorders this code to look like: ``` br.s [nil <- nil], BB0 ... ceq0.i4 [32 <- 40], brfalse.i4.s [nil <- 32], BB_EXIT br.s [nil <- nil], BB2 BB0 ldc.i4.0 [32 <- nil], BB1: brfalse.i4.s [nil <- 32], BB_EXIT BB2: ldstr [56 <- nil], 2 ``` This means we will have duplicated brfalse instructions, but every basic block reaching the conditional branch will have information about the condition. For example ceq0.i4 + brfalse is equivalent to brtrue, ldc.i4.0 + brfalse is equivalent to unconditional branch. After other future optimizations applied on the bblocks graph, like removal, merging and propagation of target, the resulting code in this example would look like: ``` br.s [nil <- nil], BB_EXIT ... brtrue.i4.s [nil <- 40], BB_EXIT BB2: ldstr [56 <- nil], 2 ``` Which is a great simplification over the original code.
Configuration menu - View commit details
-
Copy full SHA for 5379908 - Browse repository at this point
Copy the full SHA 5379908View commit details -
[mono][interp] Don't optimize out bblocks that are tiering patchpoint…
… targets Even though they can be become unreachable in the current method, they can still be called when the unoptimized method gets tiered at this point. Add assert to prevent such issues in the future.
Configuration menu - View commit details
-
Copy full SHA for c8edcde - Browse repository at this point
Copy the full SHA c8edcdeView commit details -
[mono][interp] Make bblock reordering more conservative
If we are unlikely to gain anything from propagating the condition (if we don't have information about any of the condition operand vars), simply avoid the optimization.
Configuration menu - View commit details
-
Copy full SHA for cffdc02 - Browse repository at this point
Copy the full SHA cffdc02View commit details -
[mono][interp] Add basic removal of unused defines
If we store in a var and this var is not used and redefined by the end of the basic block, then we can clear the original store.
Configuration menu - View commit details
-
Copy full SHA for 5e8571f - Browse repository at this point
Copy the full SHA 5e8571fView commit details -
[mono][interp] Clear unused defines of local only vars
We detect if a var's value never escapes the definition of a bblock. We mark such vars and clear unused definitions of that var from other bblocks.
Configuration menu - View commit details
-
Copy full SHA for e4abb67 - Browse repository at this point
Copy the full SHA e4abb67View commit details -
[mono][interp] Propagate target branches
If a bblock contains only an unconditional br, then all bblocks branching into it can just call the target directly instead.
Configuration menu - View commit details
-
Copy full SHA for 954483a - Browse repository at this point
Copy the full SHA 954483aView commit details