如何使用GHC编译器将*.hs编译为llvm ir (*.ll)?

4
我尝试过。
ghc -fllvm -pgmlo -pgmlc -ddump-llvm src.hs

并且。
ghc -fllvm -pgmlo -pgmlc -keep-llvm-files src.hs

opt和llc(3.5.1版本)已经在PATH中了。

但是我执行命令后没有发现任何LLVM IR。

2个回答

8
可能是因为你的程序自上次运行 GHC 以来没有改变,所以 GHC 没有重新编译你的程序。这似乎很可能是因为 -pgmlo -pgmlc 的意思是“使用 -pgmlc 作为 LLVM 优化器”,这是行不通的。只需运行以下命令即可:-pgmlc
ghc -fllvm -keep-llvm-files -fforce-recomp src.hs

(或手动修改 src.hs 并重新编译它)。

强制重新编译有所帮助。谢谢。 - meldo

2

1) -pgm[letter] - 如果您仅编译成C代码(在您的情况下,如果您没有使用-fllvm标志),请使用此命令。

2) -keep-llvm-files - 在当前目录中查找.ll文件,否则尝试在/tmp目录中查找它们(我在某个地方看到了这个错误)。

3) ghc 仅适用于llvm 3.5。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - meldo
据我所知,GHC可以与任何版本的LLVM一起使用。如果文件名不是optllc,而是类似于opt-3.5llc-3.5,那么您可能需要添加选项-pgmlo opt-3.5 -pgmlc llc-3.5 - crockeea
我的意思是 GHC版本⩽7.8只能与LLVM一起使用,其版本为⩽3.5。 - user1010424

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接