Estoy jugando con LLVM. Pensé en cambiar el valor de una constante en el código intermedio. Sin embargo, para la clase llvm::ConstantInt, no veo una función setvalue. ¿Alguna idea de cómo puedo modificar el valor de una constante en el código IR?Establecer valor para llvm :: ConstantInt
6
A
Respuesta
12
ConstantInt es una fábrica, ¿no? Clase tiene la get method para construir nueva constante:
/* ... return a ConstantInt for the given value. */
00069 static Constant *get(Type *Ty, uint64_t V, bool isSigned = false);
Así que, creo, no se puede modificar ConstantInt existente. Si desea modificar el IR, intente cambiar el puntero a argumento (cambie el IR, pero no el objeto constante).
Puede ser que desee algo así (recuerde, no tengo experiencia con LLVM, y estoy casi seguro de que el ejemplo es incorrecto).
Instruction *I = /* your argument */;
/* check that instruction is of needed format, e.g: */
if (I->getOpcode() == Instruction::Add) {
/* read the first operand of instruction */
Value *oldvalue = I->getOperand(0);
/* construct new constant; here 0x1234 is used as value */
Value *newvalue = ConstantInt::get(oldValue->getType(), 0x1234);
/* replace operand with new value */
I->setOperand(0, newvalue);
}
"modificar" una constante solo hay una solución (incremento y decremento are illustrated):
/// AddOne - Add one to a ConstantInt.
static Constant *AddOne(Constant *C) {
return ConstantExpr::getAdd(C, ConstantInt::get(C->getType(), 1));
}
/// SubOne - Subtract one from a ConstantInt.
static Constant *SubOne(ConstantInt *C) {
return ConstantInt::get(C->getContext(), C->getValue()-1);
}
PS, tiene Constant.h comentario importante en la mendicidad sobre la creación y no de la eliminación Constantes http://llvm.org/docs/doxygen/html/Constant_8h_source.html
00035 /// Note that Constants are immutable (once created they never change)
00036 /// and are fully shared by structural equivalence. This means that two
00037 /// structurally equivalent constants will always have the same address.
00038 /// Constants are created on demand as needed and never deleted: thus clients
00039 /// don't have to worry about the lifetime of the objects.
00040 /// @brief LLVM Constant Representation
Cuestiones relacionadas
- 1. LLVM obtener constante entera detrás de Valor *
- 2. de LLVM para GHC
- 3. Establecer un valor predeterminado para una propiedad
- 4. Cómo establecer UIColor Valor Para CGContextSetRGBStrokeColor
- 5. usando jQuery para establecer CKEditor Valor
- 6. Preguntas para compilar a LLVM
- 7. android sharedpreferences establecer valor
- 8. Establecer valor de Dijit.Form.Textarea
- 9. Html.EditorFor Establecer valor predeterminado
- 10. ¿El valor de inserción de LLVM está mal optimizado?
- 11. LLVM JIT segfaults. ¿Qué estoy haciendo mal?
- 12. Establecer valor en Enum - Java
- 13. jQuery - Establecer valor de atributo
- 14. Cómo establecer el valor div
- 15. Objetos de valor de cadena LLVM: ¿Cómo puedo recuperar la cadena de un valor?
- 16. ¿Basura-colectores para multi-core llvm?
- 17. Generando código LLVM para 'lambda', 'define'
- 18. montaje LLVM: asigno constante entera para registrar
- 19. ¿Es LLVM adecuado para idiomas paralelos?
- 20. ¿Crear un backend VHDL para LLVM?
- 21. Idioma para el compilador basado en LLVM
- 22. TikZ: establecer el valor de x apropiada para un nodo
- 23. ¿Puedo establecer el valor para el atributo renderizado desde JavaScript?
- 24. C# ¿Cómo establecer un valor predeterminado para las propiedades automáticas?
- 25. cómo establecer un valor para un lapso usando jQuery
- 26. ¿Cómo establecer un valor predeterminado para la lista de elementos?
- 27. ¿Cómo establecer el valor alfa para mi distribución relativa?
- 28. Wicket Opción desplegable para establecer el valor predeterminado
- 29. Establecer valor RGB para el texto de etiqueta
- 30. cómo establecer el valor por defecto para array (php)
Su solución se ve bien, lo intentaré :). – MetallicPriest
Espero, @Anton Korobeynikov, responder o comentar mi código. También debes saber que setOperand no puede cambiar algo que es una constante. – osgx
¡Funcionó! ¡Brillante para una persona (usted) que nunca lo usó! También muestra lo bien escrito que es LLVM, ¡ya que es muy fácil de aprender y usar! – MetallicPriest