如何将LLVM IR br转换回while循环

时间:2018-05-26 04:19:40

标签: javascript c llvm emscripten

我想知道如何使用高级别的LLVM进行源到源的转换。鉴于LLVM将while循环转换为使用br等,我想知道如何使用特定的IR块并将其返回转换为JavaScript等语言的while循环。

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

This article表明Emscripten将LLVM代码转换为JavaScript,因此它可能会在某处处理。

我想知道转换它的一般策略,如果有的话。从远处看起来有点棘手,弄清楚从IR中拼凑一个while循环的语句。

2 个答案:

答案 0 :(得分:1)

在从C到LLVM IR的转换过程中,可以使用元数据修饰被认为必要的指令,然后可以使用此元数据将LLVM IR转换为JavaScript,例如指示基本块之间的循环分支是while循环还是not(此信息存在于C上下文中)。见Intrinsics & Metadata Attributes

有关LLVM元数据的更多信息,请参阅LLVM-Metadata

答案 1 :(得分:1)

在Emscripten中,重新创建高级语言结构的算法称为 Relooping ,并描述为in this parer。不过,我不确定它是最新的信息,但它可能会回答你的问题。