2012-10-12 3 views
2

이것은 this one의 후속 질문입니다.기능 이동 본문, 전체 복제 방지

llvm/Transforms/Utils/Cloning.h에 정의 된 llvm::CloneFunctionInto을 사용하여 반환 값 유형에서 유추 된 올바른 서명으로 코드 생성 후 새 함수를 만듭니다. 이것은 멋지게 작동하지만 느리다.

나는 함수를 이전 함수에서 새로운 함수로 옮기는 방법을 조금이라도 최적화하려고하고 있는데, 거기에 유틸리티가 있는가?

나는 code in CloneFunctionInto보고 전송을 할 수있는 방법을 해킹하려고하지만, 기존의 기능은 뻔뻔 Arg Promotion pass에서 도난

답변

4

을 존재하는 경우 (스플 라이스 검색)보고 싶어하고있다 :

// 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은 방금 복제 한 이전 기능입니다.