문제

나는 컴파일러를 위한 내 사용자 지정 언어입니다.으로 읽었는 문서에 코드를 최적화하는 것으로 나타났다 가는 중간 표현의 코드는 이미 형성된다.하지만 나는 아직 시작 쓰 최적화 섹션에서 내 컴파일러에,내가 그것을 통해 내 머리에 보인 것이 바람직하는 최적화 프로그램이 운영하는 구문에 나무하기 전에 변환을 중간 표현입니다.

는 이유 있을 선호하는 방법 중 하나 또는 다른 대부분의 문제는 개인의 취향?

예를 들어,가 if 블록처럼

if ( some_expression ) {
    do_stuff
}

할 수 있다면 그것에 의해 인식하는 컴파일러 some_expression 상 평가를 진실하고 부작용이 없다,그때 제거할 수 있는 계산에 의해 단순히 가지치기 나무에 있습니다.

까지,남녀노소 누구나 좋아합니다 이미 변환 트리는 중간 표현과 같은 어셈블리 틱 목록에의 간단한 지침으로,프로세스의 인식 및 해결을 시나리오를 것(에 내 상상 이후 나는 아직 시도를 구현한다)훨씬 더 복잡합니다.

도움이 되었습니까?

해결책

요즘의 추세입을 최적화와 중간 표현입니다.체크아웃 LLVM 예를 들어:

LLVM 핵심 라이브러리 제공하는 현대적인 소스 및 대상 독립적인 최적화 프로그램과 함께,코드 생성 지원에 대한 많은 인기 Cpu(뿐만 아니라 일부는 더 적은 일반적인 것들!) 이러한 라이브러리 구축되어 잘 지정 코드로 표현으로 알려진 이 중 대표("LLVM IR").LLVM 핵심 라이브러리는 잘 설명하고,그것은 특히 쉽게 자신을 발명 언어(또는 포트는 기존의 컴파일러)를 사용하여 들으로 최적화하고 코드를 생성기입니다.

LLVM 소스를 제공할 수 있습-독립적인 최적화하기 때문에 그것은 수행 그것의 최적화를 통과 코드만 그 후에 나타 LLVM IR.

왜 그것은 훨씬 더 복잡하게 하면 이렇게 할 수 있습니까?그것에 따라 중간 표현입니다.설계 목표 중 하나에 대한 중간 표현하는 것을 촉진하는 다양한 최적화보다 그들이 불필요하게 복잡합니다.모 최적화하는 것을 달성할 수 있습에서 작업하 LLVM IR,예를 들어,이 목록 분석 및 변환을 전달합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top