Доступ к переменной Element of Array в llvm

Я хочу получить значение массива по индексу переменной. Индекс рассчитывается программой и не известен во время анализа. Таким образом, он сохраняется в Value и преобразуется в Int следующим образом:

Value *IndexV = Index->Codegen();
Value *IntV = Builder.CreateFPToUI( IndexV, Type::getInt32Ty( getGlobalContext() ) );

Если я знаю индекс, я могу использовать:

Value *VV = Builder.CreateExtractValue( Builder.CreateLoad( V ), 0 );

Это дает мне первый элемент массива. И работает правильно. Но как я могу использовать IntV как индекс? CreateExtractValue принимает только ArrayRef, и нет никакого способа IntV к ArrayRef, или я не прав? Как можно сделать такую ​​вещь?

Спасибо!

1 ответ

Решение

Прежде всего, когда ожидается ArrayRef, вы всегда можете передать только один элемент, поскольку существует неявное преобразование между T а также ArrayRef<T>,

В частности, здесь, однако, extractvalue требует постоянных индексов и не может принимать общие значения, поэтому он хочет unsigned ценности. Если вы хотите получить доступ к элементу с неизвестным индексом в массиве, используйте вместо него инструкцию getelementptr: вызовите его по адресу массива с индексами 0 и IntV, и вы должны получить указатель на массив в месте IntV,

Другие вопросы по тегам