2011-03-06 3 views
4

CBackend 대상부터 LLVM에 대한 새 백 엔드를 구현하고 있습니다. 최종 목표는 "llc"를 사용하여 입력 C 코드의 소스 변환을 생성하는 것입니다. 그러나이 컨텍스트 내에서 지원되지 않는 많은 최적화가 있습니다. LLVM 오브젝트 코드가 매우 낮기 때문에 실제로 조사중인 내용을 다시 조사해야합니다. 이것은 AST 수준에서 훨씬 더 간단합니다. 그러나 AST 레벨은 Clang 내부 구조이므로 쉽게 연결할 수있는 방법이 없습니다.LLVM, CLang 및 LLC 최적화 패스

LLVM 개체 코드를 검사하고 상위 수준의 흐름을 직접 리버스 엔지니어링해야합니까? (각 백 엔드가이 작업을 수행해야합니까? 낭비입니다.)

답변

6

일반적으로 모든 기능을 리버스 엔지니어링 할 수 없습니다. 따라서 두 가지 가능성이 있습니다 :

  1. clang AST 레벨에서 모든 작업을 수행하십시오.
  2. 입력 소스의 일부 측면을 복구하는 데 도움이되는 추가 정보를 (예 : 메타 데이터를 통해) 전송하십시오.

그러나 실제로는 LLVM IR 수준에서 소스에서 소스로의 변환을해서는 안되며, 주어진 대상에 대해 잘못된 도구입니다. AST 레벨에 확실하게 연결할 수 있습니다. 예 : clang 소스에는 ObjC 코드를 일반 C로 바꾸는 rewriter가 포함되어 있습니다.

+0

제안 해 주셔서 감사합니다. 불행히도,이 문제는 그때 나를 clang 프론트 엔드에 묶는다는 것입니다. LLVM의 한 지점은 프런트 엔드와 백엔드가 분리되어있는 것으로 광고됩니다. 프론트 엔드가 무엇이든 관계없이 변환 작업을 할 수있는 표현이 있다면 좋을 것입니다. –

+1

예, 근원 수준의 작업을하려고합니다. 이 방법은 일부 프론트 엔드 표현을 사용하는 것을 제외하고는 다른 방법을 보지 못합니다. 모든 변환이 IR 레벨, 특히 상위 레벨 변환에서 수행 될 수있는 것은 아닙니다. –

관련 문제