假设我有这样一个函数:
// global variables
llvm::LLVMContext* context;
llvm::Module* module;
llvm::IRBuilder<>* builder;
Value* logical_not_codegen(Value* operand) {
return builder->CreateLogicalNotOp(operand);
}
根据文档,
CreateLogicalNotOp
中没有像IRBuilder
这样的功能,所以我的问题是:
IRBuilder
有什么可以用来为逻辑非操作生成 IR 代码吗?
编辑:顺便说一句,我认为
builder.CreateNot()
不是二进制的,我说得对吗?
顺便说一句,这就是你的做法:
auto size_in_bits = rhs->getType()->getPrimitiveSizeInBits();
if (rhs->getType()->isFloatingPointTy()) {
return _builder->CreateFCmpOEQ(rhs, ConstantFP::get(_builder->getFloatTy(), 0.0f));
} else if (rhs->getType()->isSingleValueType()) {
return _builder->CreateICmpEQ(rhs, ConstantInt::get(_builder->getIntNTy((unsigned)size_in_bits), 0, false));
}