2011-10-05 4 views
10

LLVM의 다양한 최적화 수준이 무엇인지에 대해 구체적으로 알고 싶습니다.LLVM은 어떤 최적화 작업을 수행합니까?

즉, llvm (또는 clang 또는 opt)의 "-0x"옵션을 사용할 때 어떤 최적화 단계가 (프런트 엔드 외부에서) 정확히 실행되는지 알고 싶습니다. 해당 도구의 "사람"은이 문제에 대한 많은 정보를 제공하지 않습니다 (gcc의 유적에 대한 정보). http://llvm.org/docs/Passes.html를,하지만 "-ox"옵션에 관한 정보를 제공하지 않습니다

나는이 유용한 페이지 알고있다. 내가 디버깅 또는 자세한 옵션을 찾고 있었다 (특히. "--help 선택"에서 정보를 사용)하지만 난 어떤 유용한 옵션을 찾을 수 없습니다.

는 보완, 나는 모든 다양한 LLVM 도구뿐만 아니라 그 소리가 옵션을 자신의 방식을 분석 별개의 드라이버를 사용하는 코드를 구문 분석에 의해 발견. 모든 드라이버가 "-Ox"옵션과 관련하여 유사합니까?

편집 : I 옵션 "O1"에 대한 다음과 같은 출력을 제공하는 '옵트 "도구에 대한 옵션"-debug 패스 = 인수를 "발견

Pass Arguments: -targetdata -no-aa -tbaa -targetlibinfo -basicaa -simplifycfg -domtree -scalarrepl -early-cse -lower-expect 
Pass Arguments: -targetlibinfo -targetdata -no-aa -tbaa -basicaa -globalopt -ipsccp -deadargelim -instcombine -simplifycfg -basiccg -prune-eh -always-inline -functionattrs -scalarrepl-ssa -domtree -early-cse -simplify-libcalls -lazy-value-info -jump-threading -correlated-propagation -simplifycfg -instcombine -tailcallelim -simplifycfg -reassociate -domtree -loops -loop-simplify -lcssa -loop-rotate -licm -lcssa -loop-unswitch -instcombine -scalar-evolution -loop-simplify -lcssa -iv-users -indvars -loop-idiom -loop-deletion -loop-unroll -memdep -memcpyopt -sccp -instcombine -lazy-value-info -jump-threading -correlated-propagation -domtree -memdep -dse -adce -simplifycfg -instcombine -strip-dead-prototypes -preverify -domtree -verify 

이 무엇에서 가까운 나는 원했지만 두 가지 질문이 남았습니다.

  • 왜 두 가지 목록이 있습니까?

  • 다른 도구, 특히 "그 소리"에 대한 유사한 옵션이? 옵션 도구 "선택 하"에 대한 "-debug 패스 = 구조는"더 제공 :

편집이 (내 테스트에 따르면, "-debug-패스 = 인수"연타 작동하지 않습니다) 사용자 친화적 인 데이터 (http://llvm.org/docs/WritingAnLLVMPass.html)

답변

11

왜 두 가지 목록이 있습니까?

함수 및 모듈 패스에는 고유 한 패스 관리자가 있으므로 별도로 인쇄하십시오.

다른 도구에 대한 유사한 옵션, 당신은 -mllvm -debug 패스 = 인수를 사용할 수 연타 특히 "그 소리"

이있다.

+0

충분! 감사 ! –

+0

@echristo : LLVM에서 함수와 모듈 패스의 차이점에 대해 자세히 설명해 주시겠습니까? 말하자면, 전체 소스 코드 파일 foo.c를 전달하여 표준 최적화 단계 (O1,2,3, ...) 중 하나를 선택하십시오. 다음에 무슨 일이 일어 날까 ? – Amir

+1

@Amir 늦어서 죄송합니다. 그냥 보았습니다. 어쨌든, 모듈 패스는 일반적으로 모든 기능을 통해 등을 작동하고 글로벌 가시성을 가지고 무언가이다. 함수 패스는 한 번에 개별 함수에서 작동하며 개별 함수에 대한 분석까지는 앞뒤로 정보를 전달할 수 없습니다. GVN 함수가 통과하는 동안 일반적 , 등등 데이터 레이아웃 글로벌 코드 생성 간 분석 모듈과 같은 것들이다. 각 패스의 출처를 살펴보고 특히 그것이 무엇인지 알아낼 수 있습니다. 보다 구체적인 질문이나 자세한 정보가 있습니까? – echristo

관련 문제