Size: a a a

WebAssembly — русскоговорящее сообщество

2020 June 30

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
По коду из firefox можно сказать что для wasm выполняются почти все оптимизации как и для js
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
Middle IR расширяется wasm нодами, но пайплан тотже
источник

PG

Polina Gurtovaya in WebAssembly — русскоговорящее сообщество
https://github.com/v8/v8/blob/master/src/compiler/backend/x64/code-generator-x64.cc — это код асемблера. До этого еще есть оптимизации (Liftoff & TF)
источник

PG

Polina Gurtovaya in WebAssembly — русскоговорящее сообщество
вроде :)
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
я думаю что так сделано от того, что это не  тормозит и дает выигрыш в производительности
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Petr Penzin
Я не совсем понимаю что там происходит. Вот например v8: https://github.com/v8/v8/blob/master/src/compiler/backend/x64/code-generator-x64.cc, вазм операции просто транслируются в набор ассемблерных операций, посмотрите например на OutOfLineF64x2Max. Может быть удаляется очевидно мёртвый код, но никакой "интересный" анализ не делается :)
Вы не туда смотрите. Кодогенерация у wasm и js одна и та же. Смотреть нужно на уровень выше и в другом файле:
https://github.com/v8/v8/blob/master/src/compiler/wasm-compiler.cc#L7029

Как видно после парсинга v8 строит MachineGraph (mcgraph)

и вызывает потом Pipeline::GenerateCodeForWasmFunction:
https://github.com/v8/v8/blob/master/src/compiler/wasm-compiler.cc#L7073

который запускает весь оптимизирующий пайплайн
https://github.com/v8/v8/blob/master/src/compiler/pipeline.cc

Там очень много всего - можете по импортируемым хедерам пройтись
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
В v8 бэкендные ноды один в один вазм операции
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Dmitry Bezhetskov
По коду из firefox можно сказать что для wasm выполняются почти все оптимизации как и для js
Для v8 тоже самое)
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
litoff сильно изменился с того момента когда я на него смотрел
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
MaxGraey
Вы не туда смотрите. Кодогенерация у wasm и js одна и та же. Смотреть нужно на уровень выше и в другом файле:
https://github.com/v8/v8/blob/master/src/compiler/wasm-compiler.cc#L7029

Как видно после парсинга v8 строит MachineGraph (mcgraph)

и вызывает потом Pipeline::GenerateCodeForWasmFunction:
https://github.com/v8/v8/blob/master/src/compiler/wasm-compiler.cc#L7073

который запускает весь оптимизирующий пайплайн
https://github.com/v8/v8/blob/master/src/compiler/pipeline.cc

Там очень много всего - можете по импортируемым хедерам пройтись
Изучив более подробно с уверенностью могу сказать что v8 для wasm использует - сбор статистики для предсказания ветвлений, dead_code_elimination, machine_reducer, common_reducer, value_numbering
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Конечно у FF более продвинутый пайплайн и поэтому webassembly зачастую более производительный нежели чем у v8
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
MaxGraey
Изучив более подробно с уверенностью могу сказать что v8 для wasm использует - сбор статистики для предсказания ветвлений, dead_code_elimination, machine_reducer, common_reducer, value_numbering
Что можно ожидать в плане оптимизаций периодически обсуждается на cg - считается что можно ожидать преобразований одной команды, но не нескольких соседних (за исключением удаления мертвого кода)
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
Petr Penzin
Что можно ожидать в плане оптимизаций периодически обсуждается на cg - считается что можно ожидать преобразований одной команды, но не нескольких соседних (за исключением удаления мертвого кода)
после перевода в IR представление SM или v8 уже неважно сколько там команд было
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
оптимизации все равно накатятся
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
iiuc, тут предлагают оптимизации для первых, потоковых компиляторов
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Заметки с сегоднященего wasm CG митинга касательно GC
https://github.com/WebAssembly/meetings/blob/b760bdda612fef45e3242499f197ca3c53a8d090/gc/2020/GC-06-30.md
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
О, много плюшек для WebAssembly в v8 8.4
https://v8.dev/blog/v8-release-84
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
А еще вышел Fixefox 78 и в нем присутствуют Multi values и BigInt interops для WebAssembly!
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/78
источник