프로 시저 간 데이터 흐름 분석 중에 IR의 메모리 관리 시스템에서 현재의 예술 상태는 무엇인지 알고 싶습니다. 분석 중에 메모리에 완전한 코드가 있는지 IR을 알고 싶습니다. 또는 임의의 순간에 IR을로드 및 언로드하기 위해 일부 메모리 관리 기술이 적용됩니다. llvm/gcc 인프라의 맥락에서 어떤 분석을 백만 줄의 코드로 확장하는 것이 가능합니까?정적 분석에서의 중간 표현 (IR) 메모리 관리
1
A
답변
0
전체 프로그램에 대해 IR을 유지하는 것이 문제가있는 것이 맞습니다. 현재의 기술 수준은 GCC와 LLVM에서 전체 프로그램 최적화를 가능하게하는 gold linker입니다. 각 컴파일 단위로 개별적으로 컴파일 및 최적화
: 물론 많은 일반적으로 2007
이후 변경된 있지만 Its early whole-program optimization design draft, 나는 그것이 작동하는 방법의 발견 최선의 설명입니다, 그것은 세 단계가 있습니다 오브젝트 파일 *. 최적화는 프로 시저 간 최적화를 포함 할 수 있지만 컴파일 단위 경계를 넘지 않습니다.
링커는 모든 개체 파일을 분석하고 전체 프로그램에 대한 제어 흐름 그래프를 작성합니다. 이것은 메모리 집약적이지만 관리가 용이합니다. 여기서 전체 기능 코드는 필요하지 않습니다. 그런 다음 링커가 수행해야하는 변환에 대한 결정이 내려집니다.
링커는 단계 (2)에서 결정된 바와 같이 변환을 수행합니다. 이들 각각은 지역화되어 있으므로 전체 프로그램 코드의 제한된 하위 집합 만로드해야합니다.
단계 (1)과 (3)은 병렬로 수행 할 수있는 많은 작업으로 구성됩니다.
* 일반 오브젝트 파일에 대해 컴파일러 IR로 작업 할 때 더 나은 최적화가 활성화됩니다. GCC에서는 IR을 오브젝트 파일에 임베드하여 작동합니다. LLVM에서는 LLVM IR 파일을 객체 파일로 링커에 제공하기 만하면됩니다. 두 경우 모두 링커에 플러그인을 사용하여이 기능을 사용할 수 있습니다.
답변 해 주셔서 감사합니다. 현재 연구중인 주제에 대해 클러스터링 및 파티셔닝을 통해 최소 백만 줄의 콜 그래프를 작성하는 주제에 대한 현재의 예술 상태가 가능했습니다. 여전히 IR에 대한 prpoer 관리 알고리즘에 의한보다 복잡한 프로 시저 간 데이터 흐름 분석을 수행 할 수있는 프레임 워크 또는 문학에 그러한 정보가 존재하는지에 대한 질문이 아직 남아 있습니다. – user3382041