我正在构建一个从 armv7m 指令提升到 llvm IR 的升降机。所以我试图将所有 armv7m 指令转换为它们等效的 llvm 指令。我是 llvm 的新手,我想创建和打印一个 llvm 指令。所以从一个简单的添加指令开始,我的代码是:
llvm::LLVMContext TheContext;
llvm::IRBuilder<> Builder(TheContext);
auto* L = ConstantInt::get(Type::getInt32Ty(TheContext), 41);
auto* R = ConstantInt::get(Type::getInt32Ty(TheContext), 42);
llvm::Value* Add=Builder.CreateAdd(L, R, "addtmp");
Add->print(llvm::errs());
我想要的输出是
%addtmp = add i32 41, i32 42;
我得到的输出是
i32 83
第一点,请问如何在不被评估的情况下显示指令?
第二点。正如你在上面的代码中看到的
auto* L = ConstantInt::get(Type::getInt32Ty(TheContext), 41);
auto* R = ConstantInt::get(Type::getInt32Ty(TheContext), 42);
我正在为我的 add 指令创建两个常量 int 作为操作数,现在如何为 add 指令创建一个不是 int 的操作数 ..just 一个变量。你可能会说一个占位符。例如这里的 x 和 y 变量。
%tmp = add i32 %x, %y