Доступ к переменной 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
,