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

Javascript 如何将LLVM IR br转换回while循环,javascript,c,llvm,emscripten,Javascript,C,Llvm,Emscripten,我想知道如何在高级别上使用LLVM进行源代码到源代码的转换。鉴于LLVM将while循环转换为usingbr等,我想知道接下来如何使用特定的IR块并将其转换回JavaScript等语言中的while循环 C while loop -> LLVM IR -> JavaScript while loop 建议Emscripten将LLVM代码转换为JavaScript,因此它可能会在某个地方处理此问题 我想知道转换它的一般策略,如果有的话。从远处看,这似乎有点棘手,要找出将IR中的wh

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

C while loop -> LLVM IR -> JavaScript while loop
建议Emscripten将LLVM代码转换为JavaScript,因此它可能会在某个地方处理此问题


我想知道转换它的一般策略,如果有的话。从远处看,这似乎有点棘手,要找出将IR中的while循环拼凑在一起的语句。

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


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

在Emscripten中,重新创建高级语言结构的算法称为重新启动,并对其进行了描述。不过,我不确定这是最新的信息,但它可能回答了您的问题。

基本上,如果我正确理解了这篇文章,他们会在不使用元数据的情况下将LLVM-IR转换为低级JavaScript形式?老实说,我不确定我是否彻底阅读过这篇文章。如果我读过,那是很久以前的事了。但我记得,是的,他们在LLVM IR中检测到一些基本模式。他们可以将每个函数都作为一个大的while&switch发出,但就我记忆所及,这对于当时的JS引擎(也许现在也是如此)来说是不可优化的,所以他们实现了重新启动。是的,Emscripten通常会发出JS的特殊静态类型子集——Asm.JS。甚至是。但现在看来,他们正在致力于向WebAssembly过渡。