2017-02-09 7 views
4

프런트 엔드 rustc에서 방출 된 LLVM-IR을 분석하려고합니다. 이 계획은 특정 언어 요소에 대해 IR을 방출하는 것입니다. 요소 및 IR 코드 템플릿 매핑 또는 목록과 같은 목록이 있습니까?방출 된 LLVM IR이 사용하지 않는 기능을 제거하지 못하도록하는 방법이 있습니까?

컴파일러는 방출 된 IR의 사용되지 않는 기능을 wel :로 제거 할만큼 지능적입니다. 콘솔에 무엇인가가 인쇄되지 않으면 컴파일러는 사용 된 모든 기능을 제거합니다.

x이 어디에도 사용되지 않았거나 x을 덮어 쓰는 경우에도 제대로 작동하지 않습니다.

let x = function(); 

방출 된 IR이 모든 기능을 보유하도록 Rust에 일종의 한정자가 있습니까?

+0

[여기] (https://f0rki.gitbooks.io/mapping-high-level-constructs-to-llvm-ir/content/)의 매핑 목록을 찾았습니다 – Bharadwaj

+0

이 목록은 녹, rustc이 실제로이를 따를 것이라는 보장은 없습니다. –

+0

오, 그리고 링크에 감사드립니다; 컴파일러 작성자를 신생시키기에 매우 유용한 리소스! –

답변

4

요소 및 IR 코드 템플릿 매핑 또는 목록이 있습니까?

rustc 코드입니다.

뺨에 혀처럼 보일 수도 있지만 실제로는 유일한 대답입니다.

Rust의 ABI는 더 나은 수행 방법이 나타날 때마다 Rust 개발자가 이러한 종류의 것들을 변경할 수있는 능력을 유지하기를 원하기 때문에 특히 안정적이지 않습니다.

이 등 ...

이 방출 IR은 모든 기능을 유지하도록 녹 규정의 어떤 종류가 있는가, 호출 규칙을, 구조의 메모리 내 표현으로 적용?

기능을 유지하는 가장 간단한 방법은 다음과 같습니다

  • 이 라이브러리로 컴파일 및 기능 pub

그것은 #[inline(never)]을 사용하는 것도 가능하지만,이 스마트로 더 취약 마킹 링커는 함수가 호출되지 않는다는 것을 알 수 있습니다. 기호를 외부에서 사용할 수있게 만들면 링커의 손이 그것을 유지하도록 강제합니다.