簡體   English   中英

如何在不優化的情況下生成 LLVM IR

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM