2014-06-29 58 views

回答

1

您可以編寫函數通,並找到如下函數的名稱:

#include "llvm/Pass.h" 
#include "llvm/IR/Function.h" 
#include "llvm/Support/raw_ostream.h" 

using namespace llvm; 

namespace { 
struct Hello : public FunctionPass { 
static char ID; 
Hello() : FunctionPass(ID) {} 

    virtual bool runOnFunction(Function &F) { 
     errs() << "Hello: "; 
     errs().write_escaped(F.getName()) << '\n'; 
     return false; 
    } 
    }; 
} 

char Hello::ID = 0; 
static RegisterPass<Hello> X("hello", "Hello World Pass", false, false); 

調用此妙傳opt使用opt -hello input.ll,你會得到的所有打印功能的名稱。更改上述代碼中的邏輯以找到您需要的功能。請參閱以下鏈接查看更多細節上寫遍:

http://llvm.org/docs/WritingAnLLVMPass.html

+0

謝謝!你碰巧知道我是否可以儘早發現宏定義?我看了一眼Pass的sublclasses,但沒有看到任何合適的東西。 – RobertJoseph

+1

@RobertJoseph恐怕你不能這樣做,因爲這些傳遞將IR作爲輸入,這反過來意味着前端(例如Clang)已經解析了整個代碼並吐出了IR。請記住,宏被預處理器替換。因此,爲了獲得宏的句柄,您需要使用Clang的解析器模塊。儘管我不是Clang的專家。 – shrm