2012-02-02 62 views
1

我正在爲編譯器創建LLVM後端。我想知道是否有任何缺點讓我的後端在文件中寫IR代碼而不是使用API​​。這些API很複雜(特別是如果使用C++以外的語言,在我的情況下是Haskell)並且很難使用。 IR更容易理解。我不需要JIT編譯,輸出代碼將被標準命令行工具編譯爲機器代碼。寫入LLVM源文件與使用API​​

回答

3

紅外格式從版本變爲版本。 API變化的頻率要低得多。過去有些例子顯示IR格式發生了巨大變化,所以您需要投入大量時間來容忍這些變化。

使用API​​是最好的方法。如果有時您不清楚哪些API調用您將需要 - 您可以使用cpp後端作爲靈感的來源:)

2

正如Anton所說,與使用文本IR相比,使用API​​具有明顯的優勢。我只想解決您提出的關於API的複雜性以及Haskell的使用情況。

請注意,LLVM有一個C API,除了更穩定外,它適用於外語界面。使用此API的LLVM存在Python綁定,以及Haskell綁定(Google提供的this is easily found)以及其他語言。

+1

我確實知道Haskell綁定..但它們是限制性的(它們不允許動態數量的函數參數,在Haskell程序編譯時不知道)。我也誠實地發現這個API很醜陋,不直觀。 – aelguindy 2012-02-03 15:10:45

+0

@aelguindy:好吧,你的里程可能會有所不同:-)請記住寫作IR也很平凡,因爲它是一種複雜的語言。即你必須自己跟蹤所有的註冊名稱 - API可以幫你。 – 2012-02-03 15:32:21