Unsafe.Unlikely (Assume) draft implementation #33043
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Just a quick draft for #4966 for both RyuJIT CoreCLR and Mono-LLVM (maybe it will help to push it forward since it's 4 years old).
It allows programmers to give hints to JIT about branches' probabilities, e.g. to avoid goto hacks like this in perf critical code.
Sample:
Codegen without
Unlikely
:Codgen with
Unlikely
(this is what this PR emits)Also, I implemented it for Mono-LLVM (I use
@llvm.expect.i32
intrinsic, which is emitted when you use__builtin_expect
in C/C++)Mono-LLVM without
Unlikely
(macOS)Mono-LLVM with
Unlikely
(macOS)cc @jkotas