llvm

Obtención de los operandos en una instrucción LLVM



llvm 3.7 0 (2)

Estoy escribiendo una optimización para mi compilador y uso LLVM IR como mi Idioma Intermedio. He analizado el archivo de entrada y lo he convertido a LLVM IR. Durante la optimización, necesito recuperar los operandos de las instrucciones. Puedo encontrar getOpCode() en la clase de Instruction , pero no getOpCode() recuperar la lista de operandos. ¿Cómo hago para eso?


Hay muchos llvm::User de operandos, generalmente proporcionados por la clase llvm::User , cuya página doxygen es: http://llvm.org/doxygen/classllvm_1_1User.html Hay getNumOperands() y getOperand(unsigned int) , así como también un iterador op_begin() estilo op_begin() y op_end() .

Por ejemplo, dada la Instrucción %X = add i32 %a, 2 , I->getOperand(0) devolverá el Value* para %a , e I->getOperand(1) devolverá el Value* para i32 2 (se puede convertir en ConstantInt).


Por ejemplo, si tiene la Instruction* I1 , I1->getOperand(0) devolverá el primer operando de tipo Value* . Puede ir más lejos, usando I1->getOperand(0)->getName() que devolverá el nombre del operando. Ver los métodos de clase de Value .