часть моего проекта, основываясь на некотором анализе, я должен изменить аргументы вызова функции.Я делаю это на уровне llvm-ir.как-то так,
doWork ("work", functionBefore)
на основе моих результатов мой llvm-pass должен быть в состоянии преобразовать указатель функции, переданный в вызов функции, как этот
doWork ("work", functionAfter)
предполагается, что и functionBefore, и functionAfter имеют одинаковый тип возврата.
1. Можно ли изменить аргументы с помощью llvm pass?
2. Или я должен удалить инструкцию и воссоздать ту, которая мне нужна?
Пожалуйста, дайте несколько советов или указаний, как это сделать?
llvm ir для вызова функции будетчто-то вроде этого -
invoid void @ _Z7processNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPFvS4_E (% "class.std :: __cxx11 :: basic_string" * nonnull% 1, void (% "class.std :: 101 *) _cring nonnull @ _Z9functionBNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE), чтобы пометить% 7, размотать ярлык% 13