From 741ad3ab8e8b65b4efe423555797229d41be19f2 Mon Sep 17 00:00:00 2001 From: Finlay Date: Thu, 10 Oct 2024 08:58:37 +0100 Subject: [PATCH] [mlir][llvmir] Added extra builders for CallInstrinsicOp (#111664) Extra builders for CallIntrinsicOp. This is inspired by the comment from @antiagainst from [here](https://github.com/llvm/llvm-project/pull/108933#issuecomment-2392751569). --- mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td | 7 +++++ mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp | 30 +++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 825b48fb3d4a..000d92f9ea3b 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -1947,6 +1947,13 @@ def LLVM_CallIntrinsicOp attr-dict }]; + let builders = [ + OpBuilder<(ins "StringAttr":$intrin, "ValueRange":$args)>, + OpBuilder<(ins "StringAttr":$intrin, "ValueRange":$args, "FastmathFlagsAttr":$fastMathFlags)>, + OpBuilder<(ins "Type": $resultType, "StringAttr":$intrin, "ValueRange":$args)>, + OpBuilder<(ins "TypeRange": $resultTypes, "StringAttr":$intrin, "ValueRange":$args, "FastmathFlagsAttr":$fastMathFlags)> + ]; + let hasVerifier = 1; } diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index 9e361848f8c0..2c7af8712d42 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -3328,6 +3328,36 @@ LogicalResult CallIntrinsicOp::verify() { return success(); } +void CallIntrinsicOp::build(OpBuilder &builder, OperationState &state, + mlir::StringAttr intrin, mlir::ValueRange args) { + build(builder, state, /*resultTypes=*/TypeRange{}, intrin, args, + FastmathFlagsAttr{}, + /*op_bundle_operands=*/{}); +} + +void CallIntrinsicOp::build(OpBuilder &builder, OperationState &state, + mlir::StringAttr intrin, mlir::ValueRange args, + mlir::LLVM::FastmathFlagsAttr fastMathFlags) { + build(builder, state, /*resultTypes=*/TypeRange{}, intrin, args, + fastMathFlags, + /*op_bundle_operands=*/{}); +} + +void CallIntrinsicOp::build(OpBuilder &builder, OperationState &state, + mlir::Type resultType, mlir::StringAttr intrin, + mlir::ValueRange args) { + build(builder, state, {resultType}, intrin, args, FastmathFlagsAttr{}, + /*op_bundle_operands=*/{}); +} + +void CallIntrinsicOp::build(OpBuilder &builder, OperationState &state, + mlir::TypeRange resultTypes, + mlir::StringAttr intrin, mlir::ValueRange args, + mlir::LLVM::FastmathFlagsAttr fastMathFlags) { + build(builder, state, resultTypes, intrin, args, fastMathFlags, + /*op_bundle_operands=*/{}); +} + //===----------------------------------------------------------------------===// // OpAsmDialectInterface //===----------------------------------------------------------------------===//