Estoy escribiendo una optimización para mi compilador y utilizo LLVM IR como mi Lenguaje Intermedio. He analizado el archivo de entrada y lo convertí a LLVM IR. Durante la optimización, necesito recuperar los operandos de las instrucciones. Puedo encontrar getOpCode() en la clase de Instrucción, pero no puedo recuperar la lista de operandos. ¿Cómo hago eso?Obteniendo los operandos en una instrucción LLVM
15
A
Respuesta
23
Hay un montón de métodos de acceso de operando, por lo general proporcionados por la clase llvm::User
, cuya página de Doxygen es: http://llvm.org/doxygen/classllvm_1_1User.html Hay getNumOperands()
y getOperand(unsigned int)
, así como de estilo iterador descriptores de acceso op_begin()
y op_end()
.
Por ejemplo, dada Instrucción %X = add i32 %a, 2
, I->getOperand(0)
devolverá el Value*
para %a
, y I->getOperand(1)
devolverá el Value*
para i32 2
(moldeable a ConstantInt).
1
Por ejemplo, si tiene la Instrucción * I1 - I1-> getOperand (0) devolverá el primer operando de tipo Valor *. Puede ir más allá, usando I1-> getOperand (0) -> getName() que devolverá el nombre del operando. Ver los métodos de la clase Value.
Cuestiones relacionadas
- 1. ¿Borrando una primera instrucción en bloque básico de LLVM IR?
- 2. Cómo verificar si la instrucción es una instrucción PHI en LLVM IR
- 3. LLVM Nombres y parámetros de las variables de instrucción
- 4. Obteniendo el número de campos en una base de datos con una instrucción SQL?
- 5. x86 ensamblar multiplicar y dividir operandos de instrucción, 16 bits y superior
- 6. Actualice los resultados de una instrucción SELECT
- 7. mapa operador [] operandos
- 8. Obteniendo los usuarios que compartieron una publicación
- 9. ¿Qué es exactamente la instrucción PHI hace y cómo usarlo en LLVM
- 10. Cómo deshabilitar una optimización en LLVM
- 11. ¿Cuáles son los mayores beneficios de LLVM?
- 12. Los lenguajes funcionales dirigidos a la LLVM
- 13. Ayuda con operandos matemáticos en clase (C#)
- 14. instrucción MySQL que devuelve una instrucción SQL?
- 15. Multithreading en LLVM
- 16. -emit-llvm en Linux
- 17. Auto vectorización en llvm
- 18. En instrucción para LINQ a los objetos
- 19. Reenvío de argumentos en LLVM
- 20. Hacer LLVM en línea una función desde una biblioteca
- 21. Vinculación del código LLVM JIT a las bibliotecas LLVM estáticas?
- 22. Obteniendo los mejores resultados en un JOIN
- 23. ¿Pueden los paréntesis en C cambiar el tipo de resultado de los operandos de una operación bit a bit?
- 24. ¿Cómo uso una cadena de sobrecargas del operador sin modificar los operandos?
- 25. Freemarker: una enumeración en una instrucción if
- 26. Obteniendo los tipos de los atributos en un objeto ActiveRecord
- 27. LLVM - vinculación problema
- 28. enlace dinámico con LLVM
- 29. formato ReSharper: alinear la igualdad de operandos
- 30. de LLVM para GHC