Size: a a a

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

2021 February 26

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
слева tp 121
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
122 покроет все из phase 4+
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
кроме SIMD, который в таблице как phase 3
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
loop unrolling включили по-умолчанию в v8 хоть и как экспериментально
https://bugs.chromium.org/p/v8/issues/detail?id=11298#c9
источник
2021 February 27

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
Господа, всем привет)
А подскажите плиз, вот llvm может компилировать свой IR в wasm. Но при этом фронтенд должен генерировать какой специальной IR, совместимый с webassembly.
Кто-нибудь знает что там за различия или где можно почитать?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Tim Plotnikov
Господа, всем привет)
А подскажите плиз, вот llvm может компилировать свой IR в wasm. Но при этом фронтенд должен генерировать какой специальной IR, совместимый с webassembly.
Кто-нибудь знает что там за различия или где можно почитать?
Где это вы услышали про то, что фронт генерирует какото особый llvm IR если таргет указан wasm? Это не так, LLVM IR более не менее таргет-независимый, а все различия уже проявляются во время кодогенерации llvm ir -> wasm
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
MaxGraey
Где это вы услышали про то, что фронт генерирует какото особый llvm IR если таргет указан wasm? Это не так, LLVM IR более не менее таргет-независимый, а все различия уже проявляются во время кодогенерации llvm ir -> wasm
Clang (который как я понимаю фронтенд) хочет чтобы ему указывали —target=wasm32
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Там различие в основном в pass pipeline:
https://llvm.org/doxygen/WebAssemblyTargetMachine_8cpp_source.html

Некоторые проходы не применяются по сравнению с нативными таргетами, в то же время появляются специфичные только для wasm. Напримре для оптимизации и генерации теневого стека, CFGStackify, конвертация irreduceble циклов в reduceble (FixIrreducibleControlFlowPass) и т д
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Tim Plotnikov
Clang (который как я понимаю фронтенд) хочет чтобы ему указывали —target=wasm32
Ну логично. А как еще указывать платформу? точно так же нужно делать если нужно скомпилировать для linux и arm, Там будет так например:
—target=arm-linux-gnueabihf
а вы в тоже время на виндовсе с интелом
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
MaxGraey
Ну логично. А как еще указывать платформу? точно так же нужно делать если нужно скомпилировать для linux и arm, Там будет так например:
—target=arm-linux-gnueabihf
а вы в тоже время на виндовсе с интелом
Мне просто казалось, что IR все-таки должен быть платформо-независимым.
То есть я пишу

clang -emit-llvm hello.c


А потом полученный IR уже компилирую с помощью llc на нужную платформу
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
Но видимо я ошибался)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Tim Plotnikov
Мне просто казалось, что IR все-таки должен быть платформо-независимым.
То есть я пишу

clang -emit-llvm hello.c


А потом полученный IR уже компилирую с помощью llc на нужную платформу
Вся идея IR как раз в том, что бы выделить независимое от фронта и низкоуровневого бекенда def-use представление в котором проводить разного рода анализ и проеобразования)
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
MaxGraey
Вся идея IR как раз в том, что бы выделить независимое от фронта и низкоуровневого бекенда def-use представление в котором проводить разного рода анализ и проеобразования)
Но тем не менее фронту надо указывать таргет чтобы он смог сгенерировать правильный IR?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Tim Plotnikov
Но тем не менее фронту надо указывать таргет чтобы он смог сгенерировать правильный IR?
Не фронту а бэку.
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
MaxGraey
Не фронту а бэку.
Но clang это фронт?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
IR будет во всех случаях более не менее одинаковый
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
target - это уже хинт для самой последней стадии - кодогенерации из IR в целевое представление (.wasm или машинный код + рантайм для конкретной OC)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Tim Plotnikov
Но clang это фронт?
Да это фронт, именно поэтому он предоставляет и дальше делегирует конфиг для бека и кодогенерации
источник

DM

Dmitry M in WebAssembly — русскоговорящее сообщество
Тут путаница поведения консольной команды clang и компилятором. Тебя же не смущает, что вызвав clang на выходе получаешь a.out, а не IR
источник

TP

Tim Plotnikov in WebAssembly — русскоговорящее сообщество
Кажется я нашёл ответ на свой вопрос)
источник