3
A
回答
6
直接回答你的問題是將此代碼放在一個自定義的FunctionPass
:
virtual bool runOnFunction(Function &F) {
for (Function::iterator bb = F.begin(), bb_e = F.end(); bb != bb_e; ++bb) {
for (BasicBlock::iterator ii = bb->begin(), ii_e = bb->end(); ii != ii_e; ++ii) {
if (CmpInst *cmpInst = dyn_cast<CmpInst>(&*ii)) {
handle_cmp(cmpInst);
}
}
}
return false;
}
void handle_cmp(CmpInst *cmpInst) {
if (cmpInst->getPredicate() == CmpInst::ICMP_SGT) {
errs() << "In the following instruction, SGT predicate\n";
cmpInst->dump();
}
}
你似乎在問了很多類似的問題,最近,所以我想給一個更普遍一點建議。
您在LLVM IR中看到的每條指令只是存在於LLVM代碼庫中的指令類的文本表示。在這種情況下,icmp
代表ICmpInst
,它是CmpInst
的子類。一旦知道要處理CmpInst
,只需閱讀頭文件中的類聲明即可輕鬆查看如何訪問其屬性。例如,很明顯,該指令的「謂詞」參數表示sgt
和其他謂詞。
但是,您如何知道要查看哪個課程。這很容易用LLVM C++後端來完成,後者可以轉儲構建一些IR所需的等效C++代碼。剛剛從看它,你需要ICmpInst
,也該謂語爲ICMP_SGT
LoadInst* int32_19 = new LoadInst(ptr_argc_addr, "", false, label_entry_15);
int32_19->setAlignment(4);
ICmpInst* int1_cmp = new ICmpInst(*label_entry_15, ICmpInst::ICMP_SGT, int32_19, const_int32_8, "cmp");
BranchInst::Create(label_if_then, label_if_else, int1_cmp, label_entry_15);
所以,你知道的:比如,給這片IR的:
%0 = load i32* %argc.addr, align 4
%cmp = icmp sgt i32 %0, 0
將傾倒。
要在.ll
文件,你只是做運行一些文字IR的C++後端:
llc -march=cpp -cppgen=program irfile.ll
希望這有助於!
0
這裏是你的問題的解決:
ICmpInst *ICC=dyn_cast<ICmpInst>(inst);
llvm::CmpInst::Predicate pr=ICC->getSignedPredicate();
switch(pr){
case CmpInst::ICMP_SGT: errs()<<"------>SGT\n"; break;
case CmpInst::ICMP_SLT: errs()<<"------>SLT\n"; break;
case CmpInst::ICMP_SGE: errs()<<"------>SGE\n"; break;
case CmpInst::ICMP_SLE: errs()<<"------>SLE\n"; break;
}
比方說您有 「出師表」,這是指向該指令(%4 = ICMP SGT 123-132%2%3)的指令指針。在對ICCInst類的一個實例ICC進行dyanamic轉換之後。然後像上面那樣調用getSignedPredicate()它會返回一個謂詞。基於此,有切換案例。希望它能爲你工作。
相關問題
- 1. Angular指令檢查元素?
- 2. ICMP指針和校驗和
- 3. 如何檢查ICMP Ping/Echo中的返回數據包內容?
- 4. 檢查字節碼指令混亂?
- 5. 在運行時檢查機器指令
- 6. AngularJS檢查,如果在指令
- 7. 檢查一個HtmlElement是否有指令
- 8. 檢查指令是否存在屬性
- 9. R指令檢查表中的SQL數據庫中存在
- 10. 指令中的指令
- 11. 在AngularJS中檢查自定義指令的輸入
- 12. 查找eclipse中指令所採用的指令週期數 - Android
- 13. ICMP禁用/阻止:如何使用C#檢查Internet連接
- 14. Angular.JS - 一個指令中的指令,在指令中,指令內。範圍問題
- 15. 檢查指令在angularjs中是否有值
- 16. GDB,檢查指針指針
- 17. 如何調查指令中的範圍?
- 18. 檢測'和','或'指令
- 19. 指令中的嵌套指令
- 20. 指令中的重新連接指令
- 21. 在angularjs指令中的鏈接指令
- 22. 數據指令中的MIPS指令
- 23. 檢查指令是否評估爲特定的HTML元素?
- 24. 檢查是否存在處理指令的容器元素
- 25. Python:如何檢查del指令的調用?
- 26. bash的:如果指令,檢查來自可變行數失敗
- 27. x86上的緩衝區溢出檢查指令
- 28. 通過預處理器指令檢查變量的類型
- 29. 擊:檢查命令
- 30. 檢查有效的指針