2015-10-07 29 views
1

我有一個指導訪問者實施檢查FCmpInst。在我的IR,我從鐺上一個C++文件生成的幾行:提取LLVM紅外標識符

%2 = load float, float* %x, align 4 
%3 = fcmp ogt float %2, 1.0000e+00 

FCmpInst訪問期間調用getOperand(0)返回上述load指令。然後,如果我在load指令上調用getPointerOperand(),它將指向alloca指令,該指令首先預留%x。我不想要指針 - 相反,我想要標識符名稱「%x」。我們如何從IR中提取這些名稱?我發現在任何指令上調用dump()都會顯示標識符,但是我還沒有找到可以自己提取標識符的API調用。謝謝!

回答

1

您可以在Value上使用getName method

請注意,並非每個值都被命名 - 尤其是,您將無法檢索像%1%2等名稱,因爲這些名稱是在IR寫出時隨時生成的。

+0

是的,我熟悉'getName'方法,但是,正如你所說,它返回空字符串。當你在值上調用'dump()'時,信息就在那裏!那麼,什麼數據結構保持整個字符串?我會很高興採取並解析'%'符號。請記住,我有IR文件,並將其發送到「ModulePass」。 –

+0

你是在'load'指令還是'alloca'指令上調用getName? –

+0

是的,但大多數說明都沒有名字。我決定在執行對代碼的更多分析之前,我的通行證將貫穿整個指令列表並自行分配名稱。我在'AsmWriter'類中看到了[這個操作](http://llvm.org/docs/doxygen/html/AsmWriter_8cpp_source.html#l02688),它顯示了在raw_ostream調用期間被標記的標識符。這至少可以回答我關於「where」標識符存儲的問題:它們是由打印過程實時生成的。 –