compiler: implement copy directly #5140
Open
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.
The compiler now implements the copy builtin directly instead of calling sliceCopy. The length is calculated with the
llvm.umax.*intrinsics, and the move is performed byllvm.memmove.*. Both of these operations are easily understood by LLVM's optimization passes. The type's alignment is also provided tollvm.memmove.*, which is useful when rewriting the move.Interp no longer needs to reimplement
sliceCopy. Some edge case handling was implemented bysliceCopybut notllvm.memmove.*/llvm.memcpy.*. I copied this over, so copies of external slices should work now. Volatile moves/copies are now run at runtime by interp.There is a 4-byte size increase due to some confusing length logic in
sendUSBPacket. I will look atsendUSBPacketin a future PR.