Индекс массива загрузки LLVM

#c #llvm #llvm-c -api

Вопрос:

Очень стыдно , что при поиске подписки на массив llvm я не могу найти никаких конкретных результатов, и большинство ответов на stackoverflow на самом деле являются подсказкой для экспертов, а не решением.

То, что мне нужно, — это как загрузить my_array[my_index] . Моя версия llvm-10.0.0.

Я ищу решение, работающее как с глобальным, так и с локальным массивом и любым индексом переменных.

 llvm::Value * address_of_array = ... llvm::Value * index = ... // a variable index (not a constant index) llvm::LoadInst * loader = ??????  

что я должен поставить вместо вопросительных знаков?


Примечание:

Я создаю массив из следующих шагов

 llvm::Type * element_type = ... llvm::ArrayType* array_type = llvm::ArrayType::get(element_type, array_length); llvm::AllocaInst * alloc_inst = new llvm::AllocaInst(array_type, 0, "array_name", basic_block);  

Комментарии:

1. Вы действительно собираетесь написать патч для LLVM?

2. @sweenish, я не понял твою точку зрения.

3. Я хочу сказать, что если вы не работаете с кодовой базой LLVM, вам, вероятно, не нужны эти значения, относящиеся к LLVM. Просто используйте обычные массивы и/или векторы. Что касается вопроса о том, для чего, в вашем вопросе не хватает деталей и ясности. Если бы вы потратили свою энергию на создание достаточного контекста, вместо того, чтобы оскорблять сообщество, от которого вы пытаетесь получить ответ, вы могли бы добиться большего успеха.

4. @sweenish, я использую llvm для генерации кода компилятора. Не уверен, что вы подразумеваете под обычными массивами/векторами.

5. FWIW, такие языки, как Ruby, Java и C, имеют довольно разные типы массивов, если рассматривать их на уровне детализации компилятора. Я подозреваю, что как только вы поймете, каков ваш тип массива, вы сможете использовать найденные вами «подсказки».