Gram z LLVM. Myślałem o zmianie wartości stałej w kodzie pośrednim. Jednak dla klasy llvm::ConstantInt nie widzę funkcji setvalue. Każdy pomysł, jak mogę zmienić wartość stałej w kodzie IR?Ustaw wartość dla llvm :: ConstantInt
6
A
Odpowiedz
12
ConstantInt to fabryka, prawda? Klasa ma get method do budowania nowej stałej:
/* ... return a ConstantInt for the given value. */
00069 static Constant *get(Type *Ty, uint64_t V, bool isSigned = false);
Tak, myślę, że nie można zmodyfikować istniejący ConstantInt. Jeśli chcesz zmodyfikować IR, powinieneś spróbować zmienić wskaźnik na argument (zmień sam IR, ale nie stały obiekt).
Może chcesz czegoś takiego (pamiętaj, mam zerowe doświadczenie z LLVM i jestem prawie pewien, że przykład jest niepoprawny).
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);
}
do „modyfikować” stała sam jest rozwiązanie (zwiększania i zmniejszania 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 Constant.h ma istotne Komentarz w prosząc o tworzeniu i braku deletowaniem Stałe 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
Powiązane problemy
- 1. Jak utworzyć ConstantInt w LLVM?
- 2. Niewłaściwa zoptymalizowana wartość insertowa LLVM?
- 3. Jak utworzyć wartość struktury LLVM?
- 4. Symfony2 - Ustaw wybraną wartość dla pola encji
- 5. Ustaw domyślną wartość zachęty dla ciągu znaków
- 6. Objective-C ustaw domyślną wartość dla właściwości
- 7. Ustaw wartość domyślna dla auto-wdrożone nieruchomość
- 8. Ustaw wartość początkową dla kolumny z autoincrement
- 9. Ustaw wartość RGB dla tekstu etykiety
- 10. Ustaw wartość InstallDir w funkcji lub ustaw automatycznie wypełnij wartość?
- 11. Ustaw wartość domyślną dla DisplayFormatAttribute.ConvertEmptyStringToNull na wartość false w witrynie
- 12. Ustaw właściwość wartość RadioButton
- 13. LLVM dla GHC
- 14. Ustaw wartość pola prywatnego
- 15. Ustaw domyślną wartość właściwości
- 16. LLVM IRBuilder: ustaw punkt wstawienia po określonej instrukcji
- 17. Tworzenie backendu VHDL dla LLVM?
- 18. Ustaw wartość BOOL na NSMutableDictionary
- 19. Ustaw wartość NULL w MySQL
- 20. Ustaw wyliczenie na domyślną wartość
- 21. Ustaw wartość na wyliczenie - Java
- 22. AngularJS - Ustaw domyślną wartość dla wyboru wewnątrz powtórzenia ng
- 23. Ustaw Wartość dla edytora asa bez wybierania całego edytora
- 24. Ustaw domyślną wartość dla pól spoza XML w XStream
- 25. Ustaw tekst i wartość elementu ComboBoxItem
- 26. Spring-boot: ustaw domyślną wartość konfigurowalnych właściwości
- 27. Ustaw domyślną wartość kolumny liczb całkowitych SQLite
- 28. Angularjs - ustaw wartość widoku nie aktualizuje wyświetlania
- 29. Przechowywanie rozszerzeń chrome: ustaw/zyskaj wartość
- 30. Ustaw hasło dla H2
Twoje rozwiązanie wygląda dobrze, spróbuję :). – MetallicPriest
Mam nadzieję, że @Anton Korobeynikov, odpowie lub skomentuje mój kod. Powinieneś także wiedzieć, że setOperand nie może zmienić czegoś, co jest stałą samą w sobie. – osgx
To zadziałało! Wspaniałe dla osoby (ciebie), która nigdy jej nie użyła! Pokazuje również, jak dobrze napisane jest LLVM, ponieważ jest tak łatwy do nauczenia się i używania! – MetallicPriest