【LLVM】Pass之間的依賴

LLVM Pass之間的依賴關(guān)系是由PassManager進行管理控制的。由它來控制并管理pass之間的交互與操作阱飘。如果pass之間存在依賴關(guān)系流礁,例如在執(zhí)行本pass之前必須先執(zhí)行哪些pass,這個是必須要先在本pass中聲明的。要聲明pass的依賴妹蔽,需要實現(xiàn)getAnalusisUsage方法椎眯。

getAnalysisUsage方法

virtual void getAnalysisUsage(AnalysisUsage &Info) const;

在此方法中,要聲明依賴的pass是填充在AnalysisUsage這個對象中的胳岂,具體方法如下:

AnalysisUsage::addRequired<> 
AnalysisUsage::addRequiredTransitive<>

如果本pass執(zhí)行之前需要依賴其它pass的執(zhí)行编整,那么可以使用這兩種方法中的一種來添加需要執(zhí)行的pass。對于單個pass使用AnalysisUsage::addRequired<>添加。
若所需要先執(zhí)行的pass過多形成Analysis鏈步悠,則使用第二種方法:addRequiredTransitive<>添加所有的pass旅择。

考慮另外一種情況,當某一個pass經(jīng)常會被用到時汞斧,我們希望它的結(jié)果可以暫時保存避免經(jīng)常重復進行計算,那么就需要使用下面的方法:
AnalysisUsage::addPreserved<>
它用來暫時保存某個pass的結(jié)果什燕。

getAnalysisUsage代碼示例

//保留了CFG粘勒,但是改變了程序代碼,即必須等LoopInfoWrapperPass執(zhí)行后才會執(zhí)行本pass
void LICM::getAnalysisUsage(AnalysisUsage &AU) const {
  AU.setPreservesCFG();
  AU.addRequired<LoopInfoWrapperPass>();
}

getAnalysis<> and getAnalysisIfAvailable<> 方法

Pass::getAnalysis<>方法提供了一種訪問依賴pass的方式,它使用一些簡單的模板參數(shù)來標志對應的pass里的class屎即,它返回了訪問這些class的接口:

bool LICM::runOnFunction(Function &F) {
  LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
  //...
}

這個方法返回的是LoopInfoWrapperPass對應的getLoopInfo方法的接口庙睡,不過在這之前事富,你需要將LoopInfoWrapperPass聲明為一個addRequired Pass。
module級的pass可以返回一個函數(shù)級的接口:

bool ModuleLevelPass::runOnModule(Module &M) {
  //...
  DominatorTree &DT = getAnalysis<DominatorTree>(Func);
  //...
}

在上面的例子中乘陪,runOnFunctionDominatorTree由passmanager調(diào)用并返回接口給當前的pass统台。
詳細參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市啡邑,隨后出現(xiàn)的幾起案子贱勃,更是在濱河造成了極大的恐慌,老刑警劉巖谤逼,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件募寨,死亡現(xiàn)場離奇詭異,居然都是意外死亡森缠,警方通過查閱死者的電腦和手機拔鹰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贵涵,“玉大人列肢,你說我怎么就攤上這事”雒” “怎么了瓷马?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跨晴。 經(jīng)常有香客問我欧聘,道長,這世上最難降的妖魔是什么端盆? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任怀骤,我火速辦了婚禮,結(jié)果婚禮上焕妙,老公的妹妹穿的比我還像新娘蒋伦。我一直安慰自己,他們只是感情好焚鹊,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布痕届。 她就那樣靜靜地躺著,像睡著了一般末患。 火紅的嫁衣襯著肌膚如雪研叫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天璧针,我揣著相機與錄音嚷炉,去河邊找鬼。 笑死陈莽,一個胖子當著我的面吹牛渤昌,可吹牛的內(nèi)容都是我干的虽抄。 我是一名探鬼主播走搁,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼独柑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了私植?” 一聲冷哼從身側(cè)響起忌栅,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎曲稼,沒想到半個月后索绪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡贫悄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年瑞驱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄坦。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡唤反,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸭津,到底是詐尸還是另有隱情彤侍,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布逆趋,位于F島的核電站盏阶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏闻书。R本人自食惡果不足惜名斟,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魄眉。 院中可真熱鬧蒸眠,春花似錦、人聲如沸杆融。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脾歇。三九已至蒋腮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間藕各,已是汗流浹背池摧。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留激况,地道東北人作彤。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓膘魄,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竭讳。 傳聞我的和親對象是個殘疾皇子创葡,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)绢慢,斷路器灿渴,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong閱讀 22,409評論 1 92
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,393評論 8 265
  • 第一章:Java程序設(shè)計概述 Java和C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能...
    loneyzhou閱讀 1,254評論 1 7
  • 彼時胰舆, 此刻骚露。 筆墨丹青, 濃淡山水缚窿。 四寶怡情棘幸, 撥弄紅塵。 揮毫如鉤倦零, 走龍蛇勢误续。 閑然逸趣, 以存文思光绕。 疏...
    真性閱讀 213評論 0 1