如何获得" phi"没有优化的llvm中的指令

时间:2013-12-03 02:14:59

标签: llvm llvm-ir

当我使用命令clang -emit-llvm -S test.c -o test.ll时,IR文件中没有任何“phi”指令。我怎么能得到它?

我知道我可以使用传递“-mem2reg”或“-gvn”来获取“phi”指令。但他们会做一些优化。我只是想在没有任何优化的情况下获得“phi”。

1 个答案:

答案 0 :(得分:11)

我不确定“做一些优化”是什么意思,但在我看来,mem2reg 正好你需要什么。以下是它的described in the documentation

  

此文件将内存引用提升为寄存器引用。它   促进只有加载和存储作为用途的alloca指令。   通过使用支配者边界来转换分配物   节点,然后以深度优先的顺序遍历函数以重写   适当地加载和存储。这只是标准的SSA   构造算法构造“修剪”的SSA形式。

Clang本身不会产生优化的LLVM IR。它产生相当简单的IR,其中locals保存在内存中(使用alloca s)。优化由opt在LLVM IR级别完成,其中一个最重要的优化确实是mem2reg,这确保了本地化以LLVM的SSA值而不是内存表示。