---關於函式和指令以及block和指令的操作;
---dynamic casts
---instanceof-of casts
---修改基本塊或者指令
llvm有五種執行時的value的型別操作,其中有三種是比較常用的:
1.isa(v):知道v這個值的動態型別,如果v是t的乙個引用則返回true,否則返回true.
比如:以下主要是判斷對應的指令是不是phinode型別:
count_phis() : functionpass(id) {}
virtual bool runonfunction(function &f)
}return false;
}};
2.cast(v):型別的檢查。
3.v'=dyn_cast(v):把v轉換為v',否則失敗。
把為phinode的指令轉換為pn型別:
virtual bool runonfunction(function &f) }}
return false;
}
1.增加/刪除指令;指令是basicblock中以list的形式存在,無法單獨存在,必須是某個basicblock中,通常我們通過寫pass進行優化和反優化大部分就是操作的指令。
2.增加/刪除基本塊;基本塊(basicblock)是function中以list的形式存放的,無法單獨存在,裡面有很多的指令存在,分為普通指令和terminatorinst指令。
3.增加刪除函式;函式是無數個基本塊組成,使用列表組成,有且僅有乙個entryblcok,是列表中得第乙個basicblock。
舉例:smallvectorworklist,收集到phinode結點的指令,再呼叫 pn->replacealluseswith(pn->getincomin**alue(0)); pn->erasefromparent()在迭代器外進行刪除,不能夠在迭代器內部進行刪除操作。
virtual bool runonfunction(function &f)
} else }}
// eliminate the uses:
while (!worklist.empty())
return cutinstruction;
}
通過本節可以學習到runtime type inference(rtti)三種常見的基本型別操作,以及理解llvm中指令(instructions)、基本塊(basicblock)、以及函式(function)之間的關係和對於它們的基本操作。
參考:
開源一起學習
要想自己學習機器學習,3本 聖經 是一定要看的 花書,西瓜書,和統計學習方法 但不是剛入門就要看的,首先啊,我們必須學好學校教的c語言,對程式設計有乙個初步的了解,其次,我們都知道python的厲害,可以幹很多事,也很出名,這就出現了人人都知道py,但不是人人都懂py的現象。確實要想搞機器學習,你最...
一起學習extjs( )
可以說,extjs是系統類專案最好的ui 前端使用者介面 選擇,特別是自從extjs4.0出來後,不管是 美觀還是效能的提高,及其功能之強大,說它排第一,無可厚非。當然,最近也蠻流行easyui這個輕量級的,據說是國人開發的ui。其實,也是很不錯的。大家可以根據自己專案的情況來進行選擇。然後,我們自...
一起學C 三
第二章 核心c 第一節,第乙個c 程式。第乙個程式成功執行了,我們來看看 都是由什麼組成的,它們都做了些什麼。using system namespace wrox 1.第1行,using system using是關鍵字,想要使用這個功能,就必須使用using這個關鍵字。c 中有很多關鍵字,每乙個...