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. 未檢查角度指令
- 3. ICMP指針和校驗和
- 4. 如何檢查ICMP Ping/Echo中的返回數據包內容?
- 5. LLVM指令* - > getOperand()無法正常工作ICMP
- 6. 檢查DLL是否使用SSE指令
- 7. 檢查點不是碼頭指令
- 8. AngularJS檢查,如果在指令
- 9. 檢查字節碼指令混亂?
- 10. 在運行時檢查機器指令
- 11. 檢查指令是否存在屬性
- 12. 檢查一個HtmlElement是否有指令
- 13. R指令檢查表中的SQL數據庫中存在
- 14. 在JavaScript中的ICMP
- 15. 如何從「#34 PREEMPT Mon Mar 25 14:24:26 SGT 2013」檢索34「
- 16. 檢查AngularJS中的指令字段的有效性
- 17. 指令中的指令
- 18. 指令中的指令
- 19. 在AngularJS中檢查自定義指令的輸入
- 20. Angular中的量角器測試:如何檢查指令屬性?
- 21. 檢查嵌套指令中的已定義函數
- 22. 檢索transcluded指令中的所有ngModels
- 23. angularjs - 指令 - 確定上一個指令之後運行的指令通過檢查屬性
- 24. 查找eclipse中指令所採用的指令週期數 - Android
- 25. 如何檢查AngularJS中是否指定了指令的方法參數?
- 26. ICMP禁用/阻止:如何使用C#檢查Internet連接
- 27. Angular.JS - 一個指令中的指令,在指令中,指令內。範圍問題
- 28. 從html中檢查屬性 - 角度指令測試jasmine karma
- 29. 檢查指令在angularjs中是否有值
- 30. 在python中的ICMP消息