[英]How to generate LLVM IR without optimization
我正在編寫一個 LLVM PASS 來分析寄存器中的信息。 似乎IRBuilder
自動優化了我的代碼,使表達式成為操作數。 例如,我寫下下面的代碼來生成 LLVM IR。
// %reg = getelementptr inbounds ([128 x i256], [128 x i256]* @mstk, i256 0, i256 0
std::vector<llvm::Value*> indices(2, llvm::ConstantInt::get(Type::Int256Ty, 0));
llvm::ArrayRef<llvm::Value *> indicesRef(indices);
llvm::Value* m_sp = m_builder.CreateGEP(conArray, indicesRef, "spPtr");
// store 0, *%m_sp
m_builder.CreateStore(llvm::ConstantInt::get(Type::Int256Ty, 0), m_sp);
預期的 IR 應包含兩個寄存器。 (見下文)
%reg = getelementptr inbounds ([128 x i256], [128 x i256]* @mstk, i256 0, i256 0)
store i256 0, i256* reg
不幸的是,IRBuilder 通過組合寄存器來優化 IR。
store i256 0, i256* getelementptr inbounds ([128 x i256], [128 x i256]* @mstk, i256 0, i256 0)
是否可以禁用 IR 優化? 我已經確保我關閉了所有 PASS。 謝謝。
我通過禁用 IR 生成器的常量文件夾解決了這個問題。 請參閱禁用 LLVM 10 C++ API 的常量折疊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.