Некоторые ответы есть в комментариях, но здесь есть более полное объяснение.
Существует два источника размера в alloca: размер выделенного типа иколичество элементов этого типа, которые выделяются.Если вы не укажете число явно, вы получите неявное значение по умолчанию для выделения одного элемента .Это значение i32 1
, которое вы получаете из операнда # 0. Если выделенный тип является типом массива (для проверки используйте dyn_cast<...>
, так как cast<...>
подтвердит), то вам также необходимо учитывать этот размер.
В LLVMоптимизатор канонизирует команды alloca со статическим размером больше единицы в инструкцию alloca одного массива с таким размером.Таким образом, вы чаще всего видите размер alloca как постоянный.
Есть и более дружественные API для этого: http://llvm.org/docs/doxygen/html/classllvm_1_1AllocaInst.html
В частности, AllocaInst::getArraySize()
даст вам числоэлементы (обычно 1) и AllocaInst::getAllocatedType()
получат тип выделенного элемента (иногда массив).
Наконец, примечание об использовании имени: LLVM не делает any гарантии об именах инструкций.Различные части оптимизатора будут уничтожать имена или менять их.Просто будьте осторожны, используя их для производственного кода, так как вы можете быть удивлены, когда они исчезнут.