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
.