我正在寻找一种方法将LLVM IR代码(最好是汇编形式)解析为一些内部Haskell数据类型,我可以将其用于以后的处理。我认为有一些Haskell程序包可以做到这一点,但我似乎找不到一个。
有什么建议吗?
答案 0 :(得分:2)
Haskell的现代LLVM包是llvm-general library。它具有将LLVM字节码模块从字符串转换为AST的Haskell ADT的绑定。
import LLVM.General
import LLVM.General.Analysis
import LLVM.General.Context
import Control.Monad.Error
main :: String -> IO ()
main src = do
_ <- withContext $ \context -> do
runErrorT $ withModuleFromString context src $ \mod -> do
ast <- moduleAST mod
-- Your logic here.
return ()
答案 1 :(得分:0)
有LLVM bindings,但它们的解析部分远未完成,可能落后于最近的LLVM版本。 IR生成要完整得多。虽然,一旦碰到它,就不难添加缺失的东西。我已经使用这些绑定来编写编译器后端,它们从来就不是一个showstopper。
答案 2 :(得分:0)
有什么建议吗?
通过LLVM-C API使用FFI;具体来说,the LLVMParseBitcode function应该可以解决问题。
这不完全是您想要的,您将不得不使用其他LLVM-C函数来查询或修改模块,但至少您将支持最新的LLVM IR版本。