如何将 LLVM IR br 转换回 while 循环
How to convert LLVM IR br back to a while loop
我想知道如何使用高级别的 LLVM 将源代码转换为源代码。鉴于 LLVM 将 while 循环转换为使用 br
等,我想知道如何获取特定的 IR 块并将其 back 转换为 while 循环作为 JavaScript.
C while loop -> LLVM IR -> JavaScript while loop
This article 建议 Emscripten 将 LLVM 代码转换为 JavaScript,因此它可能会在某处处理此问题。
我想知道转换它的一般策略(如果有的话)。从远处看似乎有点棘手,找出从 IR 拼凑出 while 循环的语句。
在从 C 到 LLVM IR 的转换过程中,被认为必要的指令可以用元数据修饰,然后可以使用此元数据将 LLVM IR 转换为 JavaScript,例如指示是否基本之间的循环分支blocks 是否是 while 循环(此信息存在于 C 上下文中)。参见 Intrinsics & Metadata Attributes。
有关 LLVM 元数据的更多信息,请参阅 LLVM-Metadata。
在 Emscripten 中,重新创建高级语言结构的算法称为 Relooping 并被描述为 in this parer。不过,我不确定它是否是最新信息,但它可能会回答您的问题。
我想知道如何使用高级别的 LLVM 将源代码转换为源代码。鉴于 LLVM 将 while 循环转换为使用 br
等,我想知道如何获取特定的 IR 块并将其 back 转换为 while 循环作为 JavaScript.
C while loop -> LLVM IR -> JavaScript while loop
This article 建议 Emscripten 将 LLVM 代码转换为 JavaScript,因此它可能会在某处处理此问题。
我想知道转换它的一般策略(如果有的话)。从远处看似乎有点棘手,找出从 IR 拼凑出 while 循环的语句。
在从 C 到 LLVM IR 的转换过程中,被认为必要的指令可以用元数据修饰,然后可以使用此元数据将 LLVM IR 转换为 JavaScript,例如指示是否基本之间的循环分支blocks 是否是 while 循环(此信息存在于 C 上下文中)。参见 Intrinsics & Metadata Attributes。
有关 LLVM 元数据的更多信息,请参阅 LLVM-Metadata。
在 Emscripten 中,重新创建高级语言结构的算法称为 Relooping 并被描述为 in this parer。不过,我不确定它是否是最新信息,但它可能会回答您的问题。