使用 llvm 从使用位置查找主导定义位置

问题描述 投票:0回答:1

我正在尝试找到可以到达 llvm 中使用位置的定义位置。例如,我有一个 CFG,看起来像

  a (def)
 / \
b   c (def)
 \ / 
  d (use)

因此,指令

a
c
都定义了一个值,并且在
d
处,我们想要使用该值。一般情况下,如何使用 llvm 从
a
找到
c
d
位置?我可以使用支配树解决这个问题吗?

c++ graph llvm
1个回答
0
投票

如果您使用的是好的编译器,那么答案是肯定的。如果答案是否定的,那么首先运行 mem2reg pass 并了解结果不会是完美的。

(d)点使用的是一个Value。如果该值是 PHINode,则获取其“传入值”并查看它们,直到获得一组不是 PHINode 的值。这些是你的定义。 这听起来简单得令人怀疑,不是吗?它很简单,因为 SSA 语言(例如 IR)恰恰使这种工作变得简单。 SSA 语言在很多方面都可能是一种痛苦,这种痛苦是值得的,因为它们在这种事情上非常擅长。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.