19f3f6d7bSStella Laurenzo//===-- python_test_ops.td - Python test Op definitions ----*- tablegen -*-===// 29f3f6d7bSStella Laurenzo// 39f3f6d7bSStella Laurenzo// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 49f3f6d7bSStella Laurenzo// See https://llvm.org/LICENSE.txt for license information. 59f3f6d7bSStella Laurenzo// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 69f3f6d7bSStella Laurenzo// 79f3f6d7bSStella Laurenzo//===----------------------------------------------------------------------===// 89f3f6d7bSStella Laurenzo 99f3f6d7bSStella Laurenzo#ifndef PYTHON_TEST_OPS 109f3f6d7bSStella Laurenzo#define PYTHON_TEST_OPS 119f3f6d7bSStella Laurenzo 129f3f6d7bSStella Laurenzoinclude "mlir/Bindings/Python/Attributes.td" 139f3f6d7bSStella Laurenzoinclude "mlir/IR/OpBase.td" 1414c92070SAlex Zinenkoinclude "mlir/Interfaces/InferTypeOpInterface.td" 159f3f6d7bSStella Laurenzo 169f3f6d7bSStella Laurenzodef Python_Test_Dialect : Dialect { 179f3f6d7bSStella Laurenzo let name = "python_test"; 1814c92070SAlex Zinenko let cppNamespace = "python_test"; 199f3f6d7bSStella Laurenzo} 20*89a92fb3SAlex Zinenko 21*89a92fb3SAlex Zinenkoclass TestType<string name, string typeMnemonic> 22*89a92fb3SAlex Zinenko : TypeDef<Python_Test_Dialect, name> { 23*89a92fb3SAlex Zinenko let mnemonic = typeMnemonic; 24*89a92fb3SAlex Zinenko} 25*89a92fb3SAlex Zinenko 26*89a92fb3SAlex Zinenkoclass TestAttr<string name, string attrMnemonic> 27*89a92fb3SAlex Zinenko : AttrDef<Python_Test_Dialect, name> { 28*89a92fb3SAlex Zinenko let mnemonic = attrMnemonic; 29*89a92fb3SAlex Zinenko} 30*89a92fb3SAlex Zinenko 319f3f6d7bSStella Laurenzoclass TestOp<string mnemonic, list<OpTrait> traits = []> 329f3f6d7bSStella Laurenzo : Op<Python_Test_Dialect, mnemonic, traits>; 339f3f6d7bSStella Laurenzo 34*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 35*89a92fb3SAlex Zinenko// Type definitions. 36*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 37*89a92fb3SAlex Zinenko 38*89a92fb3SAlex Zinenkodef TestType : TestType<"TestType", "test_type">; 39*89a92fb3SAlex Zinenko 40*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 41*89a92fb3SAlex Zinenko// Attribute definitions. 42*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 43*89a92fb3SAlex Zinenko 44*89a92fb3SAlex Zinenkodef TestAttr : TestAttr<"TestAttr", "test_attr">; 45*89a92fb3SAlex Zinenko 46*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 47*89a92fb3SAlex Zinenko// Operation definitions. 48*89a92fb3SAlex Zinenko//===----------------------------------------------------------------------===// 49*89a92fb3SAlex Zinenko 509f3f6d7bSStella Laurenzodef AttributedOp : TestOp<"attributed_op"> { 519f3f6d7bSStella Laurenzo let arguments = (ins I32Attr:$mandatory_i32, 529f3f6d7bSStella Laurenzo OptionalAttr<I32Attr>:$optional_i32, 539f3f6d7bSStella Laurenzo UnitAttr:$unit); 549f3f6d7bSStella Laurenzo} 559f3f6d7bSStella Laurenzo 56b4c93eceSJohn Demmedef PropertyOp : TestOp<"property_op"> { 57b4c93eceSJohn Demme let arguments = (ins I32Attr:$property, 58b4c93eceSJohn Demme I32:$idx); 59b4c93eceSJohn Demme} 60b4c93eceSJohn Demme 6114c92070SAlex Zinenkodef DummyOp : TestOp<"dummy_op"> { 6214c92070SAlex Zinenko} 6314c92070SAlex Zinenko 6414c92070SAlex Zinenkodef InferResultsOp : TestOp<"infer_results_op", [InferTypeOpInterface]> { 6514c92070SAlex Zinenko let arguments = (ins); 6614c92070SAlex Zinenko let results = (outs AnyInteger:$single, AnyInteger:$doubled); 6714c92070SAlex Zinenko 6814c92070SAlex Zinenko let extraClassDeclaration = [{ 6914c92070SAlex Zinenko static ::mlir::LogicalResult inferReturnTypes( 7014c92070SAlex Zinenko ::mlir::MLIRContext *context, ::llvm::Optional<::mlir::Location> location, 7114c92070SAlex Zinenko ::mlir::ValueRange operands, ::mlir::DictionaryAttr attributes, 7214c92070SAlex Zinenko ::mlir::RegionRange regions, 7314c92070SAlex Zinenko ::llvm::SmallVectorImpl<::mlir::Type> &inferredReturnTypes) { 7414c92070SAlex Zinenko ::mlir::Builder b(context); 7514c92070SAlex Zinenko inferredReturnTypes.push_back(b.getI32Type()); 7614c92070SAlex Zinenko inferredReturnTypes.push_back(b.getI64Type()); 7714c92070SAlex Zinenko return ::mlir::success(); 7814c92070SAlex Zinenko } 7914c92070SAlex Zinenko }]; 8014c92070SAlex Zinenko} 8114c92070SAlex Zinenko 822995d29bSAlex Zinenko// If all result types are buildable, the InferTypeOpInterface is implied and is 832995d29bSAlex Zinenko// autogenerated by C++ ODS. 842995d29bSAlex Zinenkodef InferResultsImpliedOp : TestOp<"infer_results_implied_op"> { 852995d29bSAlex Zinenko let results = (outs I32:$integer, F64:$flt, Index:$index); 862995d29bSAlex Zinenko} 872995d29bSAlex Zinenko 882995d29bSAlex Zinenkodef SameOperandAndResultTypeOp : TestOp<"same_operand_and_result_type_op", 892995d29bSAlex Zinenko [SameOperandsAndResultType]> { 902995d29bSAlex Zinenko let arguments = (ins Variadic<AnyType>); 912995d29bSAlex Zinenko let results = (outs AnyType:$one, AnyType:$two); 922995d29bSAlex Zinenko} 932995d29bSAlex Zinenko 942995d29bSAlex Zinenkodef FirstAttrDeriveTypeAttrOp : TestOp<"first_attr_derive_type_attr_op", 952995d29bSAlex Zinenko [FirstAttrDerivedResultType]> { 962995d29bSAlex Zinenko let arguments = (ins AnyType:$input, TypeAttr:$type); 972995d29bSAlex Zinenko let results = (outs AnyType:$one, AnyType:$two); 982995d29bSAlex Zinenko} 992995d29bSAlex Zinenko 1002995d29bSAlex Zinenkodef FirstAttrDeriveAttrOp : TestOp<"first_attr_derive_attr_op", 1012995d29bSAlex Zinenko [FirstAttrDerivedResultType]> { 1022995d29bSAlex Zinenko let arguments = (ins AnyAttr:$iattr); 1032995d29bSAlex Zinenko let results = (outs AnyType:$one, AnyType:$two, AnyType:$three); 1042995d29bSAlex Zinenko} 1052995d29bSAlex Zinenko 10654c99842SMichal Terepetadef OptionalOperandOp : TestOp<"optional_operand_op"> { 10754c99842SMichal Terepeta let arguments = (ins Optional<AnyType>:$input); 10854c99842SMichal Terepeta let results = (outs I32:$result); 10954c99842SMichal Terepeta} 11054c99842SMichal Terepeta 1119f3f6d7bSStella Laurenzo#endif // PYTHON_TEST_OPS 112