如何在没有优化的情况下在llvm中获取"phi"指令

bla*_*011 3 llvm llvm-ir

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

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

Eli*_*sky 11

我不知道你所说的"做一些优化"的意思,但在我看来,那mem2reg正是你所需要的.以下是文档中描述的内容:

此文件将内存引用提升为寄存器引用.它促进了仅具有加载和存储作为用途的alloca指令.通过使用dominator前沿来放置phi节点来转换alloca,然后以深度优先的顺序遍历函数以适当地重写加载和存储.这只是构建"修剪"SSA形式的标准SSA构造算法.

Clang本身不会产生优化的LLVM IR.它产生相当简单的IR,其中本地保存在存储器中(使用allocas).优化是通过optLLVM IR级别完成的,其中一个最重要的优化确实mem2reg可以确保本地化以LLVM的SSA值而不是内存来表示.