无痛地改变GlobalVariable的类型

时间:2018-04-25 17:14:06

标签: c++ compiler-construction global-variables llvm

在我的IR中,我有一个字符串全局常量:

@.str = private unnamed_addr constant [6 x i8] c"Hello\00", align 1

此常量用于整个模块的各个位置。我需要将其初始化程序扩展几个字节。有一个GlobalVariable方法可以对其进行更改(setInitializer()),但它不起作用,因为新的初始化程序具有不同的大小,因此也是类型。

由于类型的差异相同,不可能str->RAUW(newStr)。但是,我的代码并没有使用那个数组大小信息,因此只需" hack"类型改变。

有没有一种简单的方法可以在不重写整个IR的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

我还没有找到任何简单的方法来做到这一点,但是否定的答案也是答案。

我最终仔细地重写了整个模块。 PHIInst很讨厌。