2017-12-14 30 views
2

나는 LLVM-O0 최적화를 사용하여 C 코드를 컴파일했습니다.LLVM IR을 높은 최적화 수준으로 변환

-O0 LLVM IR 코드를 -O3LLVM "C 코드없이"IR 코드로 변환하려면 어떻게해야합니까?

나는 다음 시도했다 :

clang -O3 -S -emit-llvm O0.ll -o O3.ll 

opt -O3 -S O0.ll -o O3.ll 

하지만 출력이 여전히 -O0 수준입니다.

감사합니다.

+0

'opt'는 예상 한대로해야합니다. 샘플을 게시 할 수 있습니까? 그들은 동일합니까? –

+1

[Clang이 내 기능에 특성을 자동으로 추가하는 이유는 무엇입니까?] (https://stackoverflow.com/questions/47504219/why-is-clang-automatically-adding-attributes-to-my-functions) –

답변

0

나는 변화가 언제 일어 났는지 확신 할 수 없다. (나는 그것이 LLVM 3.9.0 이상이라고 생각한다.) 그러나 비트 코드 기능을 컴파일 할 때 optnone 속성으로 주석이 달리고 추가 최적화가 수행되지 않는다.

관련 SO 토론 here을 찾아보십시오. 제안 무엇

이 작업을 수행하는 것입니다 LLVM 3.8.0 및 이미 수행 된 것을 (내가 생각하는) 이전 충분를 들어

clang -emit-llvm -O1 -mllvm -disable-llvm-optzns -disable-llvm-passes foo.c -o foo.bc 

.

따라서 (optnone없이) 해당 비트 코드를 얻으면 이미 수행 한 것처럼 opt을 사용할 수 있습니다.

+0

지적 호기심 이제는 모든 optnone 속성을 제거하기위한 변환을 작성하고 싶지만 꽤 끝날 것이라고 생각하지 않습니다. – jvstech

+0

하하, 그렇습니다. 그러나 나는 그 이유에 대해'optnone '이있는 경우에 대해 확신하지 못합니다. – compor