2013-07-24 55 views
4

我想知道所有LLVM IR語句對應代碼鐺特定編譯內。我的雜注有以下結構。鐺添加新的編譯

#pragma markme 
{ 
    stmt1; 
    stmt2; 
} 

我需要知道所有支桿都是開放括號​​和紀念我的附註花括號之間。

我們可以附加一些元數據,這些支桿?如果是的話,任何人都可以指點我一些參考。

我已經搜索谷歌和發現這個

添加編譯處理器,它具有操作界面上的回調。 添加回調的sema實現,該實現在Sema對象中設置了一些內部位。 向'for'語句添加一個新位,指定它是否有#pragma優化設置。 修改codegin以基於該位發出元數據。

可以在任何一個給出更多細節。我使用的是最新的LLVM

(LLVM 3.4)

注:在任何方向任何幫助表示讚賞。我知道llvm可能會做優化來移動陳述。但是,這是我沒意見

+0

如果有人可以告訴我應該在哪裏執行此步驟,將會有幫助「爲'語句添加一個新位,以指定它是否有#pragma優化設置」 – simpleuser

+0

我已經查看了現有代碼並修改了一些代碼。問題是,它編譯正確,但我仍然無法找到元數據附加 – simpleuser

回答

7

注意,這在鐺,它知道#pragma工作要做。 LLVM本身對它們一無所知 - #pragma不是LLVM IR的一部分。

有很多的鐺的lib/CodeGen目錄生成的元數據的例子。這一切都取決於你想要這個元數據出現在哪裏 - 在說明上?在功能上?

對於將元數據附加到指令尋找setMetadata。例如,在lib/CodeGen/CGExpr.cpp中,一些分析元數據被附加到分支。有關放置模塊級元數據,請參閱lib/CodeGen/CodeGenModule.cpp

+0

謝謝你的答覆,我已經檢查過這個。我會重新檢查一次,以確保我沒有遺漏任何東西。 – simpleuser

+0

我檢查了這個。其實,我已經在CGStmt.cpp中寫了一些東西。可能是我錯過了一些東西。它全部編譯正確。但是當我使用clang生成* .ll文件時,我可以看到元數據。如果你不介意你能不能開始聊天。這真的會幫助我。我在該文件中修改的功能是CodeGenFunction :: EmitCompoundStmt – simpleuser

+0

在生成的ll文件中,我看不到任何元數據(由clang -S -emit-llvm生成) – simpleuser