2012-04-24 2 views
10

저는 LLVM 2.6과 llvm-gcc 프론트 엔드로 컴파일했던 프로젝트를 진행하고 있습니다. 나는 LLVM 3.1로 컴파일을 테스트하려고 노력하고있다.LLVM과 Clang의 최적화 수준

error: invalid value '5' in '-O5' 

그러나 LLVM 2.6 LLVM-GCC는 -O5 플래그와 함께 잘 작동 한 :이했을 때 나는 -O5 최적화 레벨에 대해 다음과 같은 오류 메시지를 받았습니다. 내가 처음에하던 작업을하고있어 메이크의 -O5가 (나는를 작성하지 않은 무엇을 알아 내려고 노력하고있어 그래서

-O0 -O1 -O2 -Os -O3 -O4 
     Specify which optimization level to use. -O0 means "no optimization": this level compiles the 
     fastest and generates the most debuggable code. -O2 is a moderate level of optimization which 
     enables most optimizations. -Os is like -O2 with extra optimizations to reduce code size. -O3 
     is like -O2, except that it enables optimizations that take longer to perform or that may 
     generate larger code (in an attempt to make the program run faster). On supported platforms, -O4 
     enables link-time optimization; object files are stored in the LLVM bitcode file format and whole 
     program optimization is done at link time. -O1 is somewhere between -O0 and -O2. 

: 나는 연타 최적화 수준에 대한 다음 문서를 보았다 Makefile). LLVM과 함께 사용되기 위해 변경되고 사용 된 것입니까? 또는 여전히 유용한 기능이며 다른 방법으로 활성화해야합니다.

또한 경우에 내가 그 오류를주고 실행 해요 명령이 기본적으로 유용 :

/bin/clang -g -c -mcmodel=medium -fstrict-aliasing -Wstrict-aliasing -O5 -emit-llvm -fkeep-inline-functions -fno-stack-protector -c -o foo.bc foo.cpp 

는 또한 케이스에 내가 리눅스 (우분투 10.04) x86_64의 시스템에서 실행하고 중요한

.

답변

12

GCC는> = 4 as -O3 N에 대한 어떤 -On 취급 :

-O 플래그가 0-9에서 무제한으로 받도록하지만 제로 세를 통해 구현된다, 나는 생각하지 않습니다 누구나 조만간 4 ~ 9 회까지 구현할 계획이 있습니다. 사람들이이 -O9 관용구를 사용한다는 사실은 조금 복잡합니다. 왜냐하면 gcc가 을 제공 할 수있는 모든 가능한 최적화를 원한다는 것을 암시하기 때문입니다.

큰 레벨은 사용하면 안되며, 품질이 낮은 Makefile 만 있습니다.

그래서 -O9이 약간입니다 지정 - 타입 말도 GCC 컴파일러를 사용하는 경우

그래서, 당신은 -O의 유효 변형이 "그러나이 사람이 열한에 간다!"-O0, -O1, -O2, -O3합니다. 그러나 운전자는 -On을 -O3으로 자동 변환합니다.

LLVM (드라이버의 clang 및 llvm-gcc 변형 모두)은 -O4까지의 레벨 (-O4-O3 -flto과 동일 함) 만 지원합니다. 그래서 테스트없이 -O4를 사용해서는 안되며 왜냐하면 lto는 느리고 프로그램을 중단시킬 수 있기 때문입니다.

2

llvm-gcc가 오류로 인식하지 못했지만 clang이 한 Makefile에서 실수 일 수 있습니다.