指令的操作数中有breaks a constant GEP expression传递给它自己的指令,因此这些嵌套的GEP表达式变得明确,因此在后续传递中更容易使用。
现在我遇到了类似的问题。这个SSA Phi指令(link):
while.cond: ; preds = %while.body, %entry
%n.0 = phi %struct.Node* [ bitcast ({ %struct.Node*, i32, [4 x i8] }* @n1 to %struct.Node*), %entry ], [ %13, %while.body ]
...
包含一个bitcast指令(link)作为其“内联”操作数。存在一个传递,允许我将给定模块的SSA分解为最基本的指令,基本上“取消内联”这样的嵌套表达式,使它们成为明确的SSA指令?
答案 0 :(得分:1)
我不知道有任何这样的通行证。
但是,在我看来,修改SAFECode的BreakConstantGEPs
传递来做到这一点应该非常简单:只需将最初插入工作列表的条件更改为isa<PHINode>
而不是操作数循环检查hasConstantGEP
。