用于解析LLVM IR的Haskell包?

时间:2013-10-30 09:12:31

标签: haskell package llvm llvm-ir

我正在寻找一种方法将LLVM IR代码(最好是汇编形式)解析为一些内部Haskell数据类型,我可以将其用于以后的处理。我认为有一些Haskell程序包可以做到这一点,但我似乎找不到一个。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Haskell的现代LLVM包是llvm-general library。它具有将LLVM字节码模块从字符串转换为AST的Haskell ADT的绑定。

请参阅:withModuleFromString

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版本。