Estoy tratando de detectar las declaraciones de matriz y crear una tabla de valores de símbolos para las matrices de tamaño estático. Contendrá un emparejamiento name-arraySize. Tengo varias preguntas:LLVM Nombres y parámetros de las variables de instrucción
1) Dada una instrucción como% a = alloca [200 x i8], alinee 16 cómo puedo extraer "a", el nombre de la matriz.
2) Estoy tratando de extraer el "200" como el tamaño de la matriz, pero este código:
if(AllocaInst *allocInst = dyn_cast<AllocaInst>(&*I)){
PointerType *p = allocInst->getType();
if(p->getElementType()->isArrayTy()){
Value* v = allocInst->getOperand(0);
errs() << *v ;
}
}
me produce "i32 1" cuando imprimo v ¿Alguien sabe por qué esto es.? No pensé que hubiera nada de 32 bits sobre esto, excepto tal vez la dirección.
Bien, así que descubrí cómo obtener el tamaño: ArrayType * a = cast (p-> getElementType()); a-> getNumElements() –
Realn0whereman
bien ... así que ... me di cuenta de cómo obtener el nombre también ... allocInst-> getName() ¿Por qué es que simplemente por publicar en StackOverflow me ayuda a encontrar respuestas más rápido ...: P – Realn0whereman
Lo mejor es que solo publique una respuesta que contenga esta información, en lugar de comentarios. De esta manera, la pregunta se marcará correctamente como respondida. – Oak