我需要更新llvm模块中某些结构中属性的地址空间。通过使用适当的新结构类型将单个结构类型克隆为新类型,可以非常简单地进行更新。它确实需要以递归方式将该方法应用于任何子结构,但工作正常。
但我的挑战是如何在模块中更新此结构的用法?我看到了两个挑战:
Values
正在使用旧的结构类型?答案 0 :(得分:0)
我不完全确定你想要实现的目标,但我认为我可以解决你的问题,假设你正在谈论类似于ConstantStruct的事情。
Value::uses()
或Value::users ()
轻松查询所有用户或用户。它返回一个iterator_range
,您可以使用它来循环它们。但是,如果您只想用旧的结构替换旧的结构,那么您只需要Value::replaceAllUsesWith (Value *V)
。这适用于LLVM中的任何Value
。 replaceAllUsesWith
函数确保在LLVM方面,指向结构的指针仍然有效。这意味着如果在使用上述方法替换所有用途后再次查询模块,则不必担心获取指向旧结构的指针。