2015-05-28 81 views
7

LLVM項目不區分有符號整數和無符號整數,如here所述。在某些情況下,您需要知道某個特定變量是否應該被解釋爲已簽名或未簽名,例如,當它擴展了大小或在分區中使用時。我對此的解決方案是爲每個描述它是整數還是基數類型的變量保留一個單獨的類型信息。如何區分LLVM中的有符號和無符號整數

不過,我想知道,是不是有辦法在LLVM中「歸類」一種類型?我正在尋找某種可以添加到某種類型的「用戶數據」,但似乎什麼也沒有。這種情況在創建類型時不得不以某種方式發生,因爲在LLVM中只會生成一次相同的類型。因此

我的問題是:

有沒有辦法跟蹤是否爲LLVM基礎架構內簽訂或者無符號整型變量應解釋,或者確實是唯一的方式,讓獨立的信息像我這樣做?

感謝

+4

如果你正在編寫一個編譯器,這通常是你自己維護在前端的信息,與LLVM無關。 –

回答

4

首先,你必須確保,因爲鏘已經處理了使用sdivsrem而不是udevurem適當符號的整數運算,例如,你需要插入額外的類型元數據。

此外,可以利用它來實現一些基於IR中變量訪問的輕量級類型推斷。請注意,像add這樣的操作不需要signdness信息,因爲它基於二補數表示。

否則,我認爲最好的方法是修改前端(Clang)來添加一些自定義的DWARF調試信息。這是一個link,可能會讓你開始。

更新: 如果您的目標是直接在LLVM IR上實施靜態分析。本文可以提供一個徹底的討論。

納瓦斯,J.A.,沙克特,P.,森德,H.,斯塔基,P.J。: 符號性無關的程序分析:精確整數範圍爲低級別的代碼。在:Jhala,R.,Igarashi,A.(編輯)APLAS 2012. LNCS, vol。 7705,第115-130頁。 Springer,Heidelberg(2012)

+1

謝謝,雖然我正在編寫自己的Frontent,但不是爲了C,所以我沒有使用Clang,但我會檢查關於元數據的想法,到目前爲止我沒有太注意它,但會閱讀它來檢查我是否可以這樣使用它 –

相關問題