2014-10-30 47 views
2

我想更深入地瞭解llvm中的指令選擇過程,並且我正在逐步調試CodeGenAndEmitDAG函數。在組合步驟之前,我已經打印了一個小功能(見下文) - 上述功能的第一步。在圖中,我看到藍線,看起來它們總是指向「ch」,我認爲這意味着「其他」機器值類型。我不明白的是藍線的含義......這種依賴性是什麼?而且,我對「ch」的含義是否正確?是「其他」嗎? enter image description here什麼機器值類型「其他」意味着在llvm SDnodes

+0

我試圖理解這個節點,線和類型也一樣,你可以請提供任何有用的鏈接或關鍵字。提前致謝。 – 2016-01-04 08:41:07

+1

你可以在llvm代碼中檢查下一個文件:include/llvm/CodeGen/ISDOpcodes.h - 這裏有一些解釋。 – yehudahs 2016-01-04 16:01:18

回答

3

虛線藍色箭頭表示 指令之間的非數據流依賴關係,並在它們之間強制執行特定順序。例如, 可能訪問相同內存的存儲和加載不應重新排序, 儘管它們之間沒有數據依賴關係。在這種情況下,藍色 箭頭用於表示這種隱藏的依賴關係。這些藍色箭頭 消耗Other類型的鏈值(ch)。

每個DAG都有一個Other類型的特殊EntryToken,它爲基本塊的初始鏈值提供 。

考慮下面的例子。注意加載和存儲之間的控件依賴關係(藍色箭頭),因爲它們被允許指向相同的內存。還要注意將兩條指令粘合在一起的紅色箭頭(膠水)。

int foo(int *a, int *b) { 
    a[0] = 42; 
    return b[0]; 
} 

enter image description here

+0

有意義,但是關於copyToReg(0x2efac80 - 加載指令之後)到存儲指令之間的藍線?加載指令確實取決於商店,但加載後的指令需要依賴於加載而不是商店... – yehudahs 2014-11-01 09:55:36