Как преобразовать LLVM IR br обратно в цикл while - PullRequest
0 голосов
/ 26 мая 2018

Мне интересно, как выполнить сортировку источника к источнику, используя LLVM на высоком уровне.Учитывая, что LLVM преобразует циклы while в br и т.п., мне интересно, как затем взять этот конкретный IR-блок и преобразовать его обратно в цикл while на языке, таком как JavaScript.

C while loop -> LLVM IR -> JavaScript while loop

В этой статье предполагается, что Emscripten преобразует код LLVM в JavaScript, поэтому он, вероятно, где-то с этим справляется.

Мне интересна только общая стратегия его преобразования, если естьэто один.Это кажется немного сложным на расстоянии, вычисляя операторы, чтобы собрать воедино цикл while из IR.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

В Emscripten алгоритм воссоздания языковых структур высокого уровня называется Relooping и описан в этом разделе .Однако я не уверен, что это актуальная информация, но, вероятно, она отвечает на ваш вопрос.

0 голосов
/ 26 мая 2018

Во время перевода из C в IR LLVM инструкции, которые считаются необходимыми, могут быть украшены метаданными, затем эти метаданные можно использовать для преобразования IR LLVM в JavaScript, например, указывая, является ли циклическое ветвление между базовыми блоками циклом while илинет (эта информация присутствует в контексте C).См. Атрибуты встроенных функций и метаданных .

Для получения дополнительной информации о метаданных LLVM см. Метаданные LLVM .

...