LLVM - загрузить переменную из указателя со смещением - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть значение, назовем его v, равным Type i8**, которое указывает на первый элемент массива.Если я хочу получить значение, которое является переменной первого элемента массива, я могу использовать Builder.CreateLoad(v);.Если я хочу получить второй элемент массива, есть ли такая команда, как CreateLoad(), но со смещением?

Я попытался добавить целое число к v, но она не сработала(по какой-то очевидной причине я не знаю).Также я попытался использовать Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(1) });, но он также не работает (c64 создает константу).

Вы можете помочь?

1 Ответ

0 голосов
/ 17 апреля 2019

Итак, я нашел решение. Если v является массивом, Builder.CreateGEP(v, Vector<Value *>{ c64(0), c64(5) }) правильно загружает 6-й элемент v. Если v является указателем на матрицу (i8 **), то для меня это сработало: Builder.CreateGEP(Builder.CreateLoad(p.first), c64(5)), который корректно загружает 6-й элемент массива, на который указывает v. (функция c64() создает 64-битную целую константу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...