2012-02-01 3 views
7

this article에 따르면 gcc는 코드를 생성하기 전에 여러 가지 중간 형식을 사용합니다. 나는 GIMPLE 형식이 사용하기 쉬운 가장 쉬운 중간 언어 인 것으로 보이는 3 개의 주소 코드를 사용한다는 것을 읽었습니다. 하지만 중간 코드를 가져 와서 최종 코드를 생성하기 전에 코드를 삽입 할 수있는 도구를 만들어야하므로 좀 더 자세히 설명해야합니다.gcc의 중간 형식으로 재생하기

우선 GIMPLE 형식 코드를 생성하고 파일에 저장할 수있는 방법을 알아야합니다. 그래서 몇 가지 문서와 예제를 찾고 있습니다. 또한, 누군가가 그런 것들을 다루는 경우, 중간 코드에 코드를 삽입하는이 작업의 복잡성을 알 수 있습니까?

+2

이 링크는 http://gcc.gnu.org/wiki/GimpleFrontEnd – MetallicPriest

+0

입니다. 좋은 예가 http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gccint/GIMPLE-Example.html – MetallicPriest

+0

입니다. 코드를 생성하는 방법을 찾고 있다면 llvm을 참조하십시오. 적어도 그것은 훨씬 더 문서화되어 있습니다. –

답변

13

GCC에 대해 plugin을 쓰는 것이 더 쉽습니다. GIMPLE 세대를 연결하여 GCC 내에서 변경하면 저장 중단, 편집 후 GIMPLE 양식에서 컴파일러로 보내야합니다. MELT은 그러한 플러그인 중 하나입니다 (낮은 수준의 표현을 변경하는 것 이상으로 웨이을 제공함). GIMPLE 변경 플러그인에는 멋진 PDF here도 있습니다.

그렇지 않으면 here을 보면 GCC의 닉네임이 어떻게 작동하는지 알 수 있습니다. GIMPLE을 투기의 관점에서 :

당신은 플래그 -fdump 트리 - gimple와 GIMPLE 형태의 C-같은 표현을 덤프 요청할 수 있습니다.

+10

나는 멜트의 주요 개발자 다. 며칠 전 http://gcc-melt.org/GCC-MELT-HiPEAC2012.pdf (http://gcc-melt.org/의 다른 것들도 있습니다 ...)에 새로운 튜토리얼 슬라이드를 추가했습니다. –

5

-fdump-tree-gimple 플래그를 사용하여 모든 파일의 GIMPLE 표현을 쉽게 생성 할 수 있습니다.

플러그인을 작성하려면 GCC에서 패스가 작동하는 방식에 관심이있을 수 있습니다.

-fdump-<ir>-<passname> 

ir이 될 수있는 곳 : 당신은 형태의 플래그와 각 패스의 출력을 볼 수 있습니다

  • tree : Intraprocedural는
  • ipa GIMPLE
  • 에 전달합니다 시저 간은
  • GIMPLE에 전달 rtl : RTL 내 삽관 패스

을 사용하면 모든 덤프를 볼 수 있습니다. -fdump-ipa-all.

-1

나는 -fdump-tree-gimple 플래그를 시도했다. C/C++ 언어에서만 작동하며 Java, Ada, Fortran 및 Objective-C와 같은 다른 언어에서는 사용할 수 없습니다.

+2

질문에 태그가 지정되어 있습니다. C. 다른 언어는 아무 관련이 없습니다. – Mysticial