2011-03-06 107 views
4

我正在實現一個新的LLVM後端,從CBackend目標開始。 最終目標是使用「llc」生成輸入C代碼的源代碼轉換。 但是,我想要進行一些優化,在這種情況下似乎沒有得到很好的支持。 LLVM目標代碼是非常低的水平,我必須檢查它以重新發現實際正在發生的事情。這在AST級別上要簡單得多。 但是,看起來AST級別是一個Clang內部構造,並且沒有簡單的方法來插入它。LLVM,CLang和LLC優化傳遞

我是否必須檢查LLVM目標代碼並自行反向設計更高級別的流程? (每個後端都必須這樣做嗎?這似乎很浪費!)

回答

6

一般來說,你不能逆向工程。所以,你只有兩種可能性:

  1. 一切都在叮噹AST水平。
  2. 發出附加信息(例如通過元數據),這可能會幫助您恢復輸入源的某些方面。

但實際上,您不應該在LLVM IR級別上進行任何源到源的轉換,它對於給定的目標來說是錯誤的工具。你當然可以插入AST級別。例如。鏗鏘聲源包含一個重寫器,將ObjC代碼轉換爲普通的C.

+0

感謝您的建議。不幸的是,它的問題在於它將我與叮噹前端聯繫起來。 LLVM的一點被標榜爲前端和後端分離。如果有一個代表讓我可以做我的轉變,不管前端如何,那將是非常棒的。 – 2011-03-06 21:03:50

+1

是的,但你正在嘗試做源代碼級的事情。這樣我除了使用一些前端表示法之外沒有看到其他方式。不是所有的轉換都可以在IR級完成,特別是高級別的轉換。 – 2011-03-09 07:28:42