2012-11-29 3 views
12

이제 this tutorial 다음에 llvm에 대한 분석 통과를 구현합니다. 이러한 아래와 같이 플러그인을 추가로 인수를 전달해야합니다 사용자 정의 패스에 대한 인수를 llvm에 추가 할 수 있습니까

opt -load /path/to/myplugin.so -mypass -mypass_option input.bc 

그러나 나는 찾지 못함 수동 방법을 수행하는 말해. 그래서 실제로 가능한지 궁금합니다.

미리 감사드립니다.

+0

관용구가'stdin'에서 읽는 것이기 때문에 그 특별한 예가 최적이 아닙니다. 아마도 유스 케이스를 염두에 두어야할까요? –

+0

어떤 종류의 논의가 필요합니까? 내가 아는 한 패스는 IR에서 필요한 모든 것을 취해야하고 IR을 다시 출력해야합니다. –

+0

@TobiasLangner'-mypass' 패스의 분석 레벨이나 분석 위치와 같은 인자입니다. 아마도 그것은 gcc 최적화 수준'-O1','-O2'와 같을 것입니다. –

답변

9

LLVM과 함께 제공되는 CommandLine 라이브러리를 사용해야합니다. 기본적으로, 당신은 그냥 패스의 .cpp 파일의 맨 위에 넣어 :

#include "llvm/Support/CommandLine.h" 

static cl::opt<string> InputFilename("mypass_option", cl::desc("Specify input filename for mypass"), cl::value_desc("filename")); 

하지만 당신은 위의 링크를 확인하는 것이 좋습니다, 그것은 전체 참조 + 편리한 퀵 스타트 섹션이 있습니다.

예를 들어, loop unrolling pass이 내장되어 있습니다. cl::opt<unsigned>과 을 사용하여 소스 파일의 맨 위에있는 두 개의 서명되지 않은 옵션과 두 개의 부울 옵션을 정의합니다.