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.
Currently,
==
compares the underlying arrays. This compiles tomemcmp
in llvm.memcmp
is then optimized tobcmp
. The problem with this is that llvm-opt doesn't do much with bcmp during the instcombine pass. It will also sometimes write to memory just to read it back again.What I did to work around this in div-rem was use
unreachable_unchecked()
calls to tell the compiler that thebcmp
is equivalent to twoicmp
s. I have considered overloading the==
operator with abcmp
plus hints, but now I believe it is best to not usebcmp
at all. Ethnum's integers have public fields, so the current equality operation can always be called witha.0 == b.0
.I compared and annotated a few alternatives on Compiler Explorer. Note that I have not considered adding an llvm intrinsic.