list<OpTrait> traits = []> :
NVVM_Op<mnemonic, !listconcat(traits, [NoSideEffect])>,
Results<(outs LLVM_Type:$res)>, Arguments<(ins)> {
- string llvmBuilder = "createIntrinsicCall(builder, llvm::Intrinsic::nvvm_"
- # !subst(".","_", mnemonic) # ");";
+ string llvmBuilder = "$res = createIntrinsicCall(builder,"
+ # "llvm::Intrinsic::nvvm_" # !subst(".","_", mnemonic) # ");";
let parser = [{ return parseNVVMSpecialRegisterOp(parser, result); }];
let printer = [{ printNVVMSpecialRegisterOp(p, this->getOperation()); }];
}
Module &mlirModule;
std::unique_ptr<llvm::Module> llvmModule;
+protected:
// Mappings between original and translated values, used for lookups.
llvm::StringMap<llvm::Function *> functionMapping;
llvm::DenseMap<Value *, llvm::Value *> valueMapping;
using namespace mlir;
namespace {
-static void createIntrinsicCall(llvm::IRBuilder<> &builder,
- llvm::Intrinsic::ID intrinsic) {
+static llvm::Value *createIntrinsicCall(llvm::IRBuilder<> &builder,
+ llvm::Intrinsic::ID intrinsic) {
llvm::Module *module = builder.GetInsertBlock()->getModule();
llvm::Function *fn = llvm::Intrinsic::getDeclaration(module, intrinsic, {});
- builder.CreateCall(fn);
+ return builder.CreateCall(fn);
}
class ModuleTranslation : public LLVM::ModuleTranslation {