summaryrefslogtreecommitdiff
path: root/src/asmjs/shared-constants.h
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-06-11 13:11:04 -0700
committerGitHub <noreply@github.com>2024-06-11 13:11:04 -0700
commitcdd94a01ad02e944eaa9ba5e20a1129bef9ac305 (patch)
treeb4d59b21019dea59776b6f6e8347c0eef4b98022 /src/asmjs/shared-constants.h
parent3d0e687447be426c4157dbe9c6d2626b147f85bf (diff)
downloadbinaryen-cdd94a01ad02e944eaa9ba5e20a1129bef9ac305.tar.gz
binaryen-cdd94a01ad02e944eaa9ba5e20a1129bef9ac305.tar.bz2
binaryen-cdd94a01ad02e944eaa9ba5e20a1129bef9ac305.zip
Fix scratch local optimizations when emitting string slice (#6649)
The binary writing of `stringview_wtf16.slice` requires scratch locals to store the `start` and `end` operands while the string operand is converted to a stringview. To avoid unbounded binary bloat when round-tripping, we detect the case that `start` and `end` are already `local.get`s and avoid using scratch locals by deferring the binary writing of the `local.get` operands until after the stringview conversoins is emitted. We previously optimized the scratch locals for `start` and `end` independently, but this could produce incorrect code in the case where the `local.get` for `start` is deferred but its value is changed by a `local.set` in the code for `end`. Fix the problem by only optimizing to avoid scratch locals in the case where both `start` and `end` are already `local.get`s, so they will still be emitted in the original relative order and they cannot interfere with each other anyway.
Diffstat (limited to 'src/asmjs/shared-constants.h')
0 files changed, 0 insertions, 0 deletions