Как получить инициализаторы глобальных переменных с помощью LLVM API

Я пишу проход LLVM, который работает с кодом IR LLVM. Часть цели состоит в том, чтобы прочитать начальные значения глобальных переменных, где глобальные переменные могут быть любого типа, от базовых типов до структур и классов. Как мне этого добиться?

1

Решение

Если вы вызываете getInitializer на GlobalVariable Например, вы получаете инициализатор, типа Constant (хотя обязательно позвоните hasInitializer или сначала один из его родственных методов, чтобы убедиться, что инициализатор вообще есть). Также глобальные переменные и константы IIRC реализованы как одно и то же, поэтому используйте isConstant отфильтровать константы, если вы не хотите их.

Конечно, Constant абстрактный базовый класс; фактический тип будет одним из его потомков, который вы можете увидеть в схема представлена ​​на странице документации. Вы можете запросить и получить фактический тип константы обычным способом, через isa / cast / dyn_castили вы можете использовать getType на нем (константа является Value в конце концов) и работа оттуда.

Наконец, чтобы получить все глобальные переменные из Module используйте либо global_begin/global_end итераторы, или просто использовать getGlobalList на нем (у него есть свой итератор).

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]