Это дополнительный вопрос от этот.
я использую llvm::CloneFunctionInto
определяется в llvm/Transforms/Utils/Cloning.h
для того, чтобы создать новую функцию после генерации кода с правильной сигнатурой, выведенной из типа возвращаемых значений. Это работает хорошо, но это медленно
Я пытаюсь немного оптимизировать это, чтобы переместить или перенести тело функции из старой функции в новую, есть ли утилита для этого?
Я пытаюсь взломать способ сделать перевод, посмотрев на код в CloneFunctionInto, но хотел посмотреть, существует ли существующая функция
Бесстыдно похищенный из Arg Промо-пасс (поиск сращивания):
// Since we have now created the new function, splice the body of the old
// function right into the new function, leaving the old rotting hulk of the
// function empty.
NF->getBasicBlockList().splice(NF->begin(), F->getBasicBlockList());
куда NF
это новая функция, в которую вы клонируете и F
это старая функция, которую вы только что клонировали.
Других решений пока нет …