переместить функцию тела, избегая полного клонирования

Это дополнительный вопрос от этот.

я использую llvm::CloneFunctionInto определяется в llvm/Transforms/Utils/Cloning.h для того, чтобы создать новую функцию после генерации кода с правильной сигнатурой, выведенной из типа возвращаемых значений. Это работает хорошо, но это медленно

Я пытаюсь немного оптимизировать это, чтобы переместить или перенести тело функции из старой функции в новую, есть ли утилита для этого?

Я пытаюсь взломать способ сделать перевод, посмотрев на код в CloneFunctionInto, но хотел посмотреть, существует ли существующая функция

2

Решение

Бесстыдно похищенный из 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 это старая функция, которую вы только что клонировали.

5

Другие решения

Других решений пока нет …