2013-03-21 189 views
4

我正在編寫ModulePass並使用opt -load調用它。我會要求alloca已被提升爲註冊時,我的通行證運行,使用-mem2reg開關選擇。指定我的LLVM傳遞對mem2reg傳遞的依賴關係

有一個link它指示PromoteMemoryToRegsiter通道是一個轉換通行證,因此我的通行證不應該這樣做。這是2010年的一項聲明。這仍然有效嗎?

一個我找到了帖子的建議類似

AU.addRequiredID(PromoteMemoryToRegister::MemoryToRegisterID); 

但反駁我上面鏈接的帖子。

所以我的問題是,如果可能,我如何表達這種依賴關係?一般來說,我如何表達這種傳遞依賴關係?轉換傳球和另一傳球有什麼區別?

回答

5

轉換通過和另一個通過有什麼區別?

轉換通行證是可能使其他通行證的結果無效的通行證。

如何爲我的通行證表達這種依賴關係?

首先,我推薦閱讀the pass-dependency section of the official "how to write a pass" guide。在任何情況下,在轉換通行證之間添加依賴關係的正確方法是在通行證管理器(see the guide section on the pass manager)之前先添加一個,或者如果您只是調用opt,則按所需順序添加所需的所有通行證他們發生,如:

opt -load mypass.so -mem2reg -mypass 
+0

我們使用'opt'和編寫我們自己的實例,它採用的是'PassManager',目前還不能確定會之間來回。如果順序很容易實現,那麼現在就足夠了:) – Jens 2013-03-21 08:27:45