diff options
author | Alon Zakai <azakai@google.com> | 2020-10-05 09:00:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-05 09:00:05 -0700 |
commit | 3da66481b94cba2d3f5717316755fe3a60fcbe52 (patch) | |
tree | e00684455d7550bf12da608e7e086cba16092e95 /src/compiler-support.h | |
parent | ecaa818922fe2571649a621a00f7f3c40ebb217a (diff) | |
download | binaryen-3da66481b94cba2d3f5717316755fe3a60fcbe52.tar.gz binaryen-3da66481b94cba2d3f5717316755fe3a60fcbe52.tar.bz2 binaryen-3da66481b94cba2d3f5717316755fe3a60fcbe52.zip |
Ordering correction fix in OptimizeInstructions for #3047 (#3195)
(found by the fuzzer)
It is not valid to replace x | (y | x) ==> y | x, if x, y cannot be reordered.
It is also not valid to replace x ^ (y ^ x) ==> y, if x, y cannot be reordered,
for a more subtle reason: if they cannot be reordered then y can affect the
value of x (the opposite is not possible as we checked x for side effects so
that we could remove one copy). If so, then the second appearance of x
could be different, if e.g. it reads a local y writes to. Whereas, if it's ok to
reorder, then it's ok to do x ^ (y ^ x) ==> x ^ (x ^ y) ==> y.
Diffstat (limited to 'src/compiler-support.h')
0 files changed, 0 insertions, 0 deletions