brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.5 KiB · ff16ad8 Raw
695 lines · plain
1// RUN: mlir-tblgen -gen-python-op-bindings -bind-dialect=test -I %S/../../include %s | FileCheck %s2 3include "mlir/IR/OpBase.td"4include "mlir/IR/AttrTypeBase.td"5include "mlir/Interfaces/InferTypeOpInterface.td"6 7// CHECK: @_ods_cext.register_dialect8// CHECK: class _Dialect(_ods_ir.Dialect):9  // CHECK: DIALECT_NAMESPACE = "test"10def Test_Dialect : Dialect {11  let name = "test";12  let cppNamespace = "Test";13}14 15class TestOp<string mnemonic, list<Trait> traits = []> :16    Op<Test_Dialect, mnemonic, traits>;17 18// CHECK: @_ods_cext.register_operation(_Dialect)19// CHECK: class AttrSizedOperandsOp(_ods_ir.OpView):20// CHECK-LABEL: OPERATION_NAME = "test.attr_sized_operands"21// CHECK: _ODS_OPERAND_SEGMENTS = [-1,1,0,]22def AttrSizedOperandsOp : TestOp<"attr_sized_operands",23                                 [AttrSizedOperandSegments]> {24  // CHECK: def __init__(self, variadic1, non_variadic, *, variadic2=None, loc=None, ip=None):25  // CHECK:   operands = []26  // CHECK:   attributes = {}27  // CHECK:   regions = None28  // CHECK:   operands.append(_get_op_results_or_values(variadic1))29  // CHECK:   operands.append(non_variadic)30  // CHECK:   operands.append(variadic2)31  // CHECK:   results = []32  // CHECK:   _ods_successors = None33  // CHECK:   super().__init__(34  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,35  // CHECK:     attributes=attributes, results=results, operands=operands,36  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)37 38  // CHECK: @builtins.property39  // CHECK: def variadic1(self) -> _ods_ir.OpOperandList:40  // CHECK:   operand_range = _ods_segmented_accessor(41  // CHECK:       self.operation.operands,42  // CHECK:       self.operation.attributes["operandSegmentSizes"], 0)43  // CHECK:   return operand_range44  // CHECK-NOT: if len(operand_range)45  //46  // CHECK: @builtins.property47  // CHECK: def non_variadic(self) -> _ods_ir.Value:48  // CHECK:   operand_range = _ods_segmented_accessor(49  // CHECK:       self.operation.operands,50  // CHECK:       self.operation.attributes["operandSegmentSizes"], 1)51  // CHECK:   return operand_range[0]52  //53  // CHECK: @builtins.property54  // CHECK: def variadic2(self) -> _Optional[_ods_ir.Value]:55  // CHECK:   operand_range = _ods_segmented_accessor(56  // CHECK:       self.operation.operands,57  // CHECK:       self.operation.attributes["operandSegmentSizes"], 2)58  // CHECK:   return operand_range[0] if len(operand_range) > 0 else None59  let arguments = (ins Variadic<AnyType>:$variadic1, AnyType:$non_variadic,60                   Optional<AnyType>:$variadic2);61}62 63// CHECK: def attr_sized_operands(variadic1, non_variadic, *, variadic2=None, loc=None, ip=None) -> AttrSizedOperandsOp:64// CHECK:   return AttrSizedOperandsOp(variadic1=variadic1, non_variadic=non_variadic, variadic2=variadic2, loc=loc, ip=ip)65 66// CHECK: @_ods_cext.register_operation(_Dialect)67// CHECK: class AttrSizedResultsOp(_ods_ir.OpView):68// CHECK-LABEL: OPERATION_NAME = "test.attr_sized_results"69// CHECK: _ODS_RESULT_SEGMENTS = [0,1,-1,]70def AttrSizedResultsOp : TestOp<"attr_sized_results",71                               [AttrSizedResultSegments]> {72  // CHECK: def __init__(self, variadic1, non_variadic, variadic2, *, loc=None, ip=None):73  // CHECK:   operands = []74  // CHECK:   attributes = {}75  // CHECK:   regions = None76  // CHECK:   results = []77  // CHECK:   if variadic1 is not None: results.append(variadic1)78  // CHECK:   results.append(non_variadic)79  // CHECK:   results.append(variadic2)80  // CHECK:   _ods_successors = None81  // CHECK:   super().__init__(82  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,83  // CHECK:     attributes=attributes, results=results, operands=operands,84  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)85 86  // CHECK: @builtins.property87  // CHECK: def variadic1(self) -> _Optional[_ods_ir.OpResult]:88  // CHECK:   result_range = _ods_segmented_accessor(89  // CHECK:       self.operation.results,90  // CHECK:       self.operation.attributes["resultSegmentSizes"], 0)91  // CHECK:   return result_range[0] if len(result_range) > 0 else None92  //93  // CHECK: @builtins.property94  // CHECK: def non_variadic(self) -> _ods_ir.OpResult:95  // CHECK:   result_range = _ods_segmented_accessor(96  // CHECK:       self.operation.results,97  // CHECK:       self.operation.attributes["resultSegmentSizes"], 1)98  // CHECK:   return result_range[0]99  //100  // CHECK: @builtins.property101  // CHECK: def variadic2(self) -> _ods_ir.OpResultList:102  // CHECK:   result_range = _ods_segmented_accessor(103  // CHECK:       self.operation.results,104  // CHECK:       self.operation.attributes["resultSegmentSizes"], 2)105  // CHECK:   return result_range106  // CHECK-NOT: if len(result_range)107  let results = (outs Optional<AnyType>:$variadic1, AnyType:$non_variadic,108                 Variadic<AnyType>:$variadic2);109}110 111// CHECK: def attr_sized_results(variadic1, non_variadic, variadic2, *, loc=None, ip=None) -> _Union[_ods_ir.OpResult, _ods_ir.OpResultList, AttrSizedResultsOp]:112// CHECK:   op = AttrSizedResultsOp(variadic1=variadic1, non_variadic=non_variadic, variadic2=variadic2, loc=loc, ip=ip); results = op.results113// CHECK:   return results if len(results) > 1 else (results[0] if len(results) == 1 else op)114 115 116// CHECK: @_ods_cext.register_operation(_Dialect)117// CHECK: class AttributedOp(_ods_ir.OpView):118// CHECK-LABEL: OPERATION_NAME = "test.attributed_op"119// CHECK-NOT: _ODS_OPERAND_SEGMENTS120// CHECK-NOT: _ODS_RESULT_SEGMENTS121def AttributedOp : TestOp<"attributed_op"> {122  // CHECK: def __init__(self, i32attr, in_, *, optionalF32Attr=None, unitAttr=None, loc=None, ip=None):123  // CHECK:   operands = []124  // CHECK:   attributes = {}125  // CHECK:   regions = None126  // CHECK:   attributes["i32attr"] = (i32attr if (127  // CHECK-NEXT:   isinstance(i32attr, _ods_ir.Attribute) or128  // CHECK-NEXT:   not _ods_ir.AttrBuilder.contains('I32Attr')129  // CHECK-NEXT:   _ods_ir.AttrBuilder.get('I32Attr')(i32attr, context=_ods_context)130  // CHECK:   if optionalF32Attr is not None: attributes["optionalF32Attr"] = (optionalF32Attr131  // CHECK:   if bool(unitAttr): attributes["unitAttr"] = _ods_ir.UnitAttr.get(132  // CHECK:     _ods_get_default_loc_context(loc))133  // CHECK:   attributes["in"] = (in_134  // CHECK:   results = []135  // CHECK:   _ods_successors = None136  // CHECK:   super().__init__(137  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,138  // CHECK:     attributes=attributes, results=results, operands=operands,139  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)140 141  // CHECK: @builtins.property142  // CHECK: def i32attr(self) -> _ods_ir.IntegerAttr:143  // CHECK:   return self.operation.attributes["i32attr"]144 145  // CHECK: @builtins.property146  // CHECK: def optionalF32Attr(self) -> _Optional[_ods_ir.FloatAttr]:147  // CHECK:   if "optionalF32Attr" not in self.operation.attributes:148  // CHECK:     return None149  // CHECK:   return self.operation.attributes["optionalF32Attr"]150 151  // CHECK: @builtins.property152  // CHECK: def unitAttr(self) -> bool:153  // CHECK:   return "unitAttr" in self.operation.attributes154 155  // CHECK: @builtins.property156  // CHECK: def in_(self) -> _ods_ir.IntegerAttr:157  // CHECK:   return self.operation.attributes["in"]158 159  let arguments = (ins I32Attr:$i32attr, OptionalAttr<F32Attr>:$optionalF32Attr,160                   UnitAttr:$unitAttr, I32Attr:$in);161}162 163// CHECK: def attributed_op(i32attr, in_, *, optional_f32_attr=None, unit_attr=None, loc=None, ip=None) -> AttributedOp:164// CHECK:     return AttributedOp(i32attr=i32attr, in_=in_, optionalF32Attr=optional_f32_attr, unitAttr=unit_attr, loc=loc, ip=ip)165 166// CHECK: @_ods_cext.register_operation(_Dialect)167// CHECK: class AttributedOpWithOperands(_ods_ir.OpView):168// CHECK-LABEL: OPERATION_NAME = "test.attributed_op_with_operands"169// CHECK-NOT: _ODS_OPERAND_SEGMENTS170// CHECK-NOT: _ODS_RESULT_SEGMENTS171def AttributedOpWithOperands : TestOp<"attributed_op_with_operands"> {172  // CHECK: def __init__(self, _gen_arg_0, _gen_arg_2, *, in_=None, is_=None, loc=None, ip=None):173  // CHECK:   operands = []174  // CHECK:   attributes = {}175  // CHECK:   regions = None176  // CHECK:   operands.append(_gen_arg_0)177  // CHECK:   operands.append(_gen_arg_2)178  // CHECK:   if bool(in_): attributes["in"] = _ods_ir.UnitAttr.get(179  // CHECK:     _ods_get_default_loc_context(loc))180  // CHECK:   if is_ is not None: attributes["is"] = (is_181  // CHECK:   results = []182  // CHECK:   _ods_successors = None183  // CHECK:   super().__init__(184  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,185  // CHECK:     attributes=attributes, results=results, operands=operands,186  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)187 188  // CHECK: @builtins.property189  // CHECK: def in_(self) -> bool:190  // CHECK:   return "in" in self.operation.attributes191 192  // CHECK: @builtins.property193  // CHECK: def is_(self) -> _Optional[_ods_ir.FloatAttr]:194  // CHECK:   if "is" not in self.operation.attributes:195  // CHECK:     return None196  // CHECK:   return self.operation.attributes["is"]197  let arguments = (ins I32, UnitAttr:$in, F32, OptionalAttr<F32Attr>:$is);198}199 200// CHECK: def attributed_op_with_operands(_gen_arg_0, _gen_arg_2, *, in_=None, is_=None, loc=None, ip=None) -> AttributedOpWithOperands201// CHECK:   return AttributedOpWithOperands(_gen_arg_0=_gen_arg_0, _gen_arg_2=_gen_arg_2, in_=in_, is_=is_, loc=loc, ip=ip)202 203// CHECK: @_ods_cext.register_operation(_Dialect)204// CHECK: class DefaultValuedAttrsOp(_ods_ir.OpView):205// CHECK-LABEL: OPERATION_NAME = "test.default_valued_attrs"206def DefaultValuedAttrsOp : TestOp<"default_valued_attrs"> {207  // CHECK: def __init__(self, *, arr=None, unsupported=None, loc=None, ip=None):208  // CHECK:   operands = []209  // CHECK:   attributes = {}210  // CHECK:   regions = None211  // CHECK:   if arr is not None: attributes["arr"] = (arr212  // CHECK:   if unsupported is not None: attributes["unsupported"] = (unsupported213  // CHECK:   results = []214  // CHECK:   _ods_successors = None215  // CHECK:   super().__init__(216  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,217  // CHECK:     attributes=attributes, results=results, operands=operands,218  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)219 220  let arguments = (ins DefaultValuedAttr<I64ArrayAttr, "{}">:$arr,221                       DefaultValuedAttr<I64ArrayAttr, "dummy_func()">:$unsupported);222  let results = (outs);223}224 225// CHECK: def default_valued_attrs(*, arr=None, unsupported=None, loc=None, ip=None) -> DefaultValuedAttrsOp:226// CHECK:   return DefaultValuedAttrsOp(arr=arr, unsupported=unsupported, loc=loc, ip=ip)227 228// CHECK-LABEL: OPERATION_NAME = "test.derive_result_types_op"229def DeriveResultTypesOp : TestOp<"derive_result_types_op", [FirstAttrDerivedResultType]> {230  // CHECK: def __init__(self, type_, *, results=None, loc=None, ip=None):231  // CHECK:   operands = []232  // CHECK:   if results is None:233  // CHECK:     _ods_result_type_source_attr = attributes["type"]234  // CHECK:     _ods_derived_result_type = (235  // CHECK:       _ods_ir.TypeAttr(_ods_result_type_source_attr).value236  // CHECK:       if _ods_ir.TypeAttr.isinstance(_ods_result_type_source_attr) else237  // CHECK:       _ods_result_type_source_attr.type)238  // CHECK:     results = [_ods_derived_result_type] * 2239  let arguments = (ins TypeAttr:$type);240  let results = (outs AnyType:$res, AnyType);241}242 243// CHECK: def derive_result_types_op(type_, *, results=None, loc=None, ip=None) -> _ods_ir.OpResultList:244// CHECK:   return DeriveResultTypesOp(type_=type_, results=results, loc=loc, ip=ip).results245 246// CHECK-LABEL: OPERATION_NAME = "test.derive_result_types_variadic_op"247def DeriveResultTypesVariadicOp : TestOp<"derive_result_types_variadic_op", [FirstAttrDerivedResultType]> {248  // CHECK: def __init__(self, res, _gen_res_1, type_, *, loc=None, ip=None):249  let arguments = (ins TypeAttr:$type);250  let results = (outs AnyType:$res, Variadic<AnyType>);251}252 253// CHECK: def derive_result_types_variadic_op(res, _gen_res_1, type_, *, loc=None, ip=None) -> _Union[_ods_ir.OpResult, _ods_ir.OpResultList, DeriveResultTypesVariadicOp]:254// CHECK:   op = DeriveResultTypesVariadicOp(res=res, _gen_res_1=_gen_res_1, type_=type_, loc=loc, ip=ip); results = op.results255// CHECK:   return results if len(results) > 1 else (results[0] if len(results) == 1 else op)256 257 258// CHECK: class DescriptionOp(_ods_ir.OpView):259// CHECK:   r"""260// CHECK:   This is a long description.261// CHECK:   It has multiple lines.262// CHECK:   A code block (to test the indent).263// CHECK:   ```mlir264// CHECK:   test.loop {265// CHECK:     test.yield266// CHECK:   }267// CHECK:   ```268// CHECK:   Add \"\"\" will not terminate the description.269// CHECK:   """270def DescriptionOp : TestOp<"description"> {271  let description = [{272    This is a long description.273    It has multiple lines.274 275    A code block (to test the indent).276    ```mlir277    test.loop {278      test.yield279    }280    ```281    Add """ will not terminate the description.282  }];283}284 285// CHECK: @_ods_cext.register_operation(_Dialect)286// CHECK: class EmptyOp(_ods_ir.OpView):287// CHECK-LABEL: OPERATION_NAME = "test.empty"288def EmptyOp : TestOp<"empty">;289  // CHECK: def __init__(self, *, loc=None, ip=None):290  // CHECK:   operands = []291  // CHECK:   attributes = {}292  // CHECK:   regions = None293  // CHECK:   results = []294  // CHECK:   _ods_successors = None295  // CHECK:   super().__init__(296  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,297  // CHECK:     attributes=attributes, results=results, operands=operands,298  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)299 300// CHECK: def empty(*, loc=None, ip=None) -> EmptyOp:301// CHECK:   return EmptyOp(loc=loc, ip=ip)302 303// CHECK-LABEL: OPERATION_NAME = "test.infer_result_types_implied_op"304def InferResultTypesImpliedOp : TestOp<"infer_result_types_implied_op"> {305  // CHECK:  def __init__(self, *, results=None, loc=None, ip=None):306  // CHECK:    _ods_context = _ods_get_default_loc_context(loc)307  // CHECK:   super().__init__(308  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,309  // CHECK:     attributes=attributes, results=results, operands=operands,310  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)311  let results = (outs I32:$i32, F32:$f32);312}313 314// CHECK: def infer_result_types_implied_op(*, results=None, loc=None, ip=None) -> _ods_ir.OpResultList:315// CHECK:   return InferResultTypesImpliedOp(results=results, loc=loc, ip=ip).results316 317// CHECK-LABEL: OPERATION_NAME = "test.infer_result_types_op"318def InferResultTypesOp : TestOp<"infer_result_types_op", [InferTypeOpInterface]> {319  // CHECK:  def __init__(self, *, results=None, loc=None, ip=None):320  // CHECK:    operands = []321  // CHECK:   super().__init__(322  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS,323  // CHECK:     attributes=attributes, results=results, operands=operands,324  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)325  let results = (outs AnyType, AnyType, AnyType);326}327 328// CHECK: def infer_result_types_op(*, results=None, loc=None, ip=None) -> _ods_ir.OpResultList:329// CHECK:   return InferResultTypesOp(results=results, loc=loc, ip=ip).results330 331// CHECK: @_ods_cext.register_operation(_Dialect)332// CHECK: class MissingNamesOp(_ods_ir.OpView):333// CHECK-LABEL: OPERATION_NAME = "test.missing_names"334def MissingNamesOp : TestOp<"missing_names"> {335  // CHECK: def __init__(self, i32, _gen_res_1, i64, _gen_arg_0, f32, _gen_arg_2, *, loc=None, ip=None):336  // CHECK:   operands = []337  // CHECK:   attributes = {}338  // CHECK:   regions = None339  // CHECK:   operands.append(_gen_arg_0)340  // CHECK:   operands.append(f32)341  // CHECK:   operands.append(_gen_arg_2)342  // CHECK:   results = []343  // CHECK:   results.append(i32)344  // CHECK:   results.append(_gen_res_1)345  // CHECK:   results.append(i64)346  // CHECK:   _ods_successors = None347  // CHECK:   super().__init__(348  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS349  // CHECK:     attributes=attributes, results=results, operands=operands,350  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)351 352  // CHECK: @builtins.property353  // CHECK: def f32(self) -> _ods_ir.Value[_ods_ir.FloatType]:354  // CHECK:   return self.operation.operands[1]355  let arguments = (ins I32, F32:$f32, I64);356 357  // CHECK: @builtins.property358  // CHECK: def i32(self) -> _ods_ir.OpResult[_ods_ir.IntegerType]:359  // CHECK:   return self.operation.results[0]360  //361  // CHECK: @builtins.property362  // CHECK: def i64(self) -> _ods_ir.OpResult[_ods_ir.IntegerType]:363  // CHECK:   return self.operation.results[2]364  let results = (outs I32:$i32, AnyFloat, I64:$i64);365}366 367// CHECK: def missing_names(i32, _gen_res_1, i64, _gen_arg_0, f32, _gen_arg_2, *, loc=None, ip=None) -> _ods_ir.OpResultList:368// CHECK:   return MissingNamesOp(i32=i32, _gen_res_1=_gen_res_1, i64=i64, _gen_arg_0=_gen_arg_0, f32=f32, _gen_arg_2=_gen_arg_2, loc=loc, ip=ip).results369 370// CHECK: @_ods_cext.register_operation(_Dialect)371// CHECK: class OneOptionalOperandOp(_ods_ir.OpView):372// CHECK-LABEL: OPERATION_NAME = "test.one_optional_operand"373// CHECK-NOT: _ODS_OPERAND_SEGMENTS374// CHECK-NOT: _ODS_RESULT_SEGMENTS375def OneOptionalOperandOp : TestOp<"one_optional_operand"> {376  let arguments = (ins AnyType:$non_optional, Optional<AnyType>:$optional);377  // CHECK: def __init__(self, non_optional, *, optional=None, loc=None, ip=None):378  // CHECK:   operands = []379  // CHECK:   attributes = {}380  // CHECK:   regions = None381  // CHECK:   operands.append(non_optional)382  // CHECK:   if optional is not None: operands.append(optional)383  // CHECK:   results = []384  // CHECK:   _ods_successors = None385  // CHECK:   super().__init__(386  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS387  // CHECK:     attributes=attributes, results=results, operands=operands,388  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)389 390  // CHECK: @builtins.property391  // CHECK: def non_optional(self) -> _ods_ir.Value:392  // CHECK:   return self.operation.operands[0]393 394  // CHECK: @builtins.property395  // CHECK: def optional(self) -> _Optional[_ods_ir.Value]:396  // CHECK:   return None if len(self.operation.operands) < 2 else self.operation.operands[1]397}398 399// CHECK: def one_optional_operand(non_optional, *, optional=None, loc=None, ip=None) -> OneOptionalOperandOp:400// CHECK:   return OneOptionalOperandOp(non_optional=non_optional, optional=optional, loc=loc, ip=ip)401 402// CHECK: @_ods_cext.register_operation(_Dialect)403// CHECK: class OneVariadicOperandOp(_ods_ir.OpView):404// CHECK-LABEL: OPERATION_NAME = "test.one_variadic_operand"405// CHECK-NOT: _ODS_OPERAND_SEGMENTS406// CHECK-NOT: _ODS_RESULT_SEGMENTS407def OneVariadicOperandOp : TestOp<"one_variadic_operand"> {408  // CHECK: def __init__(self, non_variadic, variadic, *, loc=None, ip=None):409  // CHECK:   operands = []410  // CHECK:   attributes = {}411  // CHECK:   regions = None412  // CHECK:   operands.append(non_variadic)413  // CHECK:   operands.extend(_get_op_results_or_values(variadic))414  // CHECK:   results = []415  // CHECK:   _ods_successors = None416  // CHECK:   super().__init__(417  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS418  // CHECK:     attributes=attributes, results=results, operands=operands,419  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)420 421  // CHECK: @builtins.property422  // CHECK: def non_variadic(self) -> _ods_ir.Value:423  // CHECK:   return self.operation.operands[0]424  //425  // CHECK: @builtins.property426  // CHECK: def variadic(self) -> _ods_ir.OpOperandList:427  // CHECK:   _ods_variadic_group_length = len(self.operation.operands) - 2 + 1428  // CHECK:   return self.operation.operands[1:1 + _ods_variadic_group_length]429  let arguments = (ins AnyType:$non_variadic, Variadic<AnyType>:$variadic);430}431 432// CHECK: def one_variadic_operand(non_variadic, variadic, *, loc=None, ip=None) -> OneVariadicOperandOp:433// CHECK:   return OneVariadicOperandOp(non_variadic=non_variadic, variadic=variadic, loc=loc, ip=ip)434 435// CHECK: @_ods_cext.register_operation(_Dialect)436// CHECK: class OneVariadicResultOp(_ods_ir.OpView):437// CHECK-LABEL: OPERATION_NAME = "test.one_variadic_result"438// CHECK-NOT: _ODS_OPERAND_SEGMENTS439// CHECK-NOT: _ODS_RESULT_SEGMENTS440def OneVariadicResultOp : TestOp<"one_variadic_result"> {441  // CHECK: def __init__(self, variadic, non_variadic, *, loc=None, ip=None):442  // CHECK:   operands = []443  // CHECK:   attributes = {}444  // CHECK:   regions = None445  // CHECK:   results = []446  // CHECK:   results.extend(variadic)447  // CHECK:   results.append(non_variadic)448  // CHECK:   _ods_successors = None449  // CHECK:   super().__init__(450  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS451  // CHECK:     attributes=attributes, results=results, operands=operands,452  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)453 454  // CHECK: @builtins.property455  // CHECK: def variadic(self) -> _ods_ir.OpResultList:456  // CHECK:   _ods_variadic_group_length = len(self.operation.results) - 2 + 1457  // CHECK:   return self.operation.results[0:0 + _ods_variadic_group_length]458  //459  // CHECK: @builtins.property460  // CHECK: def non_variadic(self) -> _ods_ir.OpResult:461  // CHECK:   _ods_variadic_group_length = len(self.operation.results) - 2 + 1462  // CHECK:   return self.operation.results[1 + _ods_variadic_group_length - 1]463  let results = (outs Variadic<AnyType>:$variadic, AnyType:$non_variadic);464}465 466// CHECK: def one_variadic_result(variadic, non_variadic, *, loc=None, ip=None) -> _Union[_ods_ir.OpResult, _ods_ir.OpResultList, OneVariadicResultOp]:467// CHECK:   op = OneVariadicResultOp(variadic=variadic, non_variadic=non_variadic, loc=loc, ip=ip); results = op.results468// CHECK:   return results if len(results) > 1 else (results[0] if len(results) == 1 else op)469 470// CHECK: @_ods_cext.register_operation(_Dialect)471// CHECK: class PythonKeywordOp(_ods_ir.OpView):472// CHECK-LABEL: OPERATION_NAME = "test.python_keyword"473def PythonKeywordOp : TestOp<"python_keyword"> {474  // CHECK: def __init__(self, in_, *, loc=None, ip=None):475  // CHECK:   operands = []476  // CHECK:   attributes = {}477  // CHECK:   regions = None478  // CHECK:   operands.append(in_)479  // CHECK:   results = []480  // CHECK:   _ods_successors = None481  // CHECK:   super().__init__(482  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS483  // CHECK:     attributes=attributes, results=results, operands=operands,484  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)485 486  // CHECK: @builtins.property487  // CHECK: def in_(self) -> _ods_ir.Value:488  // CHECK:   return self.operation.operands[0]489  let arguments = (ins AnyType:$in);490}491 492// CHECK: def python_keyword(in_, *, loc=None, ip=None) -> PythonKeywordOp:493// CHECK:   return PythonKeywordOp(in_=in_, loc=loc, ip=ip)494 495// CHECK-LABEL: OPERATION_NAME = "test.same_results"496def SameResultsOp : TestOp<"same_results", [SameOperandsAndResultType]> {497  // CHECK: def __init__(self, in1, in2, *, results=None, loc=None, ip=None):498  // CHECK: operands = []499  // CHECK: operands.append500  // CHECK: if results is None: results = [operands[0].type] * 1501  let arguments = (ins AnyType:$in1, AnyType:$in2);502  let results = (outs AnyType:$res);503}504 505// CHECK: def same_results(in1, in2, *, results=None, loc=None, ip=None) -> _ods_ir.OpResult:506// CHECK:   return SameResultsOp(in1=in1, in2=in2, results=results, loc=loc, ip=ip).result507 508// CHECK-LABEL: OPERATION_NAME = "test.same_results_variadic"509def SameResultsVariadicOp : TestOp<"same_results_variadic", [SameOperandsAndResultType]> {510  // CHECK: def __init__(self, res, in1, in2, *, loc=None, ip=None):511  let arguments = (ins AnyType:$in1, AnyType:$in2);512  let results = (outs Variadic<AnyType>:$res);513}514 515// CHECK: def same_results_variadic(res, in1, in2, *, loc=None, ip=None) -> _Union[_ods_ir.OpResult, _ods_ir.OpResultList, SameResultsVariadicOp]:516// CHECK:   op = SameResultsVariadicOp(res=res, in1=in1, in2=in2, loc=loc, ip=ip); results = op.results517// CHECK:   return results if len(results) > 1 else (results[0] if len(results) == 1 else op)518 519 520// CHECK: @_ods_cext.register_operation(_Dialect)521// CHECK: class SameVariadicOperandSizeOp(_ods_ir.OpView):522// CHECK-LABEL: OPERATION_NAME = "test.same_variadic_operand"523def SameVariadicOperandSizeOp : TestOp<"same_variadic_operand",524                                       [SameVariadicOperandSize]> {525  // CHECK: @builtins.property526  // CHECK: def variadic1(self) -> _ods_ir.OpOperandList:527  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.operands, 1, 2, 0, 0)528  // CHECK:   return self.operation.operands[start:start + elements_per_group]529  //530  // CHECK: @builtins.property531  // CHECK: def non_variadic(self) -> _ods_ir.Value:532  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.operands, 1, 2, 0, 1)533  // CHECK:   return self.operation.operands[start]534  //535  // CHECK: @builtins.property536  // CHECK: def variadic2(self) -> _ods_ir.OpOperandList:537  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.operands, 1, 2, 1, 1)538  // CHECK:   return self.operation.operands[start:start + elements_per_group]539  let arguments = (ins Variadic<AnyType>:$variadic1, AnyType:$non_variadic,540                   Variadic<AnyType>:$variadic2);541}542 543// CHECK: def same_variadic_operand(variadic1, non_variadic, variadic2, *, loc=None, ip=None) -> SameVariadicOperandSizeOp:544// CHECK:   return SameVariadicOperandSizeOp(variadic1=variadic1, non_variadic=non_variadic, variadic2=variadic2, loc=loc, ip=ip)545 546// CHECK: @_ods_cext.register_operation(_Dialect)547// CHECK: class SameVariadicResultSizeOp(_ods_ir.OpView):548// CHECK-LABEL: OPERATION_NAME = "test.same_variadic_result"549def SameVariadicResultSizeOp : TestOp<"same_variadic_result",550                                      [SameVariadicResultSize]> {551  // CHECK: @builtins.property552  // CHECK: def variadic1(self) -> _ods_ir.OpResultList:553  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.results, 1, 2, 0, 0)554  // CHECK:   return self.operation.results[start:start + elements_per_group]555  //556  // CHECK: @builtins.property557  // CHECK: def non_variadic(self) -> _ods_ir.OpResult:558  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.results, 1, 2, 0, 1)559  // CHECK:   return self.operation.results[start]560  //561  // CHECK: @builtins.property562  // CHECK: def variadic2(self) -> _ods_ir.OpResultList:563  // CHECK:   start, elements_per_group = _ods_equally_sized_accessor(self.operation.results, 1, 2, 1, 1)564  // CHECK:   return self.operation.results[start:start + elements_per_group]565  let results = (outs Variadic<AnyType>:$variadic1, AnyType:$non_variadic,566                 Variadic<AnyType>:$variadic2);567}568 569// CHECK: def same_variadic_result(variadic1, non_variadic, variadic2, *, loc=None, ip=None) -> _Union[_ods_ir.OpResult, _ods_ir.OpResultList, SameVariadicResultSizeOp]:570// CHECK:   op = SameVariadicResultSizeOp(variadic1=variadic1, non_variadic=non_variadic, variadic2=variadic2, loc=loc, ip=ip); results = op.results571// CHECK:   return results if len(results) > 1 else (results[0] if len(results) == 1 else op)572 573// CHECK: @_ods_cext.register_operation(_Dialect)574// CHECK: class SimpleOp(_ods_ir.OpView):575// CHECK-LABEL: OPERATION_NAME = "test.simple"576def SimpleOp : TestOp<"simple"> {577  // CHECK: def __init__(self, i64, f64, i32, f32, *, loc=None, ip=None):578  // CHECK:   operands = []579  // CHECK:   attributes = {}580  // CHECK:   regions = None581  // CHECK:   operands.append(i32)582  // CHECK:   operands.append(f32)583  // CHECK:   results = []584  // CHECK:   results.append(i64)585  // CHECK:   results.append(f64)586  // CHECK:   _ods_successors = None587  // CHECK:   super().__init__(588  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS589  // CHECK:     attributes=attributes, results=results, operands=operands,590  // CHECK:     successors=_ods_successors, regions=regions, loc=loc, ip=ip)591 592  // CHECK: @builtins.property593  // CHECK: def i32(self) -> _ods_ir.Value[_ods_ir.IntegerType]:594  // CHECK:   return self.operation.operands[0]595  //596  // CHECK: @builtins.property597  // CHECK: def f32(self) -> _ods_ir.Value[_ods_ir.FloatType]:598  // CHECK:   return self.operation.operands[1]599  let arguments = (ins I32:$i32, F32:$f32);600 601  // CHECK: @builtins.property602  // CHECK: def i64(self) -> _ods_ir.OpResult[_ods_ir.IntegerType]:603  // CHECK:   return self.operation.results[0]604  //605  // CHECK: @builtins.property606  // CHECK: def f64(self) -> _ods_ir.OpResult[_ods_ir.FloatType]:607  // CHECK:   return self.operation.results[1]608  let results = (outs I64:$i64, AnyFloat:$f64);609}610 611// CHECK: def simple(i64, f64, i32, f32, *, loc=None, ip=None) -> _ods_ir.OpResultList:612// CHECK:   return SimpleOp(i64=i64, f64=f64, i32=i32, f32=f32, loc=loc, ip=ip).results613 614// CHECK: class VariadicAndNormalRegionOp(_ods_ir.OpView):615// CHECK-LABEL: OPERATION_NAME = "test.variadic_and_normal_region"616def VariadicAndNormalRegionOp : TestOp<"variadic_and_normal_region"> {617  // CHECK:  def __init__(self, num_variadic, *, loc=None, ip=None):618  // CHECK:    operands = []619  // CHECK:    attributes = {}620  // CHECK:    regions = None621  // CHECK:    results = []622  // CHECK:    _ods_successors = None623  // CHECK:    regions = 2 + num_variadic624  // CHECK:    super().__init__(625  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS626  // CHECK:      attributes=attributes, results=results, operands=operands,627  // CHECK:      successors=_ods_successors, regions=regions, loc=loc, ip=ip)628  let regions = (region AnyRegion:$region, AnyRegion, VariadicRegion<AnyRegion>:$variadic);629 630  // CHECK:  @builtins.property631  // CHECK:  def region(self) -> _ods_ir.Region:632  // CHECK:    return self.regions[0]633 634  // CHECK:  @builtins.property635  // CHECK:  def variadic(self) -> _ods_ir.RegionSequence:636  // CHECK:    return self.regions[2:]637}638 639// CHECK: def variadic_and_normal_region(num_variadic, *, loc=None, ip=None) -> VariadicAndNormalRegionOp:640// CHECK:   return VariadicAndNormalRegionOp(num_variadic=num_variadic, loc=loc, ip=ip)641 642// CHECK: class VariadicRegionOp(_ods_ir.OpView):643// CHECK-LABEL: OPERATION_NAME = "test.variadic_region"644def VariadicRegionOp : TestOp<"variadic_region"> {645  // CHECK:  def __init__(self, num_variadic, *, loc=None, ip=None):646  // CHECK:    operands = []647  // CHECK:    attributes = {}648  // CHECK:    regions = None649  // CHECK:    results = []650  // CHECK:    _ods_successors = None651  // CHECK:    regions = 0 + num_variadic652  // CHECK:    super().__init__(653  // CHECK:     self.OPERATION_NAME, self._ODS_REGIONS, self._ODS_OPERAND_SEGMENTS, self._ODS_RESULT_SEGMENTS654  // CHECK:      attributes=attributes, results=results, operands=operands,655  // CHECK:      successors=_ods_successors, regions=regions, loc=loc, ip=ip)656  let regions = (region VariadicRegion<AnyRegion>:$Variadic);657 658  // CHECK:  @builtins.property659  // CHECK:  def Variadic(self) -> _ods_ir.RegionSequence:660  // CHECK:    return self.regions[0:]661}662 663// CHECK: def variadic_region(num_variadic, *, loc=None, ip=None) -> VariadicRegionOp:664// CHECK:   return VariadicRegionOp(num_variadic=num_variadic, loc=loc, ip=ip)665 666// CHECK: @_ods_cext.register_operation(_Dialect)667// CHECK: class WithSpecialCharactersOp(_ods_ir.OpView):668// CHECK-LABEL: OPERATION_NAME = "test.123with--special.characters"669def WithSpecialCharactersOp : TestOp<"123with--special.characters"> {670}671 672// CHECK: def _123with__special_characters(*, loc=None, ip=None) -> WithSpecialCharactersOp:673// CHECK:   return WithSpecialCharactersOp(loc=loc, ip=ip)674 675// CHECK: @_ods_cext.register_operation(_Dialect)676// CHECK: class WithSuccessorsOp(_ods_ir.OpView):677// CHECK-LABEL: OPERATION_NAME = "test.with_successors"678def WithSuccessorsOp : TestOp<"with_successors"> {679  // CHECK-NOT:  _ods_successors = None680  // CHECK:      _ods_successors = []681  // CHECK-NEXT: _ods_successors.append(successor)682  // CHECK-NEXT: _ods_successors.extend(successors)683  let successors = (successor AnySuccessor:$successor,684                              VariadicSuccessor<AnySuccessor>:$successors);685}686 687// CHECK: def with_successors(successor, successors, *, loc=None, ip=None) -> WithSuccessorsOp:688// CHECK:   return WithSuccessorsOp(successor=successor, successors=successors, loc=loc, ip=ip)689 690// CHECK: class snake_case(_ods_ir.OpView):691// CHECK-LABEL: OPERATION_NAME = "test.snake_case"692def already_snake_case : TestOp<"snake_case"> {}693// CHECK: def snake_case_(*, loc=None, ip=None) -> snake_case:694// CHECK:   return snake_case(loc=loc, ip=ip)695