-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cranelift/x64: Optimize i128 comparisons (#8427)
Inequality comparisons between i128 values were previously eight instructions and this reduces them to two, plus one move if one of the inputs is still live afterward. Equality comparisons were six instructions and are now three, plus up to two moves if both inputs are still live afterward. This removes 45 instructions from the test in x64/i128.clif that generates all possible i128 comparisons. In addition to using fewer instructions for each comparison, it also reduces register pressure enough that the function no longer spills. Conditional branches on i128 values are a special case but similar optimizations shrink them from six instructions to two. This brings Cranelift in line with what rustc+LLVM generates for equivalent 128-bit comparisons.
- Loading branch information
1 parent
8633142
commit 4fa2330
Showing
3 changed files
with
170 additions
and
289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.