【问题标题】:How to get "phi" instruction in llvm without optimization如何在没有优化的情况下在 llvm 中获取“phi”指令
【发布时间】:2013-12-03 02:14:58
【问题描述】:

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

我知道我可以使用 pass "-mem2reg" 或 "-gvn" 来获取 "phi" 指令。但他们会做一些优化。我只想得到“phi”而不做任何优化。

【问题讨论】:

  • mem2reg(又名 PromotePass)不依赖于除 DominatorTree 分析之外的任何其他通道,显然,它不会改变 IR。

标签: llvm llvm-ir


【解决方案1】:

我不确定您所说的“进行一些优化”是什么意思,但在我看来 mem2reg 正是您所需要的。这是described in the documentation

此文件将内存引用提升为寄存器引用。它 促进仅具有加载和存储作为用途的 alloca 指令。 通过使用支配边界放置 phi 来转换 alloca 节点,然后以深度优先顺序遍历函数以重写 根据需要加载和存储。这只是标准的 SSA 构造算法来构造“修剪”的 SSA 表单。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    相关资源
    最近更新 更多