Changeset View
Changeset View
Standalone View
Standalone View
mlir/test/mlir-tblgen/op-result.td
// RUN: mlir-tblgen -gen-op-defs -I %S/../../include %s | FileCheck %s | // RUN: mlir-tblgen -gen-op-defs -I %S/../../include %s | FileCheck %s | ||||
include "mlir/IR/OpBase.td" | include "mlir/IR/OpBase.td" | ||||
include "mlir/Interfaces/InferTypeOpInterface.td" | include "mlir/Interfaces/InferTypeOpInterface.td" | ||||
def Test_Dialect : Dialect { | def Test_Dialect : Dialect { | ||||
let name = "test"; | let name = "test"; | ||||
} | } | ||||
class NS_Op<string mnemonic, list<OpTrait> traits> : | class NS_Op<string mnemonic, list<OpTrait> traits> : | ||||
Op<Test_Dialect, mnemonic, traits>; | Op<Test_Dialect, mnemonic, traits>; | ||||
def OpA : NS_Op<"one_normal_result_op", []> { | def OpA : NS_Op<"one_normal_result_op", []> { | ||||
let results = (outs I32:$result); | let results = (outs I32:$result); | ||||
} | } | ||||
// CHECK-LABEL: void OpA::build | // CHECK-LABEL: void OpA::build | ||||
// CHECK: ::llvm::ArrayRef<::mlir::Type> resultTypes, ::mlir::ValueRange operands | // CHECK: ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands | ||||
// CHECK: assert(resultTypes.size() == 1u && "mismatched number of return types"); | // CHECK: assert(resultTypes.size() == 1u && "mismatched number of return types"); | ||||
// CHECK-NEXT: odsState.addTypes(resultTypes); | // CHECK-NEXT: odsState.addTypes(resultTypes); | ||||
def OpB : NS_Op<"same_input_output_type_op", [SameOperandsAndResultType]> { | def OpB : NS_Op<"same_input_output_type_op", [SameOperandsAndResultType]> { | ||||
let arguments = (ins I32:$x); | let arguments = (ins I32:$x); | ||||
let results = (outs I32:$y); | let results = (outs I32:$y); | ||||
} | } | ||||
// CHECK-LABEL: OpB definitions | // CHECK-LABEL: OpB definitions | ||||
// CHECK: void OpB::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type y, ::mlir::Value x) | // CHECK: void OpB::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type y, ::mlir::Value x) | ||||
// CHECK: odsState.addTypes(y); | // CHECK: odsState.addTypes(y); | ||||
// CHECK: void OpB::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value x) | // CHECK: void OpB::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value x) | ||||
// CHECK: odsState.addTypes({x.getType()}); | // CHECK: odsState.addTypes({x.getType()}); | ||||
def OpC : NS_Op<"three_normal_result_op", []> { | def OpC : NS_Op<"three_normal_result_op", []> { | ||||
let results = (outs I32:$x, /*unnamed*/I32, I32:$z); | let results = (outs I32:$x, /*unnamed*/I32, I32:$z); | ||||
} | } | ||||
// CHECK-LABEL: OpC definitions | // CHECK-LABEL: OpC definitions | ||||
// CHECK: void OpC::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type x, ::mlir::Type resultType1, ::mlir::Type z) | // CHECK: void OpC::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type x, ::mlir::Type resultType1, ::mlir::Type z) | ||||
// CHECK-NEXT: odsState.addTypes(x) | // CHECK-NEXT: odsState.addTypes(x) | ||||
// CHECK-NEXT: odsState.addTypes(resultType1) | // CHECK-NEXT: odsState.addTypes(resultType1) | ||||
// CHECK-NEXT: odsState.addTypes(z) | // CHECK-NEXT: odsState.addTypes(z) | ||||
// CHECK: void OpC::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::llvm::ArrayRef<::mlir::Type> resultTypes) { | // CHECK: void OpC::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes) { | ||||
// CHECK-NEXT: assert(resultTypes.size() == 3u && "mismatched number of results"); | // CHECK-NEXT: assert(resultTypes.size() == 3u && "mismatched number of results"); | ||||
// CHECK-NEXT: odsState.addTypes(resultTypes); | // CHECK-NEXT: odsState.addTypes(resultTypes); | ||||
def IntegerTypeAttr : TypeAttrBase<"IntegerType", "Integer type attribute">; | def IntegerTypeAttr : TypeAttrBase<"IntegerType", "Integer type attribute">; | ||||
def OpD : NS_Op<"type_attr_as_result_type", [FirstAttrDerivedResultType]> { | def OpD : NS_Op<"type_attr_as_result_type", [FirstAttrDerivedResultType]> { | ||||
let arguments = (ins I32:$x, IntegerTypeAttr:$attr, F32Attr:$f32); | let arguments = (ins I32:$x, IntegerTypeAttr:$attr, F32Attr:$f32); | ||||
let results = (outs AnyTensor:$y); | let results = (outs AnyTensor:$y); | ||||
} | } | ||||
Show All 11 Lines | |||||
// CHECK: void OpE::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) | // CHECK: void OpE::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) | ||||
// CHECK: odsState.addTypes({attr.second.getType()}); | // CHECK: odsState.addTypes({attr.second.getType()}); | ||||
def OpF : NS_Op<"one_variadic_result_op", []> { | def OpF : NS_Op<"one_variadic_result_op", []> { | ||||
let results = (outs Variadic<I32>:$x); | let results = (outs Variadic<I32>:$x); | ||||
} | } | ||||
// CHECK-LABEL: void OpF::build | // CHECK-LABEL: void OpF::build | ||||
// CHECK-SAME: ::llvm::ArrayRef<::mlir::Type> x | // CHECK-SAME: ::mlir::TypeRange x | ||||
// CHECK-NOT: assert | // CHECK-NOT: assert | ||||
// CHECK: odsState.addTypes(x); | // CHECK: odsState.addTypes(x); | ||||
def OpG : NS_Op<"one_normal_and_one_variadic_result_op", []> { | def OpG : NS_Op<"one_normal_and_one_variadic_result_op", []> { | ||||
let results = (outs I32:$x, Variadic<I32>:$y); | let results = (outs I32:$x, Variadic<I32>:$y); | ||||
} | } | ||||
// CHECK-LABEL: OpG definitions | // CHECK-LABEL: OpG definitions | ||||
// CHECK: void OpG::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type x, ::llvm::ArrayRef<::mlir::Type> y) | // CHECK: void OpG::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type x, ::mlir::TypeRange y) | ||||
// CHECK-NEXT: odsState.addTypes(x); | // CHECK-NEXT: odsState.addTypes(x); | ||||
// CHECK-NEXT: odsState.addTypes(y); | // CHECK-NEXT: odsState.addTypes(y); | ||||
// CHECK: void OpG::build | // CHECK: void OpG::build | ||||
// CHECK: ::llvm::ArrayRef<::mlir::Type> resultTypes | // CHECK: ::mlir::TypeRange resultTypes | ||||
// CHECK: assert(resultTypes.size() >= 1u && "mismatched number of return types"); | // CHECK: assert(resultTypes.size() >= 1u && "mismatched number of return types"); | ||||
// CHECK-NEXT: odsState.addTypes(resultTypes); | // CHECK-NEXT: odsState.addTypes(resultTypes); | ||||
def OpI : NS_Op<"mix_variadic_and_normal_results_op", [SameVariadicResultSize]> { | def OpI : NS_Op<"mix_variadic_and_normal_results_op", [SameVariadicResultSize]> { | ||||
let results = (outs Variadic<AnyTensor>:$output1, AnyTensor:$output2, Variadic<AnyTensor>:$output3); | let results = (outs Variadic<AnyTensor>:$output1, AnyTensor:$output2, Variadic<AnyTensor>:$output3); | ||||
} | } | ||||
// CHECK-LABEL: ::mlir::Operation::result_range OpI::output1 | // CHECK-LABEL: ::mlir::Operation::result_range OpI::output1 | ||||
Show All 32 Lines |