2014-03-05 5 views
5

:같은 간단한 LLVM의 IR에 대한 이해 LLVM의 SelectionDAG

define i32 @test(i32 %X, i32 %Y) { 
    %Z = udiv i32 %X, %Y 
    ret i32 %Z 
    } 

SelectionDAG 그래프가 내가 생각했던 것보다 더 복잡하다 :

image of SelectionDAG graph

가 왜 CopyFromReg 필요, 왜 안 연결 vreg0vreg1udiv으로 직접?

EntryToken에서 GraphRoot 또는 그 반대 방향으로 그래프를 읽는 방법은 무엇입니까?

답변

1

항목 토큰은 함수의 항목이며 부작용이있는 모든 작업을 "연결"(파란색 링크)하는 데 사용됩니다. CopyFromReg 및 CopyToReg는 함수의 호출 규칙을 구현하기 위해 여기에 있다고 생각합니다.

+0

EntryToken이 함수의 항목이라는 증거는 없습니까? SelectionDAG는 함수가 아닌 기본 블록에 대한 질문이므로 질문이 있습니다. – Thomson

+0

주어진 예제에서 함수에는 단 하나의 기본 블록 만 존재합니다. 나는 그가 "그래프를 어떻게 읽어야합니까?"라고 물었을 때 엔트리 토큰이 마지막 순간의 시작과 같은 그의 질문을 이해했습니다. – Joky

2

함수 인자는 특정 규칙을 호출하고 그들은 SelectionDAG (SelectionDAGISel::SelectAllBasicBlocks 호출 SelectionDAGISel::LowerArguments)의 구성 과정에서 저하되고, 아키텍쳐 특정 LowerArguments 보통 SDValue 체인으로 가상 레지스터의 인수를 나타내는 CopyFromReg를 생성 CopyFromReg선택 DAG.

여분 CopyFromReg는 EntryToken에 체인을 유지하고 DebugLoc 같은 RegisterSDNode의 일부는 아니 설계된 다른 정보를 저장하기 위해 부착된다. 여기

가 (파란색 점선 화살표가 누락) CopyFromReg가 부착되지 않은 것을 예입니다

enter image description here

-1

http://llvm.org/docs/doxygen/html/ISDOpcodes_8h_source.html 현재 모든 라벨의 참조를 찾을 수 있습니다

CopyToReg
CopyToReg -이 노드에는 3 개의 피연산자가 있습니다 : 체인,이 값으로 설정할 레지스터 번호 및 값.

CopyFromReg
CopyFromReg -이 노드는 입력 값이이 SelectionDAG의 범위 밖에 정의 된 가상 또는 실제 레지스터임을 나타냅니다. 레지스터는 RegisterSDNode 개체에서 사용할 수 있습니다.

http://llvm.org/docs/doxygen/html/namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a93bc27ca4d9e211c54b0d9efb660f080 매뉴얼.

피씨 매우 미숙 한 사용자입니다.

+0

링크를 게시하기보다는 링크에서 관련 정보를 인용해야합니다. 이렇게하면 링크가 작동하지 않으면 정보가 손실되지 않습니다. –