2017-03-26 7 views
1

새로운 기능 추가, 코드 줄 제거, 함수 호출 삽입 및 함수에 대한 인수 변경과 같은 프로그램 최적화를 작성 중입니다.LLVM 패스를 사용하여 코드를 변경할 수 있습니까?

이 모든 것이 LLVM Pass를 사용하여 가능하며, 그렇다면 어떻게이 코드를 작성할 수 있습니까?

LLVM 웹 사이트에 LLVM 패스 페이지를 작성하는 방법을 살펴 보았지만 코드 변경에 대해서는 설명하지 않았습니다.

+0

예, 일부는 사소하지 않지만 그렇습니다. 나는 기존 기능을 추가/교체하고 그렇게했다. 하지만 전반적으로이 질문은 단일 스택 오버 플로우 질문에 너무 광범위 할 수 있습니다. – Brian

+1

@Brian 배울 때 사용할 수있는 기능을 추가/삭제하는 예제 패스가 있습니까? – Programmer

+0

예,이 작업을 수행하는 패스가 있습니다. - [Contech.cpp] (https://github.com/bprail/contech/blob/master/llvm-contech/Contech.cpp) : createMicroTaskWrapStruct. 이 함수는 IR에 새로운 함수를 삽입하고 [Contech.h] (https://github.com/bprail/contech/blob/master/llvm-contech/Contech.h)에서 호출됩니다. 여기서 LLVM 패스는 기존 함수 호출 및 해당 인수를 새 함수 호출로 대체하십시오. 나는이 출판 된 연구가 장난감의 예가 아니라는 것을 인정할 것이다. 그래서 그것은 읽기에는 다소 불투명 할 수있다. 그리고 그 때문에 사과드립니다. – Brian

답변

1

This은 쓰기 통과를 시작하는 데 유용한 가이드입니다. 또한 코드를 변경하는 방법에 대한 예제도 있습니다.