xref: /llvm-project/mlir/include/mlir/Dialect/Linalg/IR/LinalgNamedStructuredOps.yaml (revision 39358f846d1e336def88ff9c25581fab392d59fe)
1### AUTOGENERATED from core_named_ops.py
2### To regenerate, run: bin/update_core_linalg_named_ops.sh
3--- !LinalgOpConfig
4metadata: !LinalgOpMetadata
5  name: copy
6  cpp_class_name: CopyOp
7  doc: |-
8    Copies the tensor elementwise.
9
10    Numeric casting is performed on the input operand, promoting it to the same
11    data type as the accumulator/output.
12  defines:
13  - hasCanonicalizer
14structured_op: !LinalgStructuredOpConfig
15  args:
16  - !LinalgOperandDefConfig
17    name: I
18    kind: input_tensor
19    type_var: T1
20    shape_map: affine_map<() -> ()>
21  - !LinalgOperandDefConfig
22    name: O
23    kind: output_tensor
24    type_var: U
25    shape_map: affine_map<() -> ()>
26  - !LinalgOperandDefConfig
27    name: cast
28    kind: type_fn_attr
29    default_fn: cast_signed
30  indexing_maps: !LinalgIndexingMapsConfig
31    static_indexing_maps:
32    - affine_map<() -> ()>
33    - affine_map<() -> ()>
34  iterator_types: []
35  assignments:
36  - !ScalarAssign
37    arg: O
38    value: !ScalarExpression
39      scalar_fn:
40        kind: type
41        attr_name: cast
42        type_var: U
43        operands:
44        - !ScalarExpression
45          scalar_arg: I
46--- !LinalgOpConfig
47metadata: !LinalgOpMetadata
48  name: elemwise_unary
49  cpp_class_name: ElemwiseUnaryOp
50  doc: |-
51    Applies the unary function fun elementwise.
52
53    Numeric casting is performed on the input operand, promoting it to the same
54    data type as the accumulator/output.
55structured_op: !LinalgStructuredOpConfig
56  args:
57  - !LinalgOperandDefConfig
58    name: I
59    kind: input_tensor
60    type_var: T1
61    shape_map: affine_map<() -> ()>
62  - !LinalgOperandDefConfig
63    name: O
64    kind: output_tensor
65    type_var: U
66    shape_map: affine_map<() -> ()>
67  - !LinalgOperandDefConfig
68    name: fun
69    kind: unary_fn_attr
70    default_fn: exp
71  - !LinalgOperandDefConfig
72    name: cast
73    kind: type_fn_attr
74    default_fn: cast_signed
75  indexing_maps: !LinalgIndexingMapsConfig
76    static_indexing_maps:
77    - affine_map<() -> ()>
78    - affine_map<() -> ()>
79  iterator_types: []
80  assignments:
81  - !ScalarAssign
82    arg: O
83    value: !ScalarExpression
84      scalar_fn:
85        kind: unary
86        attr_name: fun
87        operands:
88        - !ScalarExpression
89          scalar_fn:
90            kind: type
91            attr_name: cast
92            type_var: U
93            operands:
94            - !ScalarExpression
95              scalar_arg: I
96--- !LinalgOpConfig
97metadata: !LinalgOpMetadata
98  name: exp
99  cpp_class_name: ExpOp
100  doc: |-
101    Applies exp(x) elementwise.
102
103    No numeric casting is performed on the input operand.
104structured_op: !LinalgStructuredOpConfig
105  args:
106  - !LinalgOperandDefConfig
107    name: I
108    kind: input_tensor
109    type_var: T1
110    shape_map: affine_map<() -> ()>
111  - !LinalgOperandDefConfig
112    name: O
113    kind: output_tensor
114    type_var: T1
115    shape_map: affine_map<() -> ()>
116  indexing_maps: !LinalgIndexingMapsConfig
117    static_indexing_maps:
118    - affine_map<() -> ()>
119    - affine_map<() -> ()>
120  iterator_types: []
121  assignments:
122  - !ScalarAssign
123    arg: O
124    value: !ScalarExpression
125      scalar_fn:
126        kind: unary
127        fn_name: exp
128        operands:
129        - !ScalarExpression
130          scalar_arg: I
131--- !LinalgOpConfig
132metadata: !LinalgOpMetadata
133  name: log
134  cpp_class_name: LogOp
135  doc: |-
136    Applies log(x) elementwise.
137
138    No numeric casting is performed on the input operand.
139structured_op: !LinalgStructuredOpConfig
140  args:
141  - !LinalgOperandDefConfig
142    name: I
143    kind: input_tensor
144    type_var: T1
145    shape_map: affine_map<() -> ()>
146  - !LinalgOperandDefConfig
147    name: O
148    kind: output_tensor
149    type_var: T1
150    shape_map: affine_map<() -> ()>
151  indexing_maps: !LinalgIndexingMapsConfig
152    static_indexing_maps:
153    - affine_map<() -> ()>
154    - affine_map<() -> ()>
155  iterator_types: []
156  assignments:
157  - !ScalarAssign
158    arg: O
159    value: !ScalarExpression
160      scalar_fn:
161        kind: unary
162        fn_name: log
163        operands:
164        - !ScalarExpression
165          scalar_arg: I
166--- !LinalgOpConfig
167metadata: !LinalgOpMetadata
168  name: abs
169  cpp_class_name: AbsOp
170  doc: |-
171    Applies abs(x) elementwise.
172
173    No numeric casting is performed on the input operand.
174structured_op: !LinalgStructuredOpConfig
175  args:
176  - !LinalgOperandDefConfig
177    name: I
178    kind: input_tensor
179    type_var: T1
180    shape_map: affine_map<() -> ()>
181  - !LinalgOperandDefConfig
182    name: O
183    kind: output_tensor
184    type_var: T1
185    shape_map: affine_map<() -> ()>
186  indexing_maps: !LinalgIndexingMapsConfig
187    static_indexing_maps:
188    - affine_map<() -> ()>
189    - affine_map<() -> ()>
190  iterator_types: []
191  assignments:
192  - !ScalarAssign
193    arg: O
194    value: !ScalarExpression
195      scalar_fn:
196        kind: unary
197        fn_name: abs
198        operands:
199        - !ScalarExpression
200          scalar_arg: I
201--- !LinalgOpConfig
202metadata: !LinalgOpMetadata
203  name: ceil
204  cpp_class_name: CeilOp
205  doc: |-
206    Applies ceil(x) elementwise.
207
208    No numeric casting is performed on the input operand.
209structured_op: !LinalgStructuredOpConfig
210  args:
211  - !LinalgOperandDefConfig
212    name: I
213    kind: input_tensor
214    type_var: T1
215    shape_map: affine_map<() -> ()>
216  - !LinalgOperandDefConfig
217    name: O
218    kind: output_tensor
219    type_var: T1
220    shape_map: affine_map<() -> ()>
221  indexing_maps: !LinalgIndexingMapsConfig
222    static_indexing_maps:
223    - affine_map<() -> ()>
224    - affine_map<() -> ()>
225  iterator_types: []
226  assignments:
227  - !ScalarAssign
228    arg: O
229    value: !ScalarExpression
230      scalar_fn:
231        kind: unary
232        fn_name: ceil
233        operands:
234        - !ScalarExpression
235          scalar_arg: I
236--- !LinalgOpConfig
237metadata: !LinalgOpMetadata
238  name: floor
239  cpp_class_name: FloorOp
240  doc: |-
241    Applies floor(x) elementwise.
242
243    No numeric casting is performed on the input operand.
244structured_op: !LinalgStructuredOpConfig
245  args:
246  - !LinalgOperandDefConfig
247    name: I
248    kind: input_tensor
249    type_var: T1
250    shape_map: affine_map<() -> ()>
251  - !LinalgOperandDefConfig
252    name: O
253    kind: output_tensor
254    type_var: T1
255    shape_map: affine_map<() -> ()>
256  indexing_maps: !LinalgIndexingMapsConfig
257    static_indexing_maps:
258    - affine_map<() -> ()>
259    - affine_map<() -> ()>
260  iterator_types: []
261  assignments:
262  - !ScalarAssign
263    arg: O
264    value: !ScalarExpression
265      scalar_fn:
266        kind: unary
267        fn_name: floor
268        operands:
269        - !ScalarExpression
270          scalar_arg: I
271--- !LinalgOpConfig
272metadata: !LinalgOpMetadata
273  name: negf
274  cpp_class_name: NegFOp
275  doc: |-
276    Applies negf(x) elementwise.
277
278    No numeric casting is performed on the input operand.
279structured_op: !LinalgStructuredOpConfig
280  args:
281  - !LinalgOperandDefConfig
282    name: I
283    kind: input_tensor
284    type_var: T1
285    shape_map: affine_map<() -> ()>
286  - !LinalgOperandDefConfig
287    name: O
288    kind: output_tensor
289    type_var: T1
290    shape_map: affine_map<() -> ()>
291  indexing_maps: !LinalgIndexingMapsConfig
292    static_indexing_maps:
293    - affine_map<() -> ()>
294    - affine_map<() -> ()>
295  iterator_types: []
296  assignments:
297  - !ScalarAssign
298    arg: O
299    value: !ScalarExpression
300      scalar_fn:
301        kind: unary
302        fn_name: negf
303        operands:
304        - !ScalarExpression
305          scalar_arg: I
306--- !LinalgOpConfig
307metadata: !LinalgOpMetadata
308  name: reciprocal
309  cpp_class_name: ReciprocalOp
310  doc: |-
311    Applies reciprocal(x) elementwise.
312
313    No numeric casting is performed on the input operand.
314structured_op: !LinalgStructuredOpConfig
315  args:
316  - !LinalgOperandDefConfig
317    name: I
318    kind: input_tensor
319    type_var: T1
320    shape_map: affine_map<() -> ()>
321  - !LinalgOperandDefConfig
322    name: O
323    kind: output_tensor
324    type_var: T1
325    shape_map: affine_map<() -> ()>
326  indexing_maps: !LinalgIndexingMapsConfig
327    static_indexing_maps:
328    - affine_map<() -> ()>
329    - affine_map<() -> ()>
330  iterator_types: []
331  assignments:
332  - !ScalarAssign
333    arg: O
334    value: !ScalarExpression
335      scalar_fn:
336        kind: unary
337        fn_name: reciprocal
338        operands:
339        - !ScalarExpression
340          scalar_arg: I
341--- !LinalgOpConfig
342metadata: !LinalgOpMetadata
343  name: round
344  cpp_class_name: RoundOp
345  doc: |-
346    Applies round(x) elementwise.
347
348    No numeric casting is performed on the input operand.
349structured_op: !LinalgStructuredOpConfig
350  args:
351  - !LinalgOperandDefConfig
352    name: I
353    kind: input_tensor
354    type_var: T1
355    shape_map: affine_map<() -> ()>
356  - !LinalgOperandDefConfig
357    name: O
358    kind: output_tensor
359    type_var: T1
360    shape_map: affine_map<() -> ()>
361  indexing_maps: !LinalgIndexingMapsConfig
362    static_indexing_maps:
363    - affine_map<() -> ()>
364    - affine_map<() -> ()>
365  iterator_types: []
366  assignments:
367  - !ScalarAssign
368    arg: O
369    value: !ScalarExpression
370      scalar_fn:
371        kind: unary
372        fn_name: round
373        operands:
374        - !ScalarExpression
375          scalar_arg: I
376--- !LinalgOpConfig
377metadata: !LinalgOpMetadata
378  name: sqrt
379  cpp_class_name: SqrtOp
380  doc: |-
381    Applies sqrt(x) elementwise.
382
383    No numeric casting is performed on the input operand.
384structured_op: !LinalgStructuredOpConfig
385  args:
386  - !LinalgOperandDefConfig
387    name: I
388    kind: input_tensor
389    type_var: T1
390    shape_map: affine_map<() -> ()>
391  - !LinalgOperandDefConfig
392    name: O
393    kind: output_tensor
394    type_var: T1
395    shape_map: affine_map<() -> ()>
396  indexing_maps: !LinalgIndexingMapsConfig
397    static_indexing_maps:
398    - affine_map<() -> ()>
399    - affine_map<() -> ()>
400  iterator_types: []
401  assignments:
402  - !ScalarAssign
403    arg: O
404    value: !ScalarExpression
405      scalar_fn:
406        kind: unary
407        fn_name: sqrt
408        operands:
409        - !ScalarExpression
410          scalar_arg: I
411--- !LinalgOpConfig
412metadata: !LinalgOpMetadata
413  name: rsqrt
414  cpp_class_name: RsqrtOp
415  doc: |-
416    Applies rsqrt(x) elementwise.
417
418    No numeric casting is performed on the input operand.
419structured_op: !LinalgStructuredOpConfig
420  args:
421  - !LinalgOperandDefConfig
422    name: I
423    kind: input_tensor
424    type_var: T1
425    shape_map: affine_map<() -> ()>
426  - !LinalgOperandDefConfig
427    name: O
428    kind: output_tensor
429    type_var: T1
430    shape_map: affine_map<() -> ()>
431  indexing_maps: !LinalgIndexingMapsConfig
432    static_indexing_maps:
433    - affine_map<() -> ()>
434    - affine_map<() -> ()>
435  iterator_types: []
436  assignments:
437  - !ScalarAssign
438    arg: O
439    value: !ScalarExpression
440      scalar_fn:
441        kind: unary
442        fn_name: rsqrt
443        operands:
444        - !ScalarExpression
445          scalar_arg: I
446--- !LinalgOpConfig
447metadata: !LinalgOpMetadata
448  name: square
449  cpp_class_name: SquareOp
450  doc: |-
451    Applies square(x) elementwise.
452
453    No numeric casting is performed on the input operand.
454structured_op: !LinalgStructuredOpConfig
455  args:
456  - !LinalgOperandDefConfig
457    name: I
458    kind: input_tensor
459    type_var: T1
460    shape_map: affine_map<() -> ()>
461  - !LinalgOperandDefConfig
462    name: O
463    kind: output_tensor
464    type_var: T1
465    shape_map: affine_map<() -> ()>
466  indexing_maps: !LinalgIndexingMapsConfig
467    static_indexing_maps:
468    - affine_map<() -> ()>
469    - affine_map<() -> ()>
470  iterator_types: []
471  assignments:
472  - !ScalarAssign
473    arg: O
474    value: !ScalarExpression
475      scalar_fn:
476        kind: unary
477        fn_name: square
478        operands:
479        - !ScalarExpression
480          scalar_arg: I
481--- !LinalgOpConfig
482metadata: !LinalgOpMetadata
483  name: tanh
484  cpp_class_name: TanhOp
485  doc: |-
486    Applies tanh(x) elementwise.
487
488    No numeric casting is performed on the input operand.
489structured_op: !LinalgStructuredOpConfig
490  args:
491  - !LinalgOperandDefConfig
492    name: I
493    kind: input_tensor
494    type_var: T1
495    shape_map: affine_map<() -> ()>
496  - !LinalgOperandDefConfig
497    name: O
498    kind: output_tensor
499    type_var: T1
500    shape_map: affine_map<() -> ()>
501  indexing_maps: !LinalgIndexingMapsConfig
502    static_indexing_maps:
503    - affine_map<() -> ()>
504    - affine_map<() -> ()>
505  iterator_types: []
506  assignments:
507  - !ScalarAssign
508    arg: O
509    value: !ScalarExpression
510      scalar_fn:
511        kind: unary
512        fn_name: tanh
513        operands:
514        - !ScalarExpression
515          scalar_arg: I
516--- !LinalgOpConfig
517metadata: !LinalgOpMetadata
518  name: erf
519  cpp_class_name: ErfOp
520  doc: |-
521    Applies erf(x) elementwise.
522
523    No numeric casting is performed on the input operand.
524structured_op: !LinalgStructuredOpConfig
525  args:
526  - !LinalgOperandDefConfig
527    name: I
528    kind: input_tensor
529    type_var: T1
530    shape_map: affine_map<() -> ()>
531  - !LinalgOperandDefConfig
532    name: O
533    kind: output_tensor
534    type_var: T1
535    shape_map: affine_map<() -> ()>
536  indexing_maps: !LinalgIndexingMapsConfig
537    static_indexing_maps:
538    - affine_map<() -> ()>
539    - affine_map<() -> ()>
540  iterator_types: []
541  assignments:
542  - !ScalarAssign
543    arg: O
544    value: !ScalarExpression
545      scalar_fn:
546        kind: unary
547        fn_name: erf
548        operands:
549        - !ScalarExpression
550          scalar_arg: I
551--- !LinalgOpConfig
552metadata: !LinalgOpMetadata
553  name: elemwise_binary
554  cpp_class_name: ElemwiseBinaryOp
555  doc: |-
556    Applies the binary function fun elementwise.
557
558    Numeric casting is performed on the input operand, promoting it to the same
559    data type as the accumulator/output.
560structured_op: !LinalgStructuredOpConfig
561  args:
562  - !LinalgOperandDefConfig
563    name: lhs
564    kind: input_tensor
565    type_var: T1
566    shape_map: affine_map<() -> ()>
567  - !LinalgOperandDefConfig
568    name: rhs
569    kind: input_tensor
570    type_var: T2
571    shape_map: affine_map<() -> ()>
572  - !LinalgOperandDefConfig
573    name: O
574    kind: output_tensor
575    type_var: U
576    shape_map: affine_map<() -> ()>
577  - !LinalgOperandDefConfig
578    name: fun
579    kind: binary_fn_attr
580    default_fn: add
581  - !LinalgOperandDefConfig
582    name: cast
583    kind: type_fn_attr
584    default_fn: cast_signed
585  indexing_maps: !LinalgIndexingMapsConfig
586    static_indexing_maps:
587    - affine_map<() -> ()>
588    - affine_map<() -> ()>
589    - affine_map<() -> ()>
590  iterator_types: []
591  assignments:
592  - !ScalarAssign
593    arg: O
594    value: !ScalarExpression
595      scalar_fn:
596        kind: binary
597        attr_name: fun
598        operands:
599        - !ScalarExpression
600          scalar_fn:
601            kind: type
602            attr_name: cast
603            type_var: U
604            operands:
605            - !ScalarExpression
606              scalar_arg: lhs
607        - !ScalarExpression
608          scalar_fn:
609            kind: type
610            attr_name: cast
611            type_var: U
612            operands:
613            - !ScalarExpression
614              scalar_arg: rhs
615--- !LinalgOpConfig
616metadata: !LinalgOpMetadata
617  name: add
618  cpp_class_name: AddOp
619  doc: |-
620    Adds two tensors elementwise.
621
622    The shapes and element types must be identical. The appropriate casts,
623    broadcasts and reductions should be done previously to calling this op.
624
625    This means reduction/broadcast/element cast semantics is explicit. Further
626    passes can take that into account when lowering this code. For example,
627    a `linalg.broadcast` + `linalg.add` sequence can be lowered to a
628    `linalg.generic` with different affine maps for the two operands.
629structured_op: !LinalgStructuredOpConfig
630  args:
631  - !LinalgOperandDefConfig
632    name: lhs
633    kind: input_tensor
634    type_var: T1
635    shape_map: affine_map<() -> ()>
636  - !LinalgOperandDefConfig
637    name: rhs
638    kind: input_tensor
639    type_var: T1
640    shape_map: affine_map<() -> ()>
641  - !LinalgOperandDefConfig
642    name: O
643    kind: output_tensor
644    type_var: T1
645    shape_map: affine_map<() -> ()>
646  indexing_maps: !LinalgIndexingMapsConfig
647    static_indexing_maps:
648    - affine_map<() -> ()>
649    - affine_map<() -> ()>
650    - affine_map<() -> ()>
651  iterator_types: []
652  assignments:
653  - !ScalarAssign
654    arg: O
655    value: !ScalarExpression
656      scalar_fn:
657        kind: binary
658        fn_name: add
659        operands:
660        - !ScalarExpression
661          scalar_arg: lhs
662        - !ScalarExpression
663          scalar_arg: rhs
664--- !LinalgOpConfig
665metadata: !LinalgOpMetadata
666  name: sub
667  cpp_class_name: SubOp
668  doc: |-
669    Subtracts two tensors elementwise.
670
671    The shapes and element types must be identical. The appropriate casts,
672    broadcasts and reductions should be done previously to calling this op.
673
674    This means reduction/broadcast/element cast semantics is explicit. Further
675    passes can take that into account when lowering this code. For example,
676    a `linalg.broadcast` + `linalg.sub` sequence can be lowered to a
677    `linalg.generic` with different affine maps for the two operands.
678structured_op: !LinalgStructuredOpConfig
679  args:
680  - !LinalgOperandDefConfig
681    name: lhs
682    kind: input_tensor
683    type_var: T1
684    shape_map: affine_map<() -> ()>
685  - !LinalgOperandDefConfig
686    name: rhs
687    kind: input_tensor
688    type_var: T1
689    shape_map: affine_map<() -> ()>
690  - !LinalgOperandDefConfig
691    name: O
692    kind: output_tensor
693    type_var: T1
694    shape_map: affine_map<() -> ()>
695  indexing_maps: !LinalgIndexingMapsConfig
696    static_indexing_maps:
697    - affine_map<() -> ()>
698    - affine_map<() -> ()>
699    - affine_map<() -> ()>
700  iterator_types: []
701  assignments:
702  - !ScalarAssign
703    arg: O
704    value: !ScalarExpression
705      scalar_fn:
706        kind: binary
707        fn_name: sub
708        operands:
709        - !ScalarExpression
710          scalar_arg: lhs
711        - !ScalarExpression
712          scalar_arg: rhs
713--- !LinalgOpConfig
714metadata: !LinalgOpMetadata
715  name: mul
716  cpp_class_name: MulOp
717  doc: |-
718    Multiplies two tensors elementwise.
719
720    The shapes and element types must be identical. The appropriate casts,
721    broadcasts and reductions should be done previously to calling this op.
722
723    This means reduction/broadcast/element cast semantics is explicit. Further
724    passes can take that into account when lowering this code. For example,
725    a `linalg.broadcast` + `linalg.mul` sequence can be lowered to a
726    `linalg.generic` with different affine maps for the two operands.
727structured_op: !LinalgStructuredOpConfig
728  args:
729  - !LinalgOperandDefConfig
730    name: lhs
731    kind: input_tensor
732    type_var: T1
733    shape_map: affine_map<() -> ()>
734  - !LinalgOperandDefConfig
735    name: rhs
736    kind: input_tensor
737    type_var: T1
738    shape_map: affine_map<() -> ()>
739  - !LinalgOperandDefConfig
740    name: O
741    kind: output_tensor
742    type_var: T1
743    shape_map: affine_map<() -> ()>
744  indexing_maps: !LinalgIndexingMapsConfig
745    static_indexing_maps:
746    - affine_map<() -> ()>
747    - affine_map<() -> ()>
748    - affine_map<() -> ()>
749  iterator_types: []
750  assignments:
751  - !ScalarAssign
752    arg: O
753    value: !ScalarExpression
754      scalar_fn:
755        kind: binary
756        fn_name: mul
757        operands:
758        - !ScalarExpression
759          scalar_arg: lhs
760        - !ScalarExpression
761          scalar_arg: rhs
762--- !LinalgOpConfig
763metadata: !LinalgOpMetadata
764  name: div
765  cpp_class_name: DivOp
766  doc: |-
767    Divides the first tensor by the second tensor, elementwise.
768
769    The shapes and element types must be identical. The appropriate casts,
770    broadcasts and reductions should be done previously to calling this op.
771
772    This means reduction/broadcast/element cast semantics is explicit. Further
773    passes can take that into account when lowering this code. For example,
774    a `linalg.broadcast` + `linalg.div` sequence can be lowered to a
775    `linalg.generic` with different affine maps for the two operands.
776structured_op: !LinalgStructuredOpConfig
777  args:
778  - !LinalgOperandDefConfig
779    name: lhs
780    kind: input_tensor
781    type_var: T1
782    shape_map: affine_map<() -> ()>
783  - !LinalgOperandDefConfig
784    name: rhs
785    kind: input_tensor
786    type_var: T1
787    shape_map: affine_map<() -> ()>
788  - !LinalgOperandDefConfig
789    name: O
790    kind: output_tensor
791    type_var: T1
792    shape_map: affine_map<() -> ()>
793  indexing_maps: !LinalgIndexingMapsConfig
794    static_indexing_maps:
795    - affine_map<() -> ()>
796    - affine_map<() -> ()>
797    - affine_map<() -> ()>
798  iterator_types: []
799  assignments:
800  - !ScalarAssign
801    arg: O
802    value: !ScalarExpression
803      scalar_fn:
804        kind: binary
805        fn_name: div
806        operands:
807        - !ScalarExpression
808          scalar_arg: lhs
809        - !ScalarExpression
810          scalar_arg: rhs
811--- !LinalgOpConfig
812metadata: !LinalgOpMetadata
813  name: div_unsigned
814  cpp_class_name: DivUnsignedOp
815  doc: |-
816    Divides the first tensor by the second tensor, elementwise. For integer
817    types, performs an unsigned division.
818
819    The shapes and element types must be identical. The appropriate casts,
820    broadcasts and reductions should be done previously to calling this op.
821
822    This means reduction/broadcast/element cast semantics is explicit. Further
823    passes can take that into account when lowering this code. For example,
824    a `linalg.broadcast` + `linalg.div` sequence can be lowered to a
825    `linalg.generic` with different affine maps for the two operands.
826structured_op: !LinalgStructuredOpConfig
827  args:
828  - !LinalgOperandDefConfig
829    name: lhs
830    kind: input_tensor
831    type_var: T1
832    shape_map: affine_map<() -> ()>
833  - !LinalgOperandDefConfig
834    name: rhs
835    kind: input_tensor
836    type_var: T1
837    shape_map: affine_map<() -> ()>
838  - !LinalgOperandDefConfig
839    name: O
840    kind: output_tensor
841    type_var: T1
842    shape_map: affine_map<() -> ()>
843  indexing_maps: !LinalgIndexingMapsConfig
844    static_indexing_maps:
845    - affine_map<() -> ()>
846    - affine_map<() -> ()>
847    - affine_map<() -> ()>
848  iterator_types: []
849  assignments:
850  - !ScalarAssign
851    arg: O
852    value: !ScalarExpression
853      scalar_fn:
854        kind: binary
855        fn_name: div_unsigned
856        operands:
857        - !ScalarExpression
858          scalar_arg: lhs
859        - !ScalarExpression
860          scalar_arg: rhs
861--- !LinalgOpConfig
862metadata: !LinalgOpMetadata
863  name: max
864  cpp_class_name: MaxOp
865  doc: |-
866    Takes the max (signed) between two inputs, elementwise.
867
868    The shapes and element types must be identical. The appropriate casts,
869    broadcasts and reductions should be done previously to calling this op.
870
871    This means reduction/broadcast/element cast semantics is explicit. Further
872    passes can take that into account when lowering this code. For example,
873    a `linalg.broadcast` + `linalg.max` sequence can be lowered to a
874    `linalg.generic` with different affine maps for the two operands.
875structured_op: !LinalgStructuredOpConfig
876  args:
877  - !LinalgOperandDefConfig
878    name: lhs
879    kind: input_tensor
880    type_var: T1
881    shape_map: affine_map<() -> ()>
882  - !LinalgOperandDefConfig
883    name: rhs
884    kind: input_tensor
885    type_var: T1
886    shape_map: affine_map<() -> ()>
887  - !LinalgOperandDefConfig
888    name: O
889    kind: output_tensor
890    type_var: T1
891    shape_map: affine_map<() -> ()>
892  indexing_maps: !LinalgIndexingMapsConfig
893    static_indexing_maps:
894    - affine_map<() -> ()>
895    - affine_map<() -> ()>
896    - affine_map<() -> ()>
897  iterator_types: []
898  assignments:
899  - !ScalarAssign
900    arg: O
901    value: !ScalarExpression
902      scalar_fn:
903        kind: binary
904        fn_name: max_signed
905        operands:
906        - !ScalarExpression
907          scalar_arg: lhs
908        - !ScalarExpression
909          scalar_arg: rhs
910--- !LinalgOpConfig
911metadata: !LinalgOpMetadata
912  name: min
913  cpp_class_name: MinOp
914  doc: |-
915    Takes the min (signed) between two inputs, elementwise.
916
917    The shapes and element types must be identical. The appropriate casts,
918    broadcasts and reductions should be done previously to calling this op.
919
920    This means reduction/broadcast/element cast semantics is explicit. Further
921    passes can take that into account when lowering this code. For example,
922    a `linalg.broadcast` + `linalg.min` sequence can be lowered to a
923    `linalg.generic` with different affine maps for the two operands.
924structured_op: !LinalgStructuredOpConfig
925  args:
926  - !LinalgOperandDefConfig
927    name: lhs
928    kind: input_tensor
929    type_var: T1
930    shape_map: affine_map<() -> ()>
931  - !LinalgOperandDefConfig
932    name: rhs
933    kind: input_tensor
934    type_var: T1
935    shape_map: affine_map<() -> ()>
936  - !LinalgOperandDefConfig
937    name: O
938    kind: output_tensor
939    type_var: T1
940    shape_map: affine_map<() -> ()>
941  indexing_maps: !LinalgIndexingMapsConfig
942    static_indexing_maps:
943    - affine_map<() -> ()>
944    - affine_map<() -> ()>
945    - affine_map<() -> ()>
946  iterator_types: []
947  assignments:
948  - !ScalarAssign
949    arg: O
950    value: !ScalarExpression
951      scalar_fn:
952        kind: binary
953        fn_name: min_signed
954        operands:
955        - !ScalarExpression
956          scalar_arg: lhs
957        - !ScalarExpression
958          scalar_arg: rhs
959--- !LinalgOpConfig
960metadata: !LinalgOpMetadata
961  name: powf
962  cpp_class_name: PowFOp
963  doc: |-
964    Takes the powf(lhs, rhs) between two inputs, elementwise. For powf(arg, 2) use `linalg.square`.
965
966    Only applies to floating point values.
967
968    The shapes and element types must be identical. The appropriate casts,
969    broadcasts and reductions should be done previously to calling this op.
970
971    This means reduction/broadcast/element cast semantics is explicit. Further
972    passes can take that into account when lowering this code. For example,
973    a `linalg.broadcast` + `linalg.powf` sequence can be lowered to a
974    `linalg.generic` with different affine maps for the two operands.
975structured_op: !LinalgStructuredOpConfig
976  args:
977  - !LinalgOperandDefConfig
978    name: lhs
979    kind: input_tensor
980    type_var: T1
981    shape_map: affine_map<() -> ()>
982  - !LinalgOperandDefConfig
983    name: rhs
984    kind: input_tensor
985    type_var: T1
986    shape_map: affine_map<() -> ()>
987  - !LinalgOperandDefConfig
988    name: O
989    kind: output_tensor
990    type_var: T1
991    shape_map: affine_map<() -> ()>
992  indexing_maps: !LinalgIndexingMapsConfig
993    static_indexing_maps:
994    - affine_map<() -> ()>
995    - affine_map<() -> ()>
996    - affine_map<() -> ()>
997  iterator_types: []
998  assignments:
999  - !ScalarAssign
1000    arg: O
1001    value: !ScalarExpression
1002      scalar_fn:
1003        kind: binary
1004        fn_name: powf
1005        operands:
1006        - !ScalarExpression
1007          scalar_arg: lhs
1008        - !ScalarExpression
1009          scalar_arg: rhs
1010--- !LinalgOpConfig
1011metadata: !LinalgOpMetadata
1012  name: select
1013  cpp_class_name: SelectOp
1014  doc: |-
1015    Chooses one value based on a binary condition supplied as its first operand.
1016
1017    The shapes and element types must be identical. The appropriate casts,
1018    broadcasts and reductions should be done previously to calling this op.
1019
1020    This means reduction/broadcast/element cast semantics is explicit. Further
1021    passes can take that into account when lowering this code. For example,
1022    a `linalg.broadcast` + `linalg.select` sequence can be lowered to a
1023    `linalg.generic` with different affine maps for the two operands.
1024structured_op: !LinalgStructuredOpConfig
1025  args:
1026  - !LinalgOperandDefConfig
1027    name: cond
1028    kind: input_tensor
1029    type_var: U
1030    shape_map: affine_map<() -> ()>
1031  - !LinalgOperandDefConfig
1032    name: lhs
1033    kind: input_tensor
1034    type_var: T1
1035    shape_map: affine_map<() -> ()>
1036  - !LinalgOperandDefConfig
1037    name: rhs
1038    kind: input_tensor
1039    type_var: T1
1040    shape_map: affine_map<() -> ()>
1041  - !LinalgOperandDefConfig
1042    name: O
1043    kind: output_tensor
1044    type_var: T1
1045    shape_map: affine_map<() -> ()>
1046  indexing_maps: !LinalgIndexingMapsConfig
1047    static_indexing_maps:
1048    - affine_map<() -> ()>
1049    - affine_map<() -> ()>
1050    - affine_map<() -> ()>
1051    - affine_map<() -> ()>
1052  iterator_types: []
1053  assignments:
1054  - !ScalarAssign
1055    arg: O
1056    value: !ScalarExpression
1057      scalar_fn:
1058        kind: ternary
1059        fn_name: select
1060        operands:
1061        - !ScalarExpression
1062          scalar_arg: cond
1063        - !ScalarExpression
1064          scalar_arg: lhs
1065        - !ScalarExpression
1066          scalar_arg: rhs
1067--- !LinalgOpConfig
1068metadata: !LinalgOpMetadata
1069  name: quantized_matmul
1070  cpp_class_name: QuantizedMatmulOp
1071  doc: |-
1072    Performs a matrix multiplication of two 2D inputs.
1073
1074    Numeric casting is performed on the operands to the inner multiply, promoting
1075    them to the same data type as the accumulator/output. The quantized variant
1076    includes zero-point adjustments for the left and right operands of the
1077    matmul.
1078structured_op: !LinalgStructuredOpConfig
1079  args:
1080  - !LinalgOperandDefConfig
1081    name: A
1082    kind: input_tensor
1083    type_var: T1
1084    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1)>
1085  - !LinalgOperandDefConfig
1086    name: B
1087    kind: input_tensor
1088    type_var: T2
1089    shape_map: affine_map<()[s0, s1, s2] -> (s1, s2)>
1090  - !LinalgOperandDefConfig
1091    name: AZp
1092    kind: scalar
1093    type_var: I32
1094  - !LinalgOperandDefConfig
1095    name: BZp
1096    kind: scalar
1097    type_var: I32
1098  - !LinalgOperandDefConfig
1099    name: C
1100    kind: output_tensor
1101    type_var: U
1102    shape_map: affine_map<()[s0, s1, s2] -> (s0, s2)>
1103  indexing_maps: !LinalgIndexingMapsConfig
1104    static_indexing_maps:
1105    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d2)>
1106    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d2, d1)>
1107    - affine_map<(d0, d1, d2)[s0, s1, s2] -> ()>
1108    - affine_map<(d0, d1, d2)[s0, s1, s2] -> ()>
1109    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1)>
1110  iterator_types:
1111  - parallel
1112  - parallel
1113  - reduction
1114  assignments:
1115  - !ScalarAssign
1116    arg: C
1117    value: !ScalarExpression
1118      scalar_fn:
1119        kind: binary
1120        fn_name: add
1121        operands:
1122        - !ScalarExpression
1123          scalar_arg: C
1124        - !ScalarExpression
1125          scalar_fn:
1126            kind: binary
1127            fn_name: mul
1128            operands:
1129            - !ScalarExpression
1130              scalar_fn:
1131                kind: binary
1132                fn_name: sub
1133                operands:
1134                - !ScalarExpression
1135                  scalar_fn:
1136                    kind: type
1137                    fn_name: cast_signed
1138                    type_var: U
1139                    operands:
1140                    - !ScalarExpression
1141                      scalar_arg: A
1142                - !ScalarExpression
1143                  scalar_fn:
1144                    kind: type
1145                    fn_name: cast_signed
1146                    type_var: U
1147                    operands:
1148                    - !ScalarExpression
1149                      scalar_arg: AZp
1150            - !ScalarExpression
1151              scalar_fn:
1152                kind: binary
1153                fn_name: sub
1154                operands:
1155                - !ScalarExpression
1156                  scalar_fn:
1157                    kind: type
1158                    fn_name: cast_signed
1159                    type_var: U
1160                    operands:
1161                    - !ScalarExpression
1162                      scalar_arg: B
1163                - !ScalarExpression
1164                  scalar_fn:
1165                    kind: type
1166                    fn_name: cast_signed
1167                    type_var: U
1168                    operands:
1169                    - !ScalarExpression
1170                      scalar_arg: BZp
1171--- !LinalgOpConfig
1172metadata: !LinalgOpMetadata
1173  name: matmul_transpose_a
1174  cpp_class_name: MatmulTransposeAOp
1175  doc: |-
1176    Performs a matrix multiplication of two 2D inputs with lhs operand
1177    transposed.
1178
1179    Numeric casting is performed on the operands to the inner multiply, promoting
1180    them to the same data type as the accumulator/output.
1181  implements:
1182  - LinalgContractionOpInterface
1183structured_op: !LinalgStructuredOpConfig
1184  args:
1185  - !LinalgOperandDefConfig
1186    name: A
1187    kind: input_tensor
1188    type_var: T1
1189    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1)>
1190  - !LinalgOperandDefConfig
1191    name: B
1192    kind: input_tensor
1193    type_var: T2
1194    shape_map: affine_map<()[s0, s1, s2] -> (s0, s2)>
1195  - !LinalgOperandDefConfig
1196    name: C
1197    kind: output_tensor
1198    type_var: U
1199    shape_map: affine_map<()[s0, s1, s2] -> (s2, s1)>
1200  - !LinalgOperandDefConfig
1201    name: cast
1202    kind: type_fn_attr
1203    default_fn: cast_signed
1204  indexing_maps: !LinalgIndexingMapsConfig
1205    static_indexing_maps:
1206    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d2, d0)>
1207    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d2, d1)>
1208    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1)>
1209  iterator_types:
1210  - parallel
1211  - parallel
1212  - reduction
1213  assignments:
1214  - !ScalarAssign
1215    arg: C
1216    value: !ScalarExpression
1217      scalar_fn:
1218        kind: binary
1219        fn_name: add
1220        operands:
1221        - !ScalarExpression
1222          scalar_arg: C
1223        - !ScalarExpression
1224          scalar_fn:
1225            kind: binary
1226            fn_name: mul
1227            operands:
1228            - !ScalarExpression
1229              scalar_fn:
1230                kind: type
1231                attr_name: cast
1232                type_var: U
1233                operands:
1234                - !ScalarExpression
1235                  scalar_arg: A
1236            - !ScalarExpression
1237              scalar_fn:
1238                kind: type
1239                attr_name: cast
1240                type_var: U
1241                operands:
1242                - !ScalarExpression
1243                  scalar_arg: B
1244--- !LinalgOpConfig
1245metadata: !LinalgOpMetadata
1246  name: matmul_transpose_b
1247  cpp_class_name: MatmulTransposeBOp
1248  doc: |-
1249    Performs a matrix multiplication of two 2D inputs with rhs operand
1250    transposed.
1251
1252    Numeric casting is performed on the operands to the inner multiply, promoting
1253    them to the same data type as the accumulator/output.
1254  implements:
1255  - LinalgContractionOpInterface
1256structured_op: !LinalgStructuredOpConfig
1257  args:
1258  - !LinalgOperandDefConfig
1259    name: A
1260    kind: input_tensor
1261    type_var: T1
1262    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1)>
1263  - !LinalgOperandDefConfig
1264    name: B
1265    kind: input_tensor
1266    type_var: T2
1267    shape_map: affine_map<()[s0, s1, s2] -> (s2, s1)>
1268  - !LinalgOperandDefConfig
1269    name: C
1270    kind: output_tensor
1271    type_var: U
1272    shape_map: affine_map<()[s0, s1, s2] -> (s0, s2)>
1273  - !LinalgOperandDefConfig
1274    name: cast
1275    kind: type_fn_attr
1276    default_fn: cast_signed
1277  indexing_maps: !LinalgIndexingMapsConfig
1278    static_indexing_maps:
1279    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d2)>
1280    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d1, d2)>
1281    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1)>
1282  iterator_types:
1283  - parallel
1284  - parallel
1285  - reduction
1286  assignments:
1287  - !ScalarAssign
1288    arg: C
1289    value: !ScalarExpression
1290      scalar_fn:
1291        kind: binary
1292        fn_name: add
1293        operands:
1294        - !ScalarExpression
1295          scalar_arg: C
1296        - !ScalarExpression
1297          scalar_fn:
1298            kind: binary
1299            fn_name: mul
1300            operands:
1301            - !ScalarExpression
1302              scalar_fn:
1303                kind: type
1304                attr_name: cast
1305                type_var: U
1306                operands:
1307                - !ScalarExpression
1308                  scalar_arg: A
1309            - !ScalarExpression
1310              scalar_fn:
1311                kind: type
1312                attr_name: cast
1313                type_var: U
1314                operands:
1315                - !ScalarExpression
1316                  scalar_arg: B
1317--- !LinalgOpConfig
1318metadata: !LinalgOpMetadata
1319  name: mmt4d
1320  cpp_class_name: Mmt4DOp
1321  doc: |-
1322    Performs a matrix-matrix-transpose multiplication of two 4D inputs.
1323
1324    Differences from linalg.matmul:
1325    * The right hand side is transposed, whence the 't' in 'mmt'.
1326    * The input and output tensors have a 4D shape instead of a 2D shape. They
1327      are interpreted as 2D matrices with one level of 2D tile subdivision,
1328      whence the 2+2=4 dimensions. The inner tile dimensions are identified with
1329      '0' suffixes below, for instance the LHS matrix shape (M, K, M0, K0) reads
1330      as: MxK tiles, each of shape M0xK0.
1331  implements:
1332  - LinalgContractionOpInterface
1333structured_op: !LinalgStructuredOpConfig
1334  args:
1335  - !LinalgOperandDefConfig
1336    name: lhs
1337    kind: input_tensor
1338    type_var: LhsType
1339    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2, s3)>
1340  - !LinalgOperandDefConfig
1341    name: rhs
1342    kind: input_tensor
1343    type_var: RhsType
1344    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4, s1, s5, s3)>
1345  - !LinalgOperandDefConfig
1346    name: accum
1347    kind: output_tensor
1348    type_var: AccumType
1349    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s4, s2, s5)>
1350  indexing_maps: !LinalgIndexingMapsConfig
1351    static_indexing_maps:
1352    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d0, d2, d3,
1353      d5)>
1354    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d1, d2, d4,
1355      d5)>
1356    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d3,
1357      d4)>
1358  iterator_types:
1359  - parallel
1360  - parallel
1361  - reduction
1362  - parallel
1363  - parallel
1364  - reduction
1365  assignments:
1366  - !ScalarAssign
1367    arg: accum
1368    value: !ScalarExpression
1369      scalar_fn:
1370        kind: binary
1371        fn_name: add
1372        operands:
1373        - !ScalarExpression
1374          scalar_arg: accum
1375        - !ScalarExpression
1376          scalar_fn:
1377            kind: binary
1378            fn_name: mul
1379            operands:
1380            - !ScalarExpression
1381              scalar_fn:
1382                kind: type
1383                fn_name: cast_signed
1384                type_var: AccumType
1385                operands:
1386                - !ScalarExpression
1387                  scalar_arg: lhs
1388            - !ScalarExpression
1389              scalar_fn:
1390                kind: type
1391                fn_name: cast_signed
1392                type_var: AccumType
1393                operands:
1394                - !ScalarExpression
1395                  scalar_arg: rhs
1396--- !LinalgOpConfig
1397metadata: !LinalgOpMetadata
1398  name: batch_mmt4d
1399  cpp_class_name: BatchMmt4DOp
1400  doc: |-
1401    Performs a batched matrix-matrix-transpose multiplication of two
1402    batched-4D (5D) inputs.
1403
1404    Besides the outermost batch dimension has the same semantic as
1405    linalg.batch_matmul, the differences from linalg.batch_matmul in the
1406    non-batch dimensions are the same as linalg.mmt4d vs. linalg.matmul. See the
1407    description of lingalg.mmt4d.
1408  implements:
1409  - LinalgContractionOpInterface
1410structured_op: !LinalgStructuredOpConfig
1411  args:
1412  - !LinalgOperandDefConfig
1413    name: lhs
1414    kind: input_tensor
1415    type_var: LhsType
1416    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1, s2, s3, s4)>
1417  - !LinalgOperandDefConfig
1418    name: rhs
1419    kind: input_tensor
1420    type_var: RhsType
1421    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s5, s2, s6, s4)>
1422  - !LinalgOperandDefConfig
1423    name: accum
1424    kind: output_tensor
1425    type_var: AccumType
1426    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1, s5, s3, s6)>
1427  indexing_maps: !LinalgIndexingMapsConfig
1428    static_indexing_maps:
1429    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6] -> (d0,
1430      d1, d3, d4, d6)>
1431    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6] -> (d0,
1432      d2, d3, d5, d6)>
1433    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6] -> (d0,
1434      d1, d2, d4, d5)>
1435  iterator_types:
1436  - parallel
1437  - parallel
1438  - parallel
1439  - reduction
1440  - parallel
1441  - parallel
1442  - reduction
1443  assignments:
1444  - !ScalarAssign
1445    arg: accum
1446    value: !ScalarExpression
1447      scalar_fn:
1448        kind: binary
1449        fn_name: add
1450        operands:
1451        - !ScalarExpression
1452          scalar_arg: accum
1453        - !ScalarExpression
1454          scalar_fn:
1455            kind: binary
1456            fn_name: mul
1457            operands:
1458            - !ScalarExpression
1459              scalar_fn:
1460                kind: type
1461                fn_name: cast_signed
1462                type_var: AccumType
1463                operands:
1464                - !ScalarExpression
1465                  scalar_arg: lhs
1466            - !ScalarExpression
1467              scalar_fn:
1468                kind: type
1469                fn_name: cast_signed
1470                type_var: AccumType
1471                operands:
1472                - !ScalarExpression
1473                  scalar_arg: rhs
1474--- !LinalgOpConfig
1475metadata: !LinalgOpMetadata
1476  name: batch_matmul
1477  cpp_class_name: BatchMatmulOp
1478  doc: |-
1479    Performs a batched matrix multiplication of two 3D inputs.
1480
1481    Numeric casting is performed on the operands to the inner multiply, promoting
1482    them to the same data type as the accumulator/output.
1483  implements:
1484  - LinalgContractionOpInterface
1485structured_op: !LinalgStructuredOpConfig
1486  args:
1487  - !LinalgOperandDefConfig
1488    name: A
1489    kind: input_tensor
1490    type_var: T1
1491    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s2)>
1492  - !LinalgOperandDefConfig
1493    name: B
1494    kind: input_tensor
1495    type_var: T2
1496    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s2, s3)>
1497  - !LinalgOperandDefConfig
1498    name: C
1499    kind: output_tensor
1500    type_var: U
1501    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s3)>
1502  indexing_maps: !LinalgIndexingMapsConfig
1503    static_indexing_maps:
1504    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d3)>
1505    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d3, d2)>
1506    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d2)>
1507  iterator_types:
1508  - parallel
1509  - parallel
1510  - parallel
1511  - reduction
1512  assignments:
1513  - !ScalarAssign
1514    arg: C
1515    value: !ScalarExpression
1516      scalar_fn:
1517        kind: binary
1518        fn_name: add
1519        operands:
1520        - !ScalarExpression
1521          scalar_arg: C
1522        - !ScalarExpression
1523          scalar_fn:
1524            kind: binary
1525            fn_name: mul
1526            operands:
1527            - !ScalarExpression
1528              scalar_fn:
1529                kind: type
1530                fn_name: cast_signed
1531                type_var: U
1532                operands:
1533                - !ScalarExpression
1534                  scalar_arg: A
1535            - !ScalarExpression
1536              scalar_fn:
1537                kind: type
1538                fn_name: cast_signed
1539                type_var: U
1540                operands:
1541                - !ScalarExpression
1542                  scalar_arg: B
1543--- !LinalgOpConfig
1544metadata: !LinalgOpMetadata
1545  name: batch_matmul_transpose_a
1546  cpp_class_name: BatchMatmulTransposeAOp
1547  doc: |-
1548    Performs a batched matrix multiplication of two 3D inputs where lhs operand
1549    has its non-batch dimensions transposed.
1550
1551    Numeric casting is performed on the operands to the inner multiply, promoting
1552    them to the same data type as the accumulator/output.
1553  implements:
1554  - LinalgContractionOpInterface
1555structured_op: !LinalgStructuredOpConfig
1556  args:
1557  - !LinalgOperandDefConfig
1558    name: A
1559    kind: input_tensor
1560    type_var: T1
1561    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s2)>
1562  - !LinalgOperandDefConfig
1563    name: B
1564    kind: input_tensor
1565    type_var: T2
1566    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s3)>
1567  - !LinalgOperandDefConfig
1568    name: C
1569    kind: output_tensor
1570    type_var: U
1571    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s2, s3)>
1572  indexing_maps: !LinalgIndexingMapsConfig
1573    static_indexing_maps:
1574    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d3, d1)>
1575    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d3, d2)>
1576    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d2)>
1577  iterator_types:
1578  - parallel
1579  - parallel
1580  - parallel
1581  - reduction
1582  assignments:
1583  - !ScalarAssign
1584    arg: C
1585    value: !ScalarExpression
1586      scalar_fn:
1587        kind: binary
1588        fn_name: add
1589        operands:
1590        - !ScalarExpression
1591          scalar_arg: C
1592        - !ScalarExpression
1593          scalar_fn:
1594            kind: binary
1595            fn_name: mul
1596            operands:
1597            - !ScalarExpression
1598              scalar_fn:
1599                kind: type
1600                fn_name: cast_signed
1601                type_var: U
1602                operands:
1603                - !ScalarExpression
1604                  scalar_arg: A
1605            - !ScalarExpression
1606              scalar_fn:
1607                kind: type
1608                fn_name: cast_signed
1609                type_var: U
1610                operands:
1611                - !ScalarExpression
1612                  scalar_arg: B
1613--- !LinalgOpConfig
1614metadata: !LinalgOpMetadata
1615  name: batch_matmul_transpose_b
1616  cpp_class_name: BatchMatmulTransposeBOp
1617  doc: |-
1618    Performs a batched matrix multiplication of two 3D inputs where rhs operand
1619    has its non-batch dimensions transposed.
1620
1621    Numeric casting is performed on the operands to the inner multiply, promoting
1622    them to the same data type as the accumulator/output.
1623  implements:
1624  - LinalgContractionOpInterface
1625structured_op: !LinalgStructuredOpConfig
1626  args:
1627  - !LinalgOperandDefConfig
1628    name: A
1629    kind: input_tensor
1630    type_var: T1
1631    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s2)>
1632  - !LinalgOperandDefConfig
1633    name: B
1634    kind: input_tensor
1635    type_var: T2
1636    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s3, s2)>
1637  - !LinalgOperandDefConfig
1638    name: C
1639    kind: output_tensor
1640    type_var: U
1641    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s3)>
1642  indexing_maps: !LinalgIndexingMapsConfig
1643    static_indexing_maps:
1644    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d3)>
1645    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d2, d3)>
1646    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d2)>
1647  iterator_types:
1648  - parallel
1649  - parallel
1650  - parallel
1651  - reduction
1652  assignments:
1653  - !ScalarAssign
1654    arg: C
1655    value: !ScalarExpression
1656      scalar_fn:
1657        kind: binary
1658        fn_name: add
1659        operands:
1660        - !ScalarExpression
1661          scalar_arg: C
1662        - !ScalarExpression
1663          scalar_fn:
1664            kind: binary
1665            fn_name: mul
1666            operands:
1667            - !ScalarExpression
1668              scalar_fn:
1669                kind: type
1670                fn_name: cast_signed
1671                type_var: U
1672                operands:
1673                - !ScalarExpression
1674                  scalar_arg: A
1675            - !ScalarExpression
1676              scalar_fn:
1677                kind: type
1678                fn_name: cast_signed
1679                type_var: U
1680                operands:
1681                - !ScalarExpression
1682                  scalar_arg: B
1683--- !LinalgOpConfig
1684metadata: !LinalgOpMetadata
1685  name: quantized_batch_matmul
1686  cpp_class_name: QuantizedBatchMatmulOp
1687  doc: |-
1688    Performs a batched matrix multiplication of two 3D inputs.
1689
1690    Numeric casting is performed on the operands to the inner multiply, promoting
1691    them to the same data type as the accumulator/output. The quantized variant
1692    includes zero-point adjustments for the left and right operands of the
1693    matmul.
1694structured_op: !LinalgStructuredOpConfig
1695  args:
1696  - !LinalgOperandDefConfig
1697    name: A
1698    kind: input_tensor
1699    type_var: T1
1700    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s2)>
1701  - !LinalgOperandDefConfig
1702    name: B
1703    kind: input_tensor
1704    type_var: T2
1705    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s2, s3)>
1706  - !LinalgOperandDefConfig
1707    name: AZp
1708    kind: scalar
1709    type_var: I32
1710  - !LinalgOperandDefConfig
1711    name: BZp
1712    kind: scalar
1713    type_var: I32
1714  - !LinalgOperandDefConfig
1715    name: C
1716    kind: output_tensor
1717    type_var: U
1718    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s3)>
1719  indexing_maps: !LinalgIndexingMapsConfig
1720    static_indexing_maps:
1721    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d3)>
1722    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d3, d2)>
1723    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> ()>
1724    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> ()>
1725    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d2)>
1726  iterator_types:
1727  - parallel
1728  - parallel
1729  - parallel
1730  - reduction
1731  assignments:
1732  - !ScalarAssign
1733    arg: C
1734    value: !ScalarExpression
1735      scalar_fn:
1736        kind: binary
1737        fn_name: add
1738        operands:
1739        - !ScalarExpression
1740          scalar_arg: C
1741        - !ScalarExpression
1742          scalar_fn:
1743            kind: binary
1744            fn_name: mul
1745            operands:
1746            - !ScalarExpression
1747              scalar_fn:
1748                kind: binary
1749                fn_name: sub
1750                operands:
1751                - !ScalarExpression
1752                  scalar_fn:
1753                    kind: type
1754                    fn_name: cast_signed
1755                    type_var: U
1756                    operands:
1757                    - !ScalarExpression
1758                      scalar_arg: A
1759                - !ScalarExpression
1760                  scalar_fn:
1761                    kind: type
1762                    fn_name: cast_signed
1763                    type_var: U
1764                    operands:
1765                    - !ScalarExpression
1766                      scalar_arg: AZp
1767            - !ScalarExpression
1768              scalar_fn:
1769                kind: binary
1770                fn_name: sub
1771                operands:
1772                - !ScalarExpression
1773                  scalar_fn:
1774                    kind: type
1775                    fn_name: cast_signed
1776                    type_var: U
1777                    operands:
1778                    - !ScalarExpression
1779                      scalar_arg: B
1780                - !ScalarExpression
1781                  scalar_fn:
1782                    kind: type
1783                    fn_name: cast_signed
1784                    type_var: U
1785                    operands:
1786                    - !ScalarExpression
1787                      scalar_arg: BZp
1788--- !LinalgOpConfig
1789metadata: !LinalgOpMetadata
1790  name: batch_reduce_matmul
1791  cpp_class_name: BatchReduceMatmulOp
1792  doc: |-
1793    Performs a batch-reduce matrix multiplication of two 3D inputs.
1794    The partial multiplication results are reduced into a 2D output.
1795
1796    Numeric casting is performed on the operands to the inner multiply, promoting
1797    them to the same data type as the accumulator/output.
1798  implements:
1799  - LinalgContractionOpInterface
1800structured_op: !LinalgStructuredOpConfig
1801  args:
1802  - !LinalgOperandDefConfig
1803    name: A
1804    kind: input_tensor
1805    type_var: T1
1806    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s1, s2)>
1807  - !LinalgOperandDefConfig
1808    name: B
1809    kind: input_tensor
1810    type_var: T2
1811    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s2, s3)>
1812  - !LinalgOperandDefConfig
1813    name: C
1814    kind: output_tensor
1815    type_var: U
1816    shape_map: affine_map<()[s0, s1, s2, s3] -> (s1, s3)>
1817  indexing_maps: !LinalgIndexingMapsConfig
1818    static_indexing_maps:
1819    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1, d3)>
1820    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d3, d2)>
1821    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d1, d2)>
1822  iterator_types:
1823  - reduction
1824  - parallel
1825  - parallel
1826  - reduction
1827  assignments:
1828  - !ScalarAssign
1829    arg: C
1830    value: !ScalarExpression
1831      scalar_fn:
1832        kind: binary
1833        fn_name: add
1834        operands:
1835        - !ScalarExpression
1836          scalar_arg: C
1837        - !ScalarExpression
1838          scalar_fn:
1839            kind: binary
1840            fn_name: mul
1841            operands:
1842            - !ScalarExpression
1843              scalar_fn:
1844                kind: type
1845                fn_name: cast_signed
1846                type_var: U
1847                operands:
1848                - !ScalarExpression
1849                  scalar_arg: A
1850            - !ScalarExpression
1851              scalar_fn:
1852                kind: type
1853                fn_name: cast_signed
1854                type_var: U
1855                operands:
1856                - !ScalarExpression
1857                  scalar_arg: B
1858--- !LinalgOpConfig
1859metadata: !LinalgOpMetadata
1860  name: matvec
1861  cpp_class_name: MatvecOp
1862  doc: |-
1863    Performs a matrix-vector multiplication.
1864
1865    Numeric casting is performed on the operands to the inner multiply, promoting
1866    them to the same data type as the accumulator/output.
1867  implements:
1868  - LinalgContractionOpInterface
1869structured_op: !LinalgStructuredOpConfig
1870  args:
1871  - !LinalgOperandDefConfig
1872    name: A
1873    kind: input_tensor
1874    type_var: T1
1875    shape_map: affine_map<()[s0, s1] -> (s0, s1)>
1876  - !LinalgOperandDefConfig
1877    name: y
1878    kind: input_tensor
1879    type_var: T2
1880    shape_map: affine_map<()[s0, s1] -> (s1)>
1881  - !LinalgOperandDefConfig
1882    name: x
1883    kind: output_tensor
1884    type_var: U
1885    shape_map: affine_map<()[s0, s1] -> (s0)>
1886  indexing_maps: !LinalgIndexingMapsConfig
1887    static_indexing_maps:
1888    - affine_map<(d0, d1)[s0, s1] -> (d0, d1)>
1889    - affine_map<(d0, d1)[s0, s1] -> (d1)>
1890    - affine_map<(d0, d1)[s0, s1] -> (d0)>
1891  iterator_types:
1892  - parallel
1893  - reduction
1894  assignments:
1895  - !ScalarAssign
1896    arg: x
1897    value: !ScalarExpression
1898      scalar_fn:
1899        kind: binary
1900        fn_name: add
1901        operands:
1902        - !ScalarExpression
1903          scalar_arg: x
1904        - !ScalarExpression
1905          scalar_fn:
1906            kind: binary
1907            fn_name: mul
1908            operands:
1909            - !ScalarExpression
1910              scalar_fn:
1911                kind: type
1912                fn_name: cast_signed
1913                type_var: U
1914                operands:
1915                - !ScalarExpression
1916                  scalar_arg: A
1917            - !ScalarExpression
1918              scalar_fn:
1919                kind: type
1920                fn_name: cast_signed
1921                type_var: U
1922                operands:
1923                - !ScalarExpression
1924                  scalar_arg: y
1925--- !LinalgOpConfig
1926metadata: !LinalgOpMetadata
1927  name: vecmat
1928  cpp_class_name: VecmatOp
1929  doc: |-
1930    Performs a vector-matrix multiplication.
1931
1932    Numeric casting is performed on the operands to the inner multiply, promoting
1933    them to the same data type as the accumulator/output.
1934  implements:
1935  - LinalgContractionOpInterface
1936structured_op: !LinalgStructuredOpConfig
1937  args:
1938  - !LinalgOperandDefConfig
1939    name: y
1940    kind: input_tensor
1941    type_var: T1
1942    shape_map: affine_map<()[s0, s1] -> (s0)>
1943  - !LinalgOperandDefConfig
1944    name: A
1945    kind: input_tensor
1946    type_var: T2
1947    shape_map: affine_map<()[s0, s1] -> (s0, s1)>
1948  - !LinalgOperandDefConfig
1949    name: x
1950    kind: output_tensor
1951    type_var: U
1952    shape_map: affine_map<()[s0, s1] -> (s1)>
1953  indexing_maps: !LinalgIndexingMapsConfig
1954    static_indexing_maps:
1955    - affine_map<(d0, d1)[s0, s1] -> (d1)>
1956    - affine_map<(d0, d1)[s0, s1] -> (d1, d0)>
1957    - affine_map<(d0, d1)[s0, s1] -> (d0)>
1958  iterator_types:
1959  - parallel
1960  - reduction
1961  assignments:
1962  - !ScalarAssign
1963    arg: x
1964    value: !ScalarExpression
1965      scalar_fn:
1966        kind: binary
1967        fn_name: add
1968        operands:
1969        - !ScalarExpression
1970          scalar_arg: x
1971        - !ScalarExpression
1972          scalar_fn:
1973            kind: binary
1974            fn_name: mul
1975            operands:
1976            - !ScalarExpression
1977              scalar_fn:
1978                kind: type
1979                fn_name: cast_signed
1980                type_var: U
1981                operands:
1982                - !ScalarExpression
1983                  scalar_arg: y
1984            - !ScalarExpression
1985              scalar_fn:
1986                kind: type
1987                fn_name: cast_signed
1988                type_var: U
1989                operands:
1990                - !ScalarExpression
1991                  scalar_arg: A
1992--- !LinalgOpConfig
1993metadata: !LinalgOpMetadata
1994  name: batch_matvec
1995  cpp_class_name: BatchMatvecOp
1996  doc: |-
1997    Performs a batched matrix-vector multiplication.
1998
1999    Numeric casting is performed on the operands to the inner multiply, promoting
2000    them to the same data type as the accumulator/output.
2001  implements:
2002  - LinalgContractionOpInterface
2003structured_op: !LinalgStructuredOpConfig
2004  args:
2005  - !LinalgOperandDefConfig
2006    name: A
2007    kind: input_tensor
2008    type_var: T1
2009    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1, s2)>
2010  - !LinalgOperandDefConfig
2011    name: B
2012    kind: input_tensor
2013    type_var: T2
2014    shape_map: affine_map<()[s0, s1, s2] -> (s0, s2)>
2015  - !LinalgOperandDefConfig
2016    name: C
2017    kind: output_tensor
2018    type_var: U
2019    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1)>
2020  indexing_maps: !LinalgIndexingMapsConfig
2021    static_indexing_maps:
2022    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1, d2)>
2023    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d2)>
2024    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1)>
2025  iterator_types:
2026  - parallel
2027  - parallel
2028  - reduction
2029  assignments:
2030  - !ScalarAssign
2031    arg: C
2032    value: !ScalarExpression
2033      scalar_fn:
2034        kind: binary
2035        fn_name: add
2036        operands:
2037        - !ScalarExpression
2038          scalar_arg: C
2039        - !ScalarExpression
2040          scalar_fn:
2041            kind: binary
2042            fn_name: mul
2043            operands:
2044            - !ScalarExpression
2045              scalar_fn:
2046                kind: type
2047                fn_name: cast_signed
2048                type_var: U
2049                operands:
2050                - !ScalarExpression
2051                  scalar_arg: A
2052            - !ScalarExpression
2053              scalar_fn:
2054                kind: type
2055                fn_name: cast_signed
2056                type_var: U
2057                operands:
2058                - !ScalarExpression
2059                  scalar_arg: B
2060--- !LinalgOpConfig
2061metadata: !LinalgOpMetadata
2062  name: batch_vecmat
2063  cpp_class_name: BatchVecmatOp
2064  doc: |-
2065    Performs a batched matrix-vector multiplication.
2066
2067    Numeric casting is performed on the operands to the inner multiply, promoting
2068    them to the same data type as the accumulator/output.
2069  implements:
2070  - LinalgContractionOpInterface
2071structured_op: !LinalgStructuredOpConfig
2072  args:
2073  - !LinalgOperandDefConfig
2074    name: A
2075    kind: input_tensor
2076    type_var: T1
2077    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1)>
2078  - !LinalgOperandDefConfig
2079    name: B
2080    kind: input_tensor
2081    type_var: T2
2082    shape_map: affine_map<()[s0, s1, s2] -> (s0, s1, s2)>
2083  - !LinalgOperandDefConfig
2084    name: C
2085    kind: output_tensor
2086    type_var: U
2087    shape_map: affine_map<()[s0, s1, s2] -> (s0, s2)>
2088  indexing_maps: !LinalgIndexingMapsConfig
2089    static_indexing_maps:
2090    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d2)>
2091    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d2, d1)>
2092    - affine_map<(d0, d1, d2)[s0, s1, s2] -> (d0, d1)>
2093  iterator_types:
2094  - parallel
2095  - parallel
2096  - reduction
2097  assignments:
2098  - !ScalarAssign
2099    arg: C
2100    value: !ScalarExpression
2101      scalar_fn:
2102        kind: binary
2103        fn_name: add
2104        operands:
2105        - !ScalarExpression
2106          scalar_arg: C
2107        - !ScalarExpression
2108          scalar_fn:
2109            kind: binary
2110            fn_name: mul
2111            operands:
2112            - !ScalarExpression
2113              scalar_fn:
2114                kind: type
2115                fn_name: cast_signed
2116                type_var: U
2117                operands:
2118                - !ScalarExpression
2119                  scalar_arg: A
2120            - !ScalarExpression
2121              scalar_fn:
2122                kind: type
2123                fn_name: cast_signed
2124                type_var: U
2125                operands:
2126                - !ScalarExpression
2127                  scalar_arg: B
2128--- !LinalgOpConfig
2129metadata: !LinalgOpMetadata
2130  name: dot
2131  cpp_class_name: DotOp
2132  doc: |-
2133    Performs a dot product of two vectors to a scalar result.
2134
2135    Numeric casting is performed on the operands to the inner multiply, promoting
2136    them to the same data type as the accumulator/output.
2137  implements:
2138  - LinalgContractionOpInterface
2139structured_op: !LinalgStructuredOpConfig
2140  args:
2141  - !LinalgOperandDefConfig
2142    name: A
2143    kind: input_tensor
2144    type_var: T1
2145    shape_map: affine_map<()[s0] -> (s0)>
2146  - !LinalgOperandDefConfig
2147    name: B
2148    kind: input_tensor
2149    type_var: T2
2150    shape_map: affine_map<()[s0] -> (s0)>
2151  - !LinalgOperandDefConfig
2152    name: C
2153    kind: output_tensor
2154    type_var: U
2155    shape_map: affine_map<()[s0] -> ()>
2156  indexing_maps: !LinalgIndexingMapsConfig
2157    static_indexing_maps:
2158    - affine_map<(d0)[s0] -> (d0)>
2159    - affine_map<(d0)[s0] -> (d0)>
2160    - affine_map<(d0)[s0] -> ()>
2161  iterator_types:
2162  - reduction
2163  assignments:
2164  - !ScalarAssign
2165    arg: C
2166    value: !ScalarExpression
2167      scalar_fn:
2168        kind: binary
2169        fn_name: add
2170        operands:
2171        - !ScalarExpression
2172          scalar_arg: C
2173        - !ScalarExpression
2174          scalar_fn:
2175            kind: binary
2176            fn_name: mul
2177            operands:
2178            - !ScalarExpression
2179              scalar_fn:
2180                kind: type
2181                fn_name: cast_signed
2182                type_var: U
2183                operands:
2184                - !ScalarExpression
2185                  scalar_arg: A
2186            - !ScalarExpression
2187              scalar_fn:
2188                kind: type
2189                fn_name: cast_signed
2190                type_var: U
2191                operands:
2192                - !ScalarExpression
2193                  scalar_arg: B
2194--- !LinalgOpConfig
2195metadata: !LinalgOpMetadata
2196  name: conv_1d
2197  cpp_class_name: Conv1DOp
2198  doc: |-
2199    Performs 1-D convolution with no channels.
2200
2201    Numeric casting is performed on the operands to the inner multiply, promoting
2202    them to the same data type as the accumulator/output.
2203  implements:
2204  - LinalgConvolutionOpInterface
2205structured_op: !LinalgStructuredOpConfig
2206  args:
2207  - !LinalgOperandDefConfig
2208    name: I
2209    kind: input_tensor
2210    type_var: T1
2211    shape_map: affine_map<()[s0, s1] -> (s0 + s1)>
2212  - !LinalgOperandDefConfig
2213    name: K
2214    kind: input_tensor
2215    type_var: T2
2216    shape_map: affine_map<()[s0, s1] -> (s1)>
2217  - !LinalgOperandDefConfig
2218    name: O
2219    kind: output_tensor
2220    type_var: U
2221    shape_map: affine_map<()[s0, s1] -> (s0)>
2222  indexing_maps: !LinalgIndexingMapsConfig
2223    static_indexing_maps:
2224    - affine_map<(d0, d1)[s0, s1] -> (d0 + d1)>
2225    - affine_map<(d0, d1)[s0, s1] -> (d1)>
2226    - affine_map<(d0, d1)[s0, s1] -> (d0)>
2227  iterator_types:
2228  - parallel
2229  - reduction
2230  assignments:
2231  - !ScalarAssign
2232    arg: O
2233    value: !ScalarExpression
2234      scalar_fn:
2235        kind: binary
2236        fn_name: add
2237        operands:
2238        - !ScalarExpression
2239          scalar_arg: O
2240        - !ScalarExpression
2241          scalar_fn:
2242            kind: binary
2243            fn_name: mul
2244            operands:
2245            - !ScalarExpression
2246              scalar_fn:
2247                kind: type
2248                fn_name: cast_signed
2249                type_var: U
2250                operands:
2251                - !ScalarExpression
2252                  scalar_arg: I
2253            - !ScalarExpression
2254              scalar_fn:
2255                kind: type
2256                fn_name: cast_signed
2257                type_var: U
2258                operands:
2259                - !ScalarExpression
2260                  scalar_arg: K
2261--- !LinalgOpConfig
2262metadata: !LinalgOpMetadata
2263  name: conv_2d
2264  cpp_class_name: Conv2DOp
2265  doc: |-
2266    Performs 2-D convolution with no channels.
2267
2268    Numeric casting is performed on the operands to the inner multiply, promoting
2269    them to the same data type as the accumulator/output.
2270  implements:
2271  - LinalgConvolutionOpInterface
2272structured_op: !LinalgStructuredOpConfig
2273  args:
2274  - !LinalgOperandDefConfig
2275    name: I
2276    kind: input_tensor
2277    type_var: T1
2278    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0 + s1, s2 + s3)>
2279  - !LinalgOperandDefConfig
2280    name: K
2281    kind: input_tensor
2282    type_var: T2
2283    shape_map: affine_map<()[s0, s1, s2, s3] -> (s1, s3)>
2284  - !LinalgOperandDefConfig
2285    name: O
2286    kind: output_tensor
2287    type_var: U
2288    shape_map: affine_map<()[s0, s1, s2, s3] -> (s0, s2)>
2289  indexing_maps: !LinalgIndexingMapsConfig
2290    static_indexing_maps:
2291    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0 + d2, d1 + d3)>
2292    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d2, d3)>
2293    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3] -> (d0, d1)>
2294  iterator_types:
2295  - parallel
2296  - parallel
2297  - reduction
2298  - reduction
2299  assignments:
2300  - !ScalarAssign
2301    arg: O
2302    value: !ScalarExpression
2303      scalar_fn:
2304        kind: binary
2305        fn_name: add
2306        operands:
2307        - !ScalarExpression
2308          scalar_arg: O
2309        - !ScalarExpression
2310          scalar_fn:
2311            kind: binary
2312            fn_name: mul
2313            operands:
2314            - !ScalarExpression
2315              scalar_fn:
2316                kind: type
2317                fn_name: cast_signed
2318                type_var: U
2319                operands:
2320                - !ScalarExpression
2321                  scalar_arg: I
2322            - !ScalarExpression
2323              scalar_fn:
2324                kind: type
2325                fn_name: cast_signed
2326                type_var: U
2327                operands:
2328                - !ScalarExpression
2329                  scalar_arg: K
2330--- !LinalgOpConfig
2331metadata: !LinalgOpMetadata
2332  name: conv_3d
2333  cpp_class_name: Conv3DOp
2334  doc: |-
2335    Performs 3-D convolution with no channels.
2336
2337    Numeric casting is performed on the operands to the inner multiply, promoting
2338    them to the same data type as the accumulator/output.
2339  implements:
2340  - LinalgConvolutionOpInterface
2341structured_op: !LinalgStructuredOpConfig
2342  args:
2343  - !LinalgOperandDefConfig
2344    name: I
2345    kind: input_tensor
2346    type_var: T1
2347    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0 + s1, s2 + s3, s4 + s5)>
2348  - !LinalgOperandDefConfig
2349    name: K
2350    kind: input_tensor
2351    type_var: T2
2352    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s1, s3, s5)>
2353  - !LinalgOperandDefConfig
2354    name: O
2355    kind: output_tensor
2356    type_var: U
2357    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s2, s4)>
2358  indexing_maps: !LinalgIndexingMapsConfig
2359    static_indexing_maps:
2360    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d0 + d3, d1
2361      + d4, d2 + d5)>
2362    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d3, d4, d5)>
2363    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
2364  iterator_types:
2365  - parallel
2366  - parallel
2367  - parallel
2368  - reduction
2369  - reduction
2370  - reduction
2371  assignments:
2372  - !ScalarAssign
2373    arg: O
2374    value: !ScalarExpression
2375      scalar_fn:
2376        kind: binary
2377        fn_name: add
2378        operands:
2379        - !ScalarExpression
2380          scalar_arg: O
2381        - !ScalarExpression
2382          scalar_fn:
2383            kind: binary
2384            fn_name: mul
2385            operands:
2386            - !ScalarExpression
2387              scalar_fn:
2388                kind: type
2389                fn_name: cast_signed
2390                type_var: U
2391                operands:
2392                - !ScalarExpression
2393                  scalar_arg: I
2394            - !ScalarExpression
2395              scalar_fn:
2396                kind: type
2397                fn_name: cast_signed
2398                type_var: U
2399                operands:
2400                - !ScalarExpression
2401                  scalar_arg: K
2402--- !LinalgOpConfig
2403metadata: !LinalgOpMetadata
2404  name: conv_1d_nwc_wcf
2405  cpp_class_name: Conv1DNwcWcfOp
2406  doc: |-
2407    Performs 1-D convolution.
2408
2409    Numeric casting is performed on the operands to the inner multiply, promoting
2410    them to the same data type as the accumulator/output.
2411  implements:
2412  - LinalgConvolutionOpInterface
2413structured_op: !LinalgStructuredOpConfig
2414  args:
2415  - !LinalgOperandDefConfig
2416    name: I
2417    kind: input_tensor
2418    type_var: T1
2419    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1 * s2 + s3 * s4,
2420      s5)>
2421  - !LinalgOperandDefConfig
2422    name: K
2423    kind: input_tensor
2424    type_var: T2
2425    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s3, s5, s6)>
2426  - !LinalgOperandDefConfig
2427    name: O
2428    kind: output_tensor
2429    type_var: U
2430    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1, s6)>
2431  - !LinalgOperandDefConfig
2432    name: strides
2433    kind: index_attr
2434    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s2)>
2435    default_indices:
2436    - 1
2437  - !LinalgOperandDefConfig
2438    name: dilations
2439    kind: index_attr
2440    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s4)>
2441    default_indices:
2442    - 1
2443  indexing_maps: !LinalgIndexingMapsConfig
2444    static_indexing_maps:
2445    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d1 * s2
2446      + d3 * s4, d4)>
2447    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d3, d4, d2)>
2448    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d1, d2)>
2449  iterator_types:
2450  - parallel
2451  - parallel
2452  - parallel
2453  - reduction
2454  - reduction
2455  assignments:
2456  - !ScalarAssign
2457    arg: O
2458    value: !ScalarExpression
2459      scalar_fn:
2460        kind: binary
2461        fn_name: add
2462        operands:
2463        - !ScalarExpression
2464          scalar_arg: O
2465        - !ScalarExpression
2466          scalar_fn:
2467            kind: binary
2468            fn_name: mul
2469            operands:
2470            - !ScalarExpression
2471              scalar_fn:
2472                kind: type
2473                fn_name: cast_signed
2474                type_var: U
2475                operands:
2476                - !ScalarExpression
2477                  scalar_arg: I
2478            - !ScalarExpression
2479              scalar_fn:
2480                kind: type
2481                fn_name: cast_signed
2482                type_var: U
2483                operands:
2484                - !ScalarExpression
2485                  scalar_arg: K
2486--- !LinalgOpConfig
2487metadata: !LinalgOpMetadata
2488  name: conv_1d_ncw_fcw
2489  cpp_class_name: Conv1DNcwFcwOp
2490  doc: |-
2491    Performs 1-D convolution.
2492
2493    Layout:
2494      * Input: NCW.
2495      * Kernel: FCW.
2496
2497    Numeric casting is performed on the operands to the inner multiply, promoting
2498    them to the same data type as the accumulator/output.
2499  implements:
2500  - LinalgConvolutionOpInterface
2501structured_op: !LinalgStructuredOpConfig
2502  args:
2503  - !LinalgOperandDefConfig
2504    name: I
2505    kind: input_tensor
2506    type_var: T1
2507    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1, s2 * s3 + s4
2508      * s5)>
2509  - !LinalgOperandDefConfig
2510    name: K
2511    kind: input_tensor
2512    type_var: T2
2513    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s6, s1, s4)>
2514  - !LinalgOperandDefConfig
2515    name: O
2516    kind: output_tensor
2517    type_var: U
2518    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s6, s2)>
2519  - !LinalgOperandDefConfig
2520    name: strides
2521    kind: index_attr
2522    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s3)>
2523    default_indices:
2524    - 1
2525  - !LinalgOperandDefConfig
2526    name: dilations
2527    kind: index_attr
2528    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s5)>
2529    default_indices:
2530    - 1
2531  indexing_maps: !LinalgIndexingMapsConfig
2532    static_indexing_maps:
2533    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d3, d2 *
2534      s3 + d4 * s5)>
2535    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d1, d3, d4)>
2536    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d1, d2)>
2537  iterator_types:
2538  - parallel
2539  - parallel
2540  - parallel
2541  - reduction
2542  - reduction
2543  assignments:
2544  - !ScalarAssign
2545    arg: O
2546    value: !ScalarExpression
2547      scalar_fn:
2548        kind: binary
2549        fn_name: add
2550        operands:
2551        - !ScalarExpression
2552          scalar_arg: O
2553        - !ScalarExpression
2554          scalar_fn:
2555            kind: binary
2556            fn_name: mul
2557            operands:
2558            - !ScalarExpression
2559              scalar_fn:
2560                kind: type
2561                fn_name: cast_signed
2562                type_var: U
2563                operands:
2564                - !ScalarExpression
2565                  scalar_arg: I
2566            - !ScalarExpression
2567              scalar_fn:
2568                kind: type
2569                fn_name: cast_signed
2570                type_var: U
2571                operands:
2572                - !ScalarExpression
2573                  scalar_arg: K
2574--- !LinalgOpConfig
2575metadata: !LinalgOpMetadata
2576  name: conv_2d_nhwc_hwcf
2577  cpp_class_name: Conv2DNhwcHwcfOp
2578  doc: |-
2579    Performs 2-D convolution.
2580
2581    Layout:
2582      * Input: NHWC.
2583      * Kernel: HWCF.
2584
2585    Numeric casting is performed on the operands to the inner multiply, promoting
2586    them to the same data type as the accumulator/output.
2587  implements:
2588  - LinalgConvolutionOpInterface
2589structured_op: !LinalgStructuredOpConfig
2590  args:
2591  - !LinalgOperandDefConfig
2592    name: I
2593    kind: input_tensor
2594    type_var: T1
2595    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2596      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
2597  - !LinalgOperandDefConfig
2598    name: K
2599    kind: input_tensor
2600    type_var: T2
2601    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s3,
2602      s7, s9, s10)>
2603  - !LinalgOperandDefConfig
2604    name: O
2605    kind: output_tensor
2606    type_var: U
2607    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2608      s1, s5, s10)>
2609  - !LinalgOperandDefConfig
2610    name: strides
2611    kind: index_attr
2612    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2613      (s2, s6)>
2614    default_indices:
2615    - 1
2616    - 1
2617  - !LinalgOperandDefConfig
2618    name: dilations
2619    kind: index_attr
2620    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2621      (s4, s8)>
2622    default_indices:
2623    - 1
2624    - 1
2625  indexing_maps: !LinalgIndexingMapsConfig
2626    static_indexing_maps:
2627    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2628      s9, s10] -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d6)>
2629    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2630      s9, s10] -> (d4, d5, d6, d3)>
2631    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2632      s9, s10] -> (d0, d1, d2, d3)>
2633  iterator_types:
2634  - parallel
2635  - parallel
2636  - parallel
2637  - parallel
2638  - reduction
2639  - reduction
2640  - reduction
2641  assignments:
2642  - !ScalarAssign
2643    arg: O
2644    value: !ScalarExpression
2645      scalar_fn:
2646        kind: binary
2647        fn_name: add
2648        operands:
2649        - !ScalarExpression
2650          scalar_arg: O
2651        - !ScalarExpression
2652          scalar_fn:
2653            kind: binary
2654            fn_name: mul
2655            operands:
2656            - !ScalarExpression
2657              scalar_fn:
2658                kind: type
2659                fn_name: cast_signed
2660                type_var: U
2661                operands:
2662                - !ScalarExpression
2663                  scalar_arg: I
2664            - !ScalarExpression
2665              scalar_fn:
2666                kind: type
2667                fn_name: cast_signed
2668                type_var: U
2669                operands:
2670                - !ScalarExpression
2671                  scalar_arg: K
2672--- !LinalgOpConfig
2673metadata: !LinalgOpMetadata
2674  name: conv_2d_nhwc_fhwc
2675  cpp_class_name: Conv2DNhwcFhwcOp
2676  doc: |-
2677    Performs 2-D convolution.
2678
2679    Layout:
2680      * Input: NHWC.
2681      * Kernel: FHWC.
2682
2683    Numeric casting is performed on the operands to the inner multiply, promoting
2684    them to the same data type as the accumulator/output.
2685  implements:
2686  - LinalgConvolutionOpInterface
2687structured_op: !LinalgStructuredOpConfig
2688  args:
2689  - !LinalgOperandDefConfig
2690    name: I
2691    kind: input_tensor
2692    type_var: T1
2693    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2694      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
2695  - !LinalgOperandDefConfig
2696    name: K
2697    kind: input_tensor
2698    type_var: T2
2699    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s10,
2700      s3, s7, s9)>
2701  - !LinalgOperandDefConfig
2702    name: O
2703    kind: output_tensor
2704    type_var: U
2705    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2706      s1, s5, s10)>
2707  - !LinalgOperandDefConfig
2708    name: strides
2709    kind: index_attr
2710    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2711      (s2, s6)>
2712    default_indices:
2713    - 1
2714    - 1
2715  - !LinalgOperandDefConfig
2716    name: dilations
2717    kind: index_attr
2718    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2719      (s4, s8)>
2720    default_indices:
2721    - 1
2722    - 1
2723  indexing_maps: !LinalgIndexingMapsConfig
2724    static_indexing_maps:
2725    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2726      s9, s10] -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d6)>
2727    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2728      s9, s10] -> (d3, d4, d5, d6)>
2729    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2730      s9, s10] -> (d0, d1, d2, d3)>
2731  iterator_types:
2732  - parallel
2733  - parallel
2734  - parallel
2735  - parallel
2736  - reduction
2737  - reduction
2738  - reduction
2739  assignments:
2740  - !ScalarAssign
2741    arg: O
2742    value: !ScalarExpression
2743      scalar_fn:
2744        kind: binary
2745        fn_name: add
2746        operands:
2747        - !ScalarExpression
2748          scalar_arg: O
2749        - !ScalarExpression
2750          scalar_fn:
2751            kind: binary
2752            fn_name: mul
2753            operands:
2754            - !ScalarExpression
2755              scalar_fn:
2756                kind: type
2757                fn_name: cast_signed
2758                type_var: U
2759                operands:
2760                - !ScalarExpression
2761                  scalar_arg: I
2762            - !ScalarExpression
2763              scalar_fn:
2764                kind: type
2765                fn_name: cast_signed
2766                type_var: U
2767                operands:
2768                - !ScalarExpression
2769                  scalar_arg: K
2770--- !LinalgOpConfig
2771metadata: !LinalgOpMetadata
2772  name: conv_2d_nhwc_hwcf_q
2773  cpp_class_name: Conv2DNhwcHwcfQOp
2774  doc: |-
2775    Performs 2-D convolution with zero point offsets.
2776
2777    Layout:
2778      * Input: NHWC.
2779      * Kernel: HWCF.
2780
2781    Numeric casting is performed on the operands to the inner multiply, promoting
2782    them to the same data type as the accumulator/output. This includes the zero
2783    point offsets common to quantized operations.
2784  implements:
2785  - LinalgConvolutionOpInterface
2786structured_op: !LinalgStructuredOpConfig
2787  args:
2788  - !LinalgOperandDefConfig
2789    name: I
2790    kind: input_tensor
2791    type_var: T1
2792    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2793      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
2794  - !LinalgOperandDefConfig
2795    name: K
2796    kind: input_tensor
2797    type_var: T2
2798    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s3,
2799      s7, s9, s10)>
2800  - !LinalgOperandDefConfig
2801    name: IZp
2802    kind: scalar
2803    type_var: I32
2804  - !LinalgOperandDefConfig
2805    name: KZp
2806    kind: scalar
2807    type_var: I32
2808  - !LinalgOperandDefConfig
2809    name: O
2810    kind: output_tensor
2811    type_var: U
2812    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2813      s1, s5, s10)>
2814  - !LinalgOperandDefConfig
2815    name: strides
2816    kind: index_attr
2817    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2818      (s2, s6)>
2819    default_indices:
2820    - 1
2821    - 1
2822  - !LinalgOperandDefConfig
2823    name: dilations
2824    kind: index_attr
2825    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2826      (s4, s8)>
2827    default_indices:
2828    - 1
2829    - 1
2830  indexing_maps: !LinalgIndexingMapsConfig
2831    static_indexing_maps:
2832    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2833      s9, s10] -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d6)>
2834    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2835      s9, s10] -> (d4, d5, d6, d3)>
2836    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2837      s9, s10] -> ()>
2838    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2839      s9, s10] -> ()>
2840    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2841      s9, s10] -> (d0, d1, d2, d3)>
2842  iterator_types:
2843  - parallel
2844  - parallel
2845  - parallel
2846  - parallel
2847  - reduction
2848  - reduction
2849  - reduction
2850  assignments:
2851  - !ScalarAssign
2852    arg: O
2853    value: !ScalarExpression
2854      scalar_fn:
2855        kind: binary
2856        fn_name: add
2857        operands:
2858        - !ScalarExpression
2859          scalar_arg: O
2860        - !ScalarExpression
2861          scalar_fn:
2862            kind: binary
2863            fn_name: mul
2864            operands:
2865            - !ScalarExpression
2866              scalar_fn:
2867                kind: binary
2868                fn_name: sub
2869                operands:
2870                - !ScalarExpression
2871                  scalar_fn:
2872                    kind: type
2873                    fn_name: cast_signed
2874                    type_var: U
2875                    operands:
2876                    - !ScalarExpression
2877                      scalar_arg: I
2878                - !ScalarExpression
2879                  scalar_fn:
2880                    kind: type
2881                    fn_name: cast_signed
2882                    type_var: U
2883                    operands:
2884                    - !ScalarExpression
2885                      scalar_arg: IZp
2886            - !ScalarExpression
2887              scalar_fn:
2888                kind: binary
2889                fn_name: sub
2890                operands:
2891                - !ScalarExpression
2892                  scalar_fn:
2893                    kind: type
2894                    fn_name: cast_signed
2895                    type_var: U
2896                    operands:
2897                    - !ScalarExpression
2898                      scalar_arg: K
2899                - !ScalarExpression
2900                  scalar_fn:
2901                    kind: type
2902                    fn_name: cast_signed
2903                    type_var: U
2904                    operands:
2905                    - !ScalarExpression
2906                      scalar_arg: KZp
2907--- !LinalgOpConfig
2908metadata: !LinalgOpMetadata
2909  name: conv_2d_nhwc_fhwc_q
2910  cpp_class_name: Conv2DNhwcFhwcQOp
2911  doc: |-
2912    Performs 2-D convolution with zero point offsets.
2913
2914    Layout:
2915      * Input: NHWC.
2916      * Kernel: FHWC.
2917
2918    Numeric casting is performed on the operands to the inner multiply, promoting
2919    them to the same data type as the accumulator/output. This includes the zero
2920    point offsets common to quantized operations.
2921  implements:
2922  - LinalgConvolutionOpInterface
2923structured_op: !LinalgStructuredOpConfig
2924  args:
2925  - !LinalgOperandDefConfig
2926    name: I
2927    kind: input_tensor
2928    type_var: T1
2929    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2930      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
2931  - !LinalgOperandDefConfig
2932    name: K
2933    kind: input_tensor
2934    type_var: T2
2935    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s10,
2936      s3, s7, s9)>
2937  - !LinalgOperandDefConfig
2938    name: IZp
2939    kind: scalar
2940    type_var: I32
2941  - !LinalgOperandDefConfig
2942    name: KZp
2943    kind: scalar
2944    type_var: I32
2945  - !LinalgOperandDefConfig
2946    name: O
2947    kind: output_tensor
2948    type_var: U
2949    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
2950      s1, s5, s10)>
2951  - !LinalgOperandDefConfig
2952    name: strides
2953    kind: index_attr
2954    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2955      (s2, s6)>
2956    default_indices:
2957    - 1
2958    - 1
2959  - !LinalgOperandDefConfig
2960    name: dilations
2961    kind: index_attr
2962    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
2963      (s4, s8)>
2964    default_indices:
2965    - 1
2966    - 1
2967  indexing_maps: !LinalgIndexingMapsConfig
2968    static_indexing_maps:
2969    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2970      s9, s10] -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d6)>
2971    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2972      s9, s10] -> (d3, d4, d5, d6)>
2973    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2974      s9, s10] -> ()>
2975    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2976      s9, s10] -> ()>
2977    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
2978      s9, s10] -> (d0, d1, d2, d3)>
2979  iterator_types:
2980  - parallel
2981  - parallel
2982  - parallel
2983  - parallel
2984  - reduction
2985  - reduction
2986  - reduction
2987  assignments:
2988  - !ScalarAssign
2989    arg: O
2990    value: !ScalarExpression
2991      scalar_fn:
2992        kind: binary
2993        fn_name: add
2994        operands:
2995        - !ScalarExpression
2996          scalar_arg: O
2997        - !ScalarExpression
2998          scalar_fn:
2999            kind: binary
3000            fn_name: mul
3001            operands:
3002            - !ScalarExpression
3003              scalar_fn:
3004                kind: binary
3005                fn_name: sub
3006                operands:
3007                - !ScalarExpression
3008                  scalar_fn:
3009                    kind: type
3010                    fn_name: cast_signed
3011                    type_var: U
3012                    operands:
3013                    - !ScalarExpression
3014                      scalar_arg: I
3015                - !ScalarExpression
3016                  scalar_fn:
3017                    kind: type
3018                    fn_name: cast_signed
3019                    type_var: U
3020                    operands:
3021                    - !ScalarExpression
3022                      scalar_arg: IZp
3023            - !ScalarExpression
3024              scalar_fn:
3025                kind: binary
3026                fn_name: sub
3027                operands:
3028                - !ScalarExpression
3029                  scalar_fn:
3030                    kind: type
3031                    fn_name: cast_signed
3032                    type_var: U
3033                    operands:
3034                    - !ScalarExpression
3035                      scalar_arg: K
3036                - !ScalarExpression
3037                  scalar_fn:
3038                    kind: type
3039                    fn_name: cast_signed
3040                    type_var: U
3041                    operands:
3042                    - !ScalarExpression
3043                      scalar_arg: KZp
3044--- !LinalgOpConfig
3045metadata: !LinalgOpMetadata
3046  name: conv_2d_nchw_fchw_q
3047  cpp_class_name: Conv2DNchwFchwQOp
3048  doc: |-
3049    Performs 2-D convolution with zero point offsets.
3050
3051    Layout:
3052      * Input: NCHW.
3053      * Kernel: FCHW.
3054
3055    Numeric casting is performed on the operands to the inner multiply, promoting
3056    them to the same data type as the accumulator/output. This includes the zero
3057    point offsets common to quantized operations.
3058  implements:
3059  - LinalgConvolutionOpInterface
3060structured_op: !LinalgStructuredOpConfig
3061  args:
3062  - !LinalgOperandDefConfig
3063    name: I
3064    kind: input_tensor
3065    type_var: T1
3066    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
3067      s1, s2 * s3 + s4 * s5, s6 * s7 + s8 * s9)>
3068  - !LinalgOperandDefConfig
3069    name: K
3070    kind: input_tensor
3071    type_var: T2
3072    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s10,
3073      s1, s4, s8)>
3074  - !LinalgOperandDefConfig
3075    name: IZp
3076    kind: scalar
3077    type_var: I32
3078  - !LinalgOperandDefConfig
3079    name: KZp
3080    kind: scalar
3081    type_var: I32
3082  - !LinalgOperandDefConfig
3083    name: O
3084    kind: output_tensor
3085    type_var: U
3086    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
3087      s10, s2, s6)>
3088  - !LinalgOperandDefConfig
3089    name: strides
3090    kind: index_attr
3091    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
3092      (s3, s7)>
3093    default_indices:
3094    - 1
3095    - 1
3096  - !LinalgOperandDefConfig
3097    name: dilations
3098    kind: index_attr
3099    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
3100      (s5, s9)>
3101    default_indices:
3102    - 1
3103    - 1
3104  indexing_maps: !LinalgIndexingMapsConfig
3105    static_indexing_maps:
3106    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3107      s9, s10] -> (d0, d4, d2 * s3 + d5 * s5, d3 * s7 + d6 * s9)>
3108    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3109      s9, s10] -> (d1, d4, d5, d6)>
3110    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3111      s9, s10] -> ()>
3112    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3113      s9, s10] -> ()>
3114    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3115      s9, s10] -> (d0, d1, d2, d3)>
3116  iterator_types:
3117  - parallel
3118  - parallel
3119  - parallel
3120  - parallel
3121  - reduction
3122  - reduction
3123  - reduction
3124  assignments:
3125  - !ScalarAssign
3126    arg: O
3127    value: !ScalarExpression
3128      scalar_fn:
3129        kind: binary
3130        fn_name: add
3131        operands:
3132        - !ScalarExpression
3133          scalar_arg: O
3134        - !ScalarExpression
3135          scalar_fn:
3136            kind: binary
3137            fn_name: mul
3138            operands:
3139            - !ScalarExpression
3140              scalar_fn:
3141                kind: binary
3142                fn_name: sub
3143                operands:
3144                - !ScalarExpression
3145                  scalar_fn:
3146                    kind: type
3147                    fn_name: cast_signed
3148                    type_var: U
3149                    operands:
3150                    - !ScalarExpression
3151                      scalar_arg: I
3152                - !ScalarExpression
3153                  scalar_fn:
3154                    kind: type
3155                    fn_name: cast_signed
3156                    type_var: U
3157                    operands:
3158                    - !ScalarExpression
3159                      scalar_arg: IZp
3160            - !ScalarExpression
3161              scalar_fn:
3162                kind: binary
3163                fn_name: sub
3164                operands:
3165                - !ScalarExpression
3166                  scalar_fn:
3167                    kind: type
3168                    fn_name: cast_signed
3169                    type_var: U
3170                    operands:
3171                    - !ScalarExpression
3172                      scalar_arg: K
3173                - !ScalarExpression
3174                  scalar_fn:
3175                    kind: type
3176                    fn_name: cast_signed
3177                    type_var: U
3178                    operands:
3179                    - !ScalarExpression
3180                      scalar_arg: KZp
3181--- !LinalgOpConfig
3182metadata: !LinalgOpMetadata
3183  name: conv_2d_nchw_fchw
3184  cpp_class_name: Conv2DNchwFchwOp
3185  doc: |-
3186    Performs 2-D convolution.
3187
3188    Layout:
3189      * Input: NCHW.
3190      * Kernel: FCHW.
3191
3192    Numeric casting is performed on the operands to the inner multiply, promoting
3193    them to the same data type as the accumulator/output.
3194  implements:
3195  - LinalgConvolutionOpInterface
3196structured_op: !LinalgStructuredOpConfig
3197  args:
3198  - !LinalgOperandDefConfig
3199    name: I
3200    kind: input_tensor
3201    type_var: T1
3202    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
3203      s1, s2 * s3 + s4 * s5, s6 * s7 + s8 * s9)>
3204  - !LinalgOperandDefConfig
3205    name: K
3206    kind: input_tensor
3207    type_var: T2
3208    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s10,
3209      s1, s4, s8)>
3210  - !LinalgOperandDefConfig
3211    name: O
3212    kind: output_tensor
3213    type_var: U
3214    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
3215      s10, s2, s6)>
3216  - !LinalgOperandDefConfig
3217    name: strides
3218    kind: index_attr
3219    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
3220      (s3, s7)>
3221    default_indices:
3222    - 1
3223    - 1
3224  - !LinalgOperandDefConfig
3225    name: dilations
3226    kind: index_attr
3227    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
3228      (s5, s9)>
3229    default_indices:
3230    - 1
3231    - 1
3232  indexing_maps: !LinalgIndexingMapsConfig
3233    static_indexing_maps:
3234    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3235      s9, s10] -> (d0, d4, d2 * s3 + d5 * s5, d3 * s7 + d6 * s9)>
3236    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3237      s9, s10] -> (d1, d4, d5, d6)>
3238    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
3239      s9, s10] -> (d0, d1, d2, d3)>
3240  iterator_types:
3241  - parallel
3242  - parallel
3243  - parallel
3244  - parallel
3245  - reduction
3246  - reduction
3247  - reduction
3248  assignments:
3249  - !ScalarAssign
3250    arg: O
3251    value: !ScalarExpression
3252      scalar_fn:
3253        kind: binary
3254        fn_name: add
3255        operands:
3256        - !ScalarExpression
3257          scalar_arg: O
3258        - !ScalarExpression
3259          scalar_fn:
3260            kind: binary
3261            fn_name: mul
3262            operands:
3263            - !ScalarExpression
3264              scalar_fn:
3265                kind: type
3266                fn_name: cast_signed
3267                type_var: U
3268                operands:
3269                - !ScalarExpression
3270                  scalar_arg: I
3271            - !ScalarExpression
3272              scalar_fn:
3273                kind: type
3274                fn_name: cast_signed
3275                type_var: U
3276                operands:
3277                - !ScalarExpression
3278                  scalar_arg: K
3279--- !LinalgOpConfig
3280metadata: !LinalgOpMetadata
3281  name: conv_2d_ngchw_fgchw
3282  cpp_class_name: Conv2DNgchwFgchwOp
3283  doc: |-
3284    Performs 2-D grouped convolution.
3285
3286    Layout:
3287      * Input: NGCHW.
3288      * Kernel: FGCHW.
3289
3290    Numeric casting is performed on the operands to the inner multiply, promoting
3291    them to the same data type as the accumulator/output.
3292  implements:
3293  - LinalgConvolutionOpInterface
3294structured_op: !LinalgStructuredOpConfig
3295  args:
3296  - !LinalgOperandDefConfig
3297    name: I
3298    kind: input_tensor
3299    type_var: T1
3300    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3301      (s0, s1, s2, s3 * s4 + s5 * s6, s7 * s8 + s9 * s10)>
3302  - !LinalgOperandDefConfig
3303    name: K
3304    kind: input_tensor
3305    type_var: T2
3306    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3307      (s11, s1, s2, s5, s9)>
3308  - !LinalgOperandDefConfig
3309    name: O
3310    kind: output_tensor
3311    type_var: U
3312    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3313      (s0, s1, s11, s3, s7)>
3314  - !LinalgOperandDefConfig
3315    name: strides
3316    kind: index_attr
3317    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3318      -> (s4, s8)>
3319    default_indices:
3320    - 1
3321    - 1
3322  - !LinalgOperandDefConfig
3323    name: dilations
3324    kind: index_attr
3325    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3326      -> (s6, s10)>
3327    default_indices:
3328    - 1
3329    - 1
3330  indexing_maps: !LinalgIndexingMapsConfig
3331    static_indexing_maps:
3332    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3333      s8, s9, s10, s11] -> (d0, d1, d5, d3 * s4 + d6 * s6, d4 * s8 + d7 * s10)>
3334    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3335      s8, s9, s10, s11] -> (d2, d1, d5, d6, d7)>
3336    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3337      s8, s9, s10, s11] -> (d0, d1, d2, d3, d4)>
3338  iterator_types:
3339  - parallel
3340  - parallel
3341  - parallel
3342  - parallel
3343  - parallel
3344  - reduction
3345  - reduction
3346  - reduction
3347  assignments:
3348  - !ScalarAssign
3349    arg: O
3350    value: !ScalarExpression
3351      scalar_fn:
3352        kind: binary
3353        fn_name: add
3354        operands:
3355        - !ScalarExpression
3356          scalar_arg: O
3357        - !ScalarExpression
3358          scalar_fn:
3359            kind: binary
3360            fn_name: mul
3361            operands:
3362            - !ScalarExpression
3363              scalar_fn:
3364                kind: type
3365                fn_name: cast_signed
3366                type_var: U
3367                operands:
3368                - !ScalarExpression
3369                  scalar_arg: I
3370            - !ScalarExpression
3371              scalar_fn:
3372                kind: type
3373                fn_name: cast_signed
3374                type_var: U
3375                operands:
3376                - !ScalarExpression
3377                  scalar_arg: K
3378--- !LinalgOpConfig
3379metadata: !LinalgOpMetadata
3380  name: conv_2d_ngchw_gfchw
3381  cpp_class_name: Conv2DNgchwGfchwOp
3382  doc: |-
3383    Performs 2-D grouped convolution.
3384
3385    Layout:
3386      * Input: NGCHW.
3387      * Kernel: GFCHW.
3388
3389    Numeric casting is performed on the operands to the inner multiply, promoting
3390    them to the same data type as the accumulator/output.
3391  implements:
3392  - LinalgConvolutionOpInterface
3393structured_op: !LinalgStructuredOpConfig
3394  args:
3395  - !LinalgOperandDefConfig
3396    name: I
3397    kind: input_tensor
3398    type_var: T1
3399    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3400      (s0, s1, s2, s3 * s4 + s5 * s6, s7 * s8 + s9 * s10)>
3401  - !LinalgOperandDefConfig
3402    name: K
3403    kind: input_tensor
3404    type_var: T2
3405    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3406      (s1, s11, s2, s5, s9)>
3407  - !LinalgOperandDefConfig
3408    name: O
3409    kind: output_tensor
3410    type_var: U
3411    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3412      (s0, s1, s11, s3, s7)>
3413  - !LinalgOperandDefConfig
3414    name: strides
3415    kind: index_attr
3416    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3417      -> (s4, s8)>
3418    default_indices:
3419    - 1
3420    - 1
3421  - !LinalgOperandDefConfig
3422    name: dilations
3423    kind: index_attr
3424    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3425      -> (s6, s10)>
3426    default_indices:
3427    - 1
3428    - 1
3429  indexing_maps: !LinalgIndexingMapsConfig
3430    static_indexing_maps:
3431    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3432      s8, s9, s10, s11] -> (d0, d1, d5, d3 * s4 + d6 * s6, d4 * s8 + d7 * s10)>
3433    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3434      s8, s9, s10, s11] -> (d1, d2, d5, d6, d7)>
3435    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3436      s8, s9, s10, s11] -> (d0, d1, d2, d3, d4)>
3437  iterator_types:
3438  - parallel
3439  - parallel
3440  - parallel
3441  - parallel
3442  - parallel
3443  - reduction
3444  - reduction
3445  - reduction
3446  assignments:
3447  - !ScalarAssign
3448    arg: O
3449    value: !ScalarExpression
3450      scalar_fn:
3451        kind: binary
3452        fn_name: add
3453        operands:
3454        - !ScalarExpression
3455          scalar_arg: O
3456        - !ScalarExpression
3457          scalar_fn:
3458            kind: binary
3459            fn_name: mul
3460            operands:
3461            - !ScalarExpression
3462              scalar_fn:
3463                kind: type
3464                fn_name: cast_signed
3465                type_var: U
3466                operands:
3467                - !ScalarExpression
3468                  scalar_arg: I
3469            - !ScalarExpression
3470              scalar_fn:
3471                kind: type
3472                fn_name: cast_signed
3473                type_var: U
3474                operands:
3475                - !ScalarExpression
3476                  scalar_arg: K
3477--- !LinalgOpConfig
3478metadata: !LinalgOpMetadata
3479  name: conv_2d_nhwgc_gfhwc
3480  cpp_class_name: Conv2DNhwgcGfhwcOp
3481  doc: |-
3482    Performs 2-D grouped convolution.
3483
3484    Layout:
3485      * Input: NHWGC.
3486      * Kernel: GFHWC.
3487
3488    Numeric casting is performed on the operands to the inner multiply, promoting
3489    them to the same data type as the accumulator/output.
3490  implements:
3491  - LinalgConvolutionOpInterface
3492structured_op: !LinalgStructuredOpConfig
3493  args:
3494  - !LinalgOperandDefConfig
3495    name: I
3496    kind: input_tensor
3497    type_var: T1
3498    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3499      (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9, s10)>
3500  - !LinalgOperandDefConfig
3501    name: K
3502    kind: input_tensor
3503    type_var: T2
3504    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3505      (s9, s11, s3, s7, s10)>
3506  - !LinalgOperandDefConfig
3507    name: O
3508    kind: output_tensor
3509    type_var: U
3510    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3511      (s0, s1, s5, s9, s11)>
3512  - !LinalgOperandDefConfig
3513    name: strides
3514    kind: index_attr
3515    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3516      -> (s2, s6)>
3517    default_indices:
3518    - 1
3519    - 1
3520  - !LinalgOperandDefConfig
3521    name: dilations
3522    kind: index_attr
3523    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3524      -> (s4, s8)>
3525    default_indices:
3526    - 1
3527    - 1
3528  indexing_maps: !LinalgIndexingMapsConfig
3529    static_indexing_maps:
3530    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3531      s8, s9, s10, s11] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3, d7)>
3532    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3533      s8, s9, s10, s11] -> (d3, d4, d5, d6, d7)>
3534    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3535      s8, s9, s10, s11] -> (d0, d1, d2, d3, d4)>
3536  iterator_types:
3537  - parallel
3538  - parallel
3539  - parallel
3540  - parallel
3541  - parallel
3542  - reduction
3543  - reduction
3544  - reduction
3545  assignments:
3546  - !ScalarAssign
3547    arg: O
3548    value: !ScalarExpression
3549      scalar_fn:
3550        kind: binary
3551        fn_name: add
3552        operands:
3553        - !ScalarExpression
3554          scalar_arg: O
3555        - !ScalarExpression
3556          scalar_fn:
3557            kind: binary
3558            fn_name: mul
3559            operands:
3560            - !ScalarExpression
3561              scalar_fn:
3562                kind: type
3563                fn_name: cast_signed
3564                type_var: U
3565                operands:
3566                - !ScalarExpression
3567                  scalar_arg: I
3568            - !ScalarExpression
3569              scalar_fn:
3570                kind: type
3571                fn_name: cast_signed
3572                type_var: U
3573                operands:
3574                - !ScalarExpression
3575                  scalar_arg: K
3576--- !LinalgOpConfig
3577metadata: !LinalgOpMetadata
3578  name: conv_2d_nhwgc_gfhwc_q
3579  cpp_class_name: Conv2DNhwgcGfhwcQOp
3580  doc: |-
3581    Performs 2-D grouped convolution with zero point offsets.
3582
3583    Layout:
3584      * Input: NHWGC.
3585      * Kernel: GFHWC.
3586
3587    Numeric casting is performed on the operands to the inner multiply, promoting
3588    them to the same data type as the accumulator/output. This includes the zero
3589    point offsets common to quantized operations.
3590  implements:
3591  - LinalgConvolutionOpInterface
3592structured_op: !LinalgStructuredOpConfig
3593  args:
3594  - !LinalgOperandDefConfig
3595    name: I
3596    kind: input_tensor
3597    type_var: T1
3598    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3599      (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9, s10)>
3600  - !LinalgOperandDefConfig
3601    name: K
3602    kind: input_tensor
3603    type_var: T2
3604    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3605      (s9, s11, s3, s7, s10)>
3606  - !LinalgOperandDefConfig
3607    name: IZp
3608    kind: scalar
3609    type_var: I32
3610  - !LinalgOperandDefConfig
3611    name: KZp
3612    kind: scalar
3613    type_var: I32
3614  - !LinalgOperandDefConfig
3615    name: O
3616    kind: output_tensor
3617    type_var: U
3618    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3619      (s0, s1, s5, s9, s11)>
3620  - !LinalgOperandDefConfig
3621    name: strides
3622    kind: index_attr
3623    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3624      -> (s2, s6)>
3625    default_indices:
3626    - 1
3627    - 1
3628  - !LinalgOperandDefConfig
3629    name: dilations
3630    kind: index_attr
3631    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3632      -> (s4, s8)>
3633    default_indices:
3634    - 1
3635    - 1
3636  indexing_maps: !LinalgIndexingMapsConfig
3637    static_indexing_maps:
3638    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3639      s8, s9, s10, s11] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3, d7)>
3640    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3641      s8, s9, s10, s11] -> (d3, d4, d5, d6, d7)>
3642    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3643      s8, s9, s10, s11] -> ()>
3644    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3645      s8, s9, s10, s11] -> ()>
3646    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3647      s8, s9, s10, s11] -> (d0, d1, d2, d3, d4)>
3648  iterator_types:
3649  - parallel
3650  - parallel
3651  - parallel
3652  - parallel
3653  - parallel
3654  - reduction
3655  - reduction
3656  - reduction
3657  assignments:
3658  - !ScalarAssign
3659    arg: O
3660    value: !ScalarExpression
3661      scalar_fn:
3662        kind: binary
3663        fn_name: add
3664        operands:
3665        - !ScalarExpression
3666          scalar_arg: O
3667        - !ScalarExpression
3668          scalar_fn:
3669            kind: binary
3670            fn_name: mul
3671            operands:
3672            - !ScalarExpression
3673              scalar_fn:
3674                kind: binary
3675                fn_name: sub
3676                operands:
3677                - !ScalarExpression
3678                  scalar_fn:
3679                    kind: type
3680                    fn_name: cast_signed
3681                    type_var: U
3682                    operands:
3683                    - !ScalarExpression
3684                      scalar_arg: I
3685                - !ScalarExpression
3686                  scalar_fn:
3687                    kind: type
3688                    fn_name: cast_signed
3689                    type_var: U
3690                    operands:
3691                    - !ScalarExpression
3692                      scalar_arg: IZp
3693            - !ScalarExpression
3694              scalar_fn:
3695                kind: binary
3696                fn_name: sub
3697                operands:
3698                - !ScalarExpression
3699                  scalar_fn:
3700                    kind: type
3701                    fn_name: cast_signed
3702                    type_var: U
3703                    operands:
3704                    - !ScalarExpression
3705                      scalar_arg: K
3706                - !ScalarExpression
3707                  scalar_fn:
3708                    kind: type
3709                    fn_name: cast_signed
3710                    type_var: U
3711                    operands:
3712                    - !ScalarExpression
3713                      scalar_arg: KZp
3714--- !LinalgOpConfig
3715metadata: !LinalgOpMetadata
3716  name: conv_2d_ngchw_gfchw_q
3717  cpp_class_name: Conv2DNgchwGfchwQOp
3718  doc: |-
3719    Performs 2-D grouped convolution with zero-point offsets.
3720
3721    Layout:
3722      * Input: NGCHW.
3723      * Kernel: GFCHW.
3724
3725    Numeric casting is performed on the operands to the inner multiply, promoting
3726    them to the same data type as the accumulator/output. This includes the zero
3727    point offsets common to quantized operations.
3728  implements:
3729  - LinalgConvolutionOpInterface
3730structured_op: !LinalgStructuredOpConfig
3731  args:
3732  - !LinalgOperandDefConfig
3733    name: I
3734    kind: input_tensor
3735    type_var: T1
3736    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3737      (s0, s1, s2, s3 * s4 + s5 * s6, s7 * s8 + s9 * s10)>
3738  - !LinalgOperandDefConfig
3739    name: K
3740    kind: input_tensor
3741    type_var: T2
3742    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3743      (s1, s11, s2, s5, s9)>
3744  - !LinalgOperandDefConfig
3745    name: IZp
3746    kind: scalar
3747    type_var: I32
3748  - !LinalgOperandDefConfig
3749    name: KZp
3750    kind: scalar
3751    type_var: I32
3752  - !LinalgOperandDefConfig
3753    name: O
3754    kind: output_tensor
3755    type_var: U
3756    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11] ->
3757      (s0, s1, s11, s3, s7)>
3758  - !LinalgOperandDefConfig
3759    name: strides
3760    kind: index_attr
3761    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3762      -> (s4, s8)>
3763    default_indices:
3764    - 1
3765    - 1
3766  - !LinalgOperandDefConfig
3767    name: dilations
3768    kind: index_attr
3769    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11]
3770      -> (s6, s10)>
3771    default_indices:
3772    - 1
3773    - 1
3774  indexing_maps: !LinalgIndexingMapsConfig
3775    static_indexing_maps:
3776    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3777      s8, s9, s10, s11] -> (d0, d1, d5, d3 * s4 + d6 * s6, d4 * s8 + d7 * s10)>
3778    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3779      s8, s9, s10, s11] -> (d1, d2, d5, d6, d7)>
3780    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3781      s8, s9, s10, s11] -> ()>
3782    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3783      s8, s9, s10, s11] -> ()>
3784    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
3785      s8, s9, s10, s11] -> (d0, d1, d2, d3, d4)>
3786  iterator_types:
3787  - parallel
3788  - parallel
3789  - parallel
3790  - parallel
3791  - parallel
3792  - reduction
3793  - reduction
3794  - reduction
3795  assignments:
3796  - !ScalarAssign
3797    arg: O
3798    value: !ScalarExpression
3799      scalar_fn:
3800        kind: binary
3801        fn_name: add
3802        operands:
3803        - !ScalarExpression
3804          scalar_arg: O
3805        - !ScalarExpression
3806          scalar_fn:
3807            kind: binary
3808            fn_name: mul
3809            operands:
3810            - !ScalarExpression
3811              scalar_fn:
3812                kind: binary
3813                fn_name: sub
3814                operands:
3815                - !ScalarExpression
3816                  scalar_fn:
3817                    kind: type
3818                    fn_name: cast_signed
3819                    type_var: U
3820                    operands:
3821                    - !ScalarExpression
3822                      scalar_arg: I
3823                - !ScalarExpression
3824                  scalar_fn:
3825                    kind: type
3826                    fn_name: cast_signed
3827                    type_var: U
3828                    operands:
3829                    - !ScalarExpression
3830                      scalar_arg: IZp
3831            - !ScalarExpression
3832              scalar_fn:
3833                kind: binary
3834                fn_name: sub
3835                operands:
3836                - !ScalarExpression
3837                  scalar_fn:
3838                    kind: type
3839                    fn_name: cast_signed
3840                    type_var: U
3841                    operands:
3842                    - !ScalarExpression
3843                      scalar_arg: K
3844                - !ScalarExpression
3845                  scalar_fn:
3846                    kind: type
3847                    fn_name: cast_signed
3848                    type_var: U
3849                    operands:
3850                    - !ScalarExpression
3851                      scalar_arg: KZp
3852--- !LinalgOpConfig
3853metadata: !LinalgOpMetadata
3854  name: conv_3d_ndhwc_dhwcf
3855  cpp_class_name: Conv3DNdhwcDhwcfOp
3856  doc: |-
3857    Performs 3-D convolution.
3858
3859    Numeric casting is performed on the operands to the inner multiply, promoting
3860    them to the same data type as the accumulator/output.
3861  implements:
3862  - LinalgConvolutionOpInterface
3863structured_op: !LinalgStructuredOpConfig
3864  args:
3865  - !LinalgOperandDefConfig
3866    name: I
3867    kind: input_tensor
3868    type_var: T1
3869    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3870      s13, s14] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12,
3871      s13)>
3872  - !LinalgOperandDefConfig
3873    name: K
3874    kind: input_tensor
3875    type_var: T2
3876    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3877      s13, s14] -> (s3, s7, s11, s13, s14)>
3878  - !LinalgOperandDefConfig
3879    name: O
3880    kind: output_tensor
3881    type_var: U
3882    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3883      s13, s14] -> (s0, s1, s5, s9, s14)>
3884  - !LinalgOperandDefConfig
3885    name: strides
3886    kind: index_attr
3887    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
3888      s12, s13, s14] -> (s2, s6, s10)>
3889    default_indices:
3890    - 1
3891    - 1
3892    - 1
3893  - !LinalgOperandDefConfig
3894    name: dilations
3895    kind: index_attr
3896    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
3897      s12, s13, s14] -> (s4, s8, s12)>
3898    default_indices:
3899    - 1
3900    - 1
3901    - 1
3902  indexing_maps: !LinalgIndexingMapsConfig
3903    static_indexing_maps:
3904    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
3905      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6
3906      * s8, d3 * s10 + d7 * s12, d8)>
3907    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
3908      s7, s8, s9, s10, s11, s12, s13, s14] -> (d5, d6, d7, d8, d4)>
3909    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
3910      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1, d2, d3, d4)>
3911  iterator_types:
3912  - parallel
3913  - parallel
3914  - parallel
3915  - parallel
3916  - parallel
3917  - reduction
3918  - reduction
3919  - reduction
3920  - reduction
3921  assignments:
3922  - !ScalarAssign
3923    arg: O
3924    value: !ScalarExpression
3925      scalar_fn:
3926        kind: binary
3927        fn_name: add
3928        operands:
3929        - !ScalarExpression
3930          scalar_arg: O
3931        - !ScalarExpression
3932          scalar_fn:
3933            kind: binary
3934            fn_name: mul
3935            operands:
3936            - !ScalarExpression
3937              scalar_fn:
3938                kind: type
3939                fn_name: cast_signed
3940                type_var: U
3941                operands:
3942                - !ScalarExpression
3943                  scalar_arg: I
3944            - !ScalarExpression
3945              scalar_fn:
3946                kind: type
3947                fn_name: cast_signed
3948                type_var: U
3949                operands:
3950                - !ScalarExpression
3951                  scalar_arg: K
3952--- !LinalgOpConfig
3953metadata: !LinalgOpMetadata
3954  name: conv_3d_ndhwc_dhwcf_q
3955  cpp_class_name: Conv3DNdhwcDhwcfQOp
3956  doc: |-
3957    Performs 3-D convolution with zero point offsets.
3958
3959    Numeric casting is performed on the operands to the inner multiply, promoting
3960    them to the same data type as the accumulator/output. This includes the zero
3961    point offsets common to quantized operations.
3962  implements:
3963  - LinalgConvolutionOpInterface
3964structured_op: !LinalgStructuredOpConfig
3965  args:
3966  - !LinalgOperandDefConfig
3967    name: I
3968    kind: input_tensor
3969    type_var: T1
3970    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3971      s13, s14] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12,
3972      s13)>
3973  - !LinalgOperandDefConfig
3974    name: K
3975    kind: input_tensor
3976    type_var: T2
3977    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3978      s13, s14] -> (s3, s7, s11, s13, s14)>
3979  - !LinalgOperandDefConfig
3980    name: IZp
3981    kind: scalar
3982    type_var: I32
3983  - !LinalgOperandDefConfig
3984    name: KZp
3985    kind: scalar
3986    type_var: I32
3987  - !LinalgOperandDefConfig
3988    name: O
3989    kind: output_tensor
3990    type_var: U
3991    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
3992      s13, s14] -> (s0, s1, s5, s9, s14)>
3993  - !LinalgOperandDefConfig
3994    name: strides
3995    kind: index_attr
3996    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
3997      s12, s13, s14] -> (s2, s6, s10)>
3998    default_indices:
3999    - 1
4000    - 1
4001    - 1
4002  - !LinalgOperandDefConfig
4003    name: dilations
4004    kind: index_attr
4005    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
4006      s12, s13, s14] -> (s4, s8, s12)>
4007    default_indices:
4008    - 1
4009    - 1
4010    - 1
4011  indexing_maps: !LinalgIndexingMapsConfig
4012    static_indexing_maps:
4013    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4014      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6
4015      * s8, d3 * s10 + d7 * s12, d8)>
4016    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4017      s7, s8, s9, s10, s11, s12, s13, s14] -> (d5, d6, d7, d8, d4)>
4018    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4019      s7, s8, s9, s10, s11, s12, s13, s14] -> ()>
4020    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4021      s7, s8, s9, s10, s11, s12, s13, s14] -> ()>
4022    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4023      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1, d2, d3, d4)>
4024  iterator_types:
4025  - parallel
4026  - parallel
4027  - parallel
4028  - parallel
4029  - parallel
4030  - reduction
4031  - reduction
4032  - reduction
4033  - reduction
4034  assignments:
4035  - !ScalarAssign
4036    arg: O
4037    value: !ScalarExpression
4038      scalar_fn:
4039        kind: binary
4040        fn_name: add
4041        operands:
4042        - !ScalarExpression
4043          scalar_arg: O
4044        - !ScalarExpression
4045          scalar_fn:
4046            kind: binary
4047            fn_name: mul
4048            operands:
4049            - !ScalarExpression
4050              scalar_fn:
4051                kind: binary
4052                fn_name: sub
4053                operands:
4054                - !ScalarExpression
4055                  scalar_fn:
4056                    kind: type
4057                    fn_name: cast_signed
4058                    type_var: U
4059                    operands:
4060                    - !ScalarExpression
4061                      scalar_arg: I
4062                - !ScalarExpression
4063                  scalar_fn:
4064                    kind: type
4065                    fn_name: cast_signed
4066                    type_var: U
4067                    operands:
4068                    - !ScalarExpression
4069                      scalar_arg: IZp
4070            - !ScalarExpression
4071              scalar_fn:
4072                kind: binary
4073                fn_name: sub
4074                operands:
4075                - !ScalarExpression
4076                  scalar_fn:
4077                    kind: type
4078                    fn_name: cast_signed
4079                    type_var: U
4080                    operands:
4081                    - !ScalarExpression
4082                      scalar_arg: K
4083                - !ScalarExpression
4084                  scalar_fn:
4085                    kind: type
4086                    fn_name: cast_signed
4087                    type_var: U
4088                    operands:
4089                    - !ScalarExpression
4090                      scalar_arg: KZp
4091--- !LinalgOpConfig
4092metadata: !LinalgOpMetadata
4093  name: conv_3d_ncdhw_fcdhw
4094  cpp_class_name: Conv3DNcdhwFcdhwOp
4095  doc: |-
4096    Performs 3-D convolution.
4097
4098    Numeric casting is performed on the operands to the inner multiply, promoting
4099    them to the same data type as the accumulator/output.
4100  implements:
4101  - LinalgConvolutionOpInterface
4102structured_op: !LinalgStructuredOpConfig
4103  args:
4104  - !LinalgOperandDefConfig
4105    name: I
4106    kind: input_tensor
4107    type_var: T1
4108    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
4109      s13, s14] -> (s0, s1, s2 * s3 + s4 * s5, s6 * s7 + s8 * s9, s10 * s11 + s12
4110      * s13)>
4111  - !LinalgOperandDefConfig
4112    name: K
4113    kind: input_tensor
4114    type_var: T2
4115    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
4116      s13, s14] -> (s14, s1, s4, s8, s12)>
4117  - !LinalgOperandDefConfig
4118    name: O
4119    kind: output_tensor
4120    type_var: U
4121    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
4122      s13, s14] -> (s0, s14, s2, s6, s10)>
4123  - !LinalgOperandDefConfig
4124    name: strides
4125    kind: index_attr
4126    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
4127      s12, s13, s14] -> (s3, s7, s11)>
4128    default_indices:
4129    - 1
4130    - 1
4131    - 1
4132  - !LinalgOperandDefConfig
4133    name: dilations
4134    kind: index_attr
4135    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
4136      s12, s13, s14] -> (s5, s9, s13)>
4137    default_indices:
4138    - 1
4139    - 1
4140    - 1
4141  indexing_maps: !LinalgIndexingMapsConfig
4142    static_indexing_maps:
4143    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4144      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d8, d1 * s3 + d5 * s5, d2 * s7
4145      + d6 * s9, d3 * s11 + d7 * s13)>
4146    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4147      s7, s8, s9, s10, s11, s12, s13, s14] -> (d4, d8, d5, d6, d7)>
4148    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
4149      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d4, d1, d2, d3)>
4150  iterator_types:
4151  - parallel
4152  - parallel
4153  - parallel
4154  - parallel
4155  - parallel
4156  - reduction
4157  - reduction
4158  - reduction
4159  - reduction
4160  assignments:
4161  - !ScalarAssign
4162    arg: O
4163    value: !ScalarExpression
4164      scalar_fn:
4165        kind: binary
4166        fn_name: add
4167        operands:
4168        - !ScalarExpression
4169          scalar_arg: O
4170        - !ScalarExpression
4171          scalar_fn:
4172            kind: binary
4173            fn_name: mul
4174            operands:
4175            - !ScalarExpression
4176              scalar_fn:
4177                kind: type
4178                fn_name: cast_signed
4179                type_var: U
4180                operands:
4181                - !ScalarExpression
4182                  scalar_arg: I
4183            - !ScalarExpression
4184              scalar_fn:
4185                kind: type
4186                fn_name: cast_signed
4187                type_var: U
4188                operands:
4189                - !ScalarExpression
4190                  scalar_arg: K
4191--- !LinalgOpConfig
4192metadata: !LinalgOpMetadata
4193  name: depthwise_conv_1d_nwc_wc
4194  cpp_class_name: DepthwiseConv1DNwcWcOp
4195  doc: |-
4196    Performs depth-wise 1-D convolution.
4197
4198    Numeric casting is performed on the operands to the inner multiply, promoting
4199    them to the same data type as the accumulator/output. Multiplier is set to 1
4200    which is a special case for most depthwise convolutions.
4201  implements:
4202  - LinalgConvolutionOpInterface
4203structured_op: !LinalgStructuredOpConfig
4204  args:
4205  - !LinalgOperandDefConfig
4206    name: I
4207    kind: input_tensor
4208    type_var: T1
4209    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
4210  - !LinalgOperandDefConfig
4211    name: K
4212    kind: input_tensor
4213    type_var: T2
4214    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3, s5)>
4215  - !LinalgOperandDefConfig
4216    name: O
4217    kind: output_tensor
4218    type_var: U
4219    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
4220  - !LinalgOperandDefConfig
4221    name: strides
4222    kind: index_attr
4223    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
4224    default_indices:
4225    - 1
4226  - !LinalgOperandDefConfig
4227    name: dilations
4228    kind: index_attr
4229    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
4230    default_indices:
4231    - 1
4232  indexing_maps: !LinalgIndexingMapsConfig
4233    static_indexing_maps:
4234    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
4235      d2)>
4236    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3, d2)>
4237    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
4238  iterator_types:
4239  - parallel
4240  - parallel
4241  - parallel
4242  - reduction
4243  assignments:
4244  - !ScalarAssign
4245    arg: O
4246    value: !ScalarExpression
4247      scalar_fn:
4248        kind: binary
4249        fn_name: add
4250        operands:
4251        - !ScalarExpression
4252          scalar_arg: O
4253        - !ScalarExpression
4254          scalar_fn:
4255            kind: binary
4256            fn_name: mul
4257            operands:
4258            - !ScalarExpression
4259              scalar_fn:
4260                kind: type
4261                fn_name: cast_signed
4262                type_var: U
4263                operands:
4264                - !ScalarExpression
4265                  scalar_arg: I
4266            - !ScalarExpression
4267              scalar_fn:
4268                kind: type
4269                fn_name: cast_signed
4270                type_var: U
4271                operands:
4272                - !ScalarExpression
4273                  scalar_arg: K
4274--- !LinalgOpConfig
4275metadata: !LinalgOpMetadata
4276  name: depthwise_conv_1d_ncw_cw
4277  cpp_class_name: DepthwiseConv1DNcwCwOp
4278  doc: |-
4279    Performs depth-wise 1-D convolution.
4280
4281    Numeric casting is performed on the operands to the inner multiply, promoting
4282    them to the same data type as the accumulator/output. Multiplier is set to 1
4283    which is a special case for most depthwise convolutions.
4284  implements:
4285  - LinalgConvolutionOpInterface
4286structured_op: !LinalgStructuredOpConfig
4287  args:
4288  - !LinalgOperandDefConfig
4289    name: I
4290    kind: input_tensor
4291    type_var: T1
4292    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2 * s3 + s4 * s5)>
4293  - !LinalgOperandDefConfig
4294    name: K
4295    kind: input_tensor
4296    type_var: T2
4297    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s1, s4)>
4298  - !LinalgOperandDefConfig
4299    name: O
4300    kind: output_tensor
4301    type_var: U
4302    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2)>
4303  - !LinalgOperandDefConfig
4304    name: strides
4305    kind: index_attr
4306    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
4307    default_indices:
4308    - 1
4309  - !LinalgOperandDefConfig
4310    name: dilations
4311    kind: index_attr
4312    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s5)>
4313    default_indices:
4314    - 1
4315  indexing_maps: !LinalgIndexingMapsConfig
4316    static_indexing_maps:
4317    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d2, d1 * s3 + d3
4318      * s5)>
4319    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d2, d3)>
4320    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d2, d1)>
4321  iterator_types:
4322  - parallel
4323  - parallel
4324  - parallel
4325  - reduction
4326  assignments:
4327  - !ScalarAssign
4328    arg: O
4329    value: !ScalarExpression
4330      scalar_fn:
4331        kind: binary
4332        fn_name: add
4333        operands:
4334        - !ScalarExpression
4335          scalar_arg: O
4336        - !ScalarExpression
4337          scalar_fn:
4338            kind: binary
4339            fn_name: mul
4340            operands:
4341            - !ScalarExpression
4342              scalar_fn:
4343                kind: type
4344                fn_name: cast_signed
4345                type_var: U
4346                operands:
4347                - !ScalarExpression
4348                  scalar_arg: I
4349            - !ScalarExpression
4350              scalar_fn:
4351                kind: type
4352                fn_name: cast_signed
4353                type_var: U
4354                operands:
4355                - !ScalarExpression
4356                  scalar_arg: K
4357--- !LinalgOpConfig
4358metadata: !LinalgOpMetadata
4359  name: depthwise_conv_1d_nwc_wcm
4360  cpp_class_name: DepthwiseConv1DNwcWcmOp
4361  doc: |-
4362    Performs depth-wise 1-D convolution.
4363
4364    Numeric casting is performed on the operands to the inner multiply, promoting
4365    them to the same data type as the accumulator/output.
4366  implements:
4367  - LinalgConvolutionOpInterface
4368structured_op: !LinalgStructuredOpConfig
4369  args:
4370  - !LinalgOperandDefConfig
4371    name: I
4372    kind: input_tensor
4373    type_var: T1
4374    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1 * s2 + s3 * s4,
4375      s5)>
4376  - !LinalgOperandDefConfig
4377    name: K
4378    kind: input_tensor
4379    type_var: T2
4380    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s3, s5, s6)>
4381  - !LinalgOperandDefConfig
4382    name: O
4383    kind: output_tensor
4384    type_var: U
4385    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s0, s1, s5, s6)>
4386  - !LinalgOperandDefConfig
4387    name: strides
4388    kind: index_attr
4389    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s2)>
4390    default_indices:
4391    - 1
4392  - !LinalgOperandDefConfig
4393    name: dilations
4394    kind: index_attr
4395    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6] -> (s4)>
4396    default_indices:
4397    - 1
4398  indexing_maps: !LinalgIndexingMapsConfig
4399    static_indexing_maps:
4400    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d1 * s2
4401      + d4 * s4, d2)>
4402    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d4, d2, d3)>
4403    - affine_map<(d0, d1, d2, d3, d4)[s0, s1, s2, s3, s4, s5, s6] -> (d0, d1, d2,
4404      d3)>
4405  iterator_types:
4406  - parallel
4407  - parallel
4408  - parallel
4409  - parallel
4410  - reduction
4411  assignments:
4412  - !ScalarAssign
4413    arg: O
4414    value: !ScalarExpression
4415      scalar_fn:
4416        kind: binary
4417        fn_name: add
4418        operands:
4419        - !ScalarExpression
4420          scalar_arg: O
4421        - !ScalarExpression
4422          scalar_fn:
4423            kind: binary
4424            fn_name: mul
4425            operands:
4426            - !ScalarExpression
4427              scalar_fn:
4428                kind: type
4429                fn_name: cast_signed
4430                type_var: U
4431                operands:
4432                - !ScalarExpression
4433                  scalar_arg: I
4434            - !ScalarExpression
4435              scalar_fn:
4436                kind: type
4437                fn_name: cast_signed
4438                type_var: U
4439                operands:
4440                - !ScalarExpression
4441                  scalar_arg: K
4442--- !LinalgOpConfig
4443metadata: !LinalgOpMetadata
4444  name: depthwise_conv_2d_nhwc_hwc
4445  cpp_class_name: DepthwiseConv2DNhwcHwcOp
4446  doc: |-
4447    Performs depth-wise 2-D convolution.
4448
4449    Numeric casting is performed on the operands to the inner multiply, promoting
4450    them to the same data type as the accumulator/output. Multiplier is set to 1
4451    which is a special case for most depthwise convolutions.
4452  implements:
4453  - LinalgConvolutionOpInterface
4454structured_op: !LinalgStructuredOpConfig
4455  args:
4456  - !LinalgOperandDefConfig
4457    name: I
4458    kind: input_tensor
4459    type_var: T1
4460    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
4461      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
4462  - !LinalgOperandDefConfig
4463    name: K
4464    kind: input_tensor
4465    type_var: T2
4466    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7, s9)>
4467  - !LinalgOperandDefConfig
4468    name: O
4469    kind: output_tensor
4470    type_var: U
4471    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
4472      s9)>
4473  - !LinalgOperandDefConfig
4474    name: strides
4475    kind: index_attr
4476    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
4477      s6)>
4478    default_indices:
4479    - 1
4480    - 1
4481  - !LinalgOperandDefConfig
4482    name: dilations
4483    kind: index_attr
4484    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
4485      s8)>
4486    default_indices:
4487    - 1
4488    - 1
4489  indexing_maps: !LinalgIndexingMapsConfig
4490    static_indexing_maps:
4491    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4492      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
4493    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4494      -> (d4, d5, d3)>
4495    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4496      -> (d0, d1, d2, d3)>
4497  iterator_types:
4498  - parallel
4499  - parallel
4500  - parallel
4501  - parallel
4502  - reduction
4503  - reduction
4504  assignments:
4505  - !ScalarAssign
4506    arg: O
4507    value: !ScalarExpression
4508      scalar_fn:
4509        kind: binary
4510        fn_name: add
4511        operands:
4512        - !ScalarExpression
4513          scalar_arg: O
4514        - !ScalarExpression
4515          scalar_fn:
4516            kind: binary
4517            fn_name: mul
4518            operands:
4519            - !ScalarExpression
4520              scalar_fn:
4521                kind: type
4522                fn_name: cast_signed
4523                type_var: U
4524                operands:
4525                - !ScalarExpression
4526                  scalar_arg: I
4527            - !ScalarExpression
4528              scalar_fn:
4529                kind: type
4530                fn_name: cast_signed
4531                type_var: U
4532                operands:
4533                - !ScalarExpression
4534                  scalar_arg: K
4535--- !LinalgOpConfig
4536metadata: !LinalgOpMetadata
4537  name: depthwise_conv_2d_nchw_chw
4538  cpp_class_name: DepthwiseConv2DNchwChwOp
4539  doc: |-
4540    Performs depth-wise 2-D convolution.
4541
4542    Numeric casting is performed on the operands to the inner multiply, promoting
4543    them to the same data type as the accumulator/output. Multiplier is set to 1
4544    which is a special case for most depthwise convolutions.
4545  implements:
4546  - LinalgConvolutionOpInterface
4547structured_op: !LinalgStructuredOpConfig
4548  args:
4549  - !LinalgOperandDefConfig
4550    name: I
4551    kind: input_tensor
4552    type_var: T1
4553    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2
4554      * s3 + s4 * s5, s6 * s7 + s8 * s9)>
4555  - !LinalgOperandDefConfig
4556    name: K
4557    kind: input_tensor
4558    type_var: T2
4559    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s1, s4, s8)>
4560  - !LinalgOperandDefConfig
4561    name: O
4562    kind: output_tensor
4563    type_var: U
4564    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2,
4565      s6)>
4566  - !LinalgOperandDefConfig
4567    name: strides
4568    kind: index_attr
4569    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3,
4570      s7)>
4571    default_indices:
4572    - 1
4573    - 1
4574  - !LinalgOperandDefConfig
4575    name: dilations
4576    kind: index_attr
4577    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s5,
4578      s9)>
4579    default_indices:
4580    - 1
4581    - 1
4582  indexing_maps: !LinalgIndexingMapsConfig
4583    static_indexing_maps:
4584    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4585      -> (d0, d3, d1 * s3 + d4 * s5, d2 * s7 + d5 * s9)>
4586    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4587      -> (d3, d4, d5)>
4588    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4589      -> (d0, d3, d1, d2)>
4590  iterator_types:
4591  - parallel
4592  - parallel
4593  - parallel
4594  - parallel
4595  - reduction
4596  - reduction
4597  assignments:
4598  - !ScalarAssign
4599    arg: O
4600    value: !ScalarExpression
4601      scalar_fn:
4602        kind: binary
4603        fn_name: add
4604        operands:
4605        - !ScalarExpression
4606          scalar_arg: O
4607        - !ScalarExpression
4608          scalar_fn:
4609            kind: binary
4610            fn_name: mul
4611            operands:
4612            - !ScalarExpression
4613              scalar_fn:
4614                kind: type
4615                fn_name: cast_signed
4616                type_var: U
4617                operands:
4618                - !ScalarExpression
4619                  scalar_arg: I
4620            - !ScalarExpression
4621              scalar_fn:
4622                kind: type
4623                fn_name: cast_signed
4624                type_var: U
4625                operands:
4626                - !ScalarExpression
4627                  scalar_arg: K
4628--- !LinalgOpConfig
4629metadata: !LinalgOpMetadata
4630  name: depthwise_conv_2d_nhwc_hwc_q
4631  cpp_class_name: DepthwiseConv2DNhwcHwcQOp
4632  doc: |-
4633    Performs depth-wise 2-D convolution.
4634
4635    Numeric casting is performed on the operands to the inner multiply, promoting
4636    them to the same data type as the accumulator/output.
4637  implements:
4638  - LinalgConvolutionOpInterface
4639structured_op: !LinalgStructuredOpConfig
4640  args:
4641  - !LinalgOperandDefConfig
4642    name: I
4643    kind: input_tensor
4644    type_var: T1
4645    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
4646      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
4647  - !LinalgOperandDefConfig
4648    name: K
4649    kind: input_tensor
4650    type_var: T2
4651    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7, s9)>
4652  - !LinalgOperandDefConfig
4653    name: IZp
4654    kind: scalar
4655    type_var: I32
4656  - !LinalgOperandDefConfig
4657    name: KZp
4658    kind: scalar
4659    type_var: I32
4660  - !LinalgOperandDefConfig
4661    name: O
4662    kind: output_tensor
4663    type_var: U
4664    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
4665      s9)>
4666  - !LinalgOperandDefConfig
4667    name: strides
4668    kind: index_attr
4669    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
4670      s6)>
4671    default_indices:
4672    - 1
4673    - 1
4674  - !LinalgOperandDefConfig
4675    name: dilations
4676    kind: index_attr
4677    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
4678      s8)>
4679    default_indices:
4680    - 1
4681    - 1
4682  indexing_maps: !LinalgIndexingMapsConfig
4683    static_indexing_maps:
4684    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4685      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
4686    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4687      -> (d4, d5, d3)>
4688    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4689      -> ()>
4690    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4691      -> ()>
4692    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
4693      -> (d0, d1, d2, d3)>
4694  iterator_types:
4695  - parallel
4696  - parallel
4697  - parallel
4698  - parallel
4699  - reduction
4700  - reduction
4701  assignments:
4702  - !ScalarAssign
4703    arg: O
4704    value: !ScalarExpression
4705      scalar_fn:
4706        kind: binary
4707        fn_name: add
4708        operands:
4709        - !ScalarExpression
4710          scalar_arg: O
4711        - !ScalarExpression
4712          scalar_fn:
4713            kind: binary
4714            fn_name: mul
4715            operands:
4716            - !ScalarExpression
4717              scalar_fn:
4718                kind: binary
4719                fn_name: sub
4720                operands:
4721                - !ScalarExpression
4722                  scalar_fn:
4723                    kind: type
4724                    fn_name: cast_signed
4725                    type_var: U
4726                    operands:
4727                    - !ScalarExpression
4728                      scalar_arg: I
4729                - !ScalarExpression
4730                  scalar_fn:
4731                    kind: type
4732                    fn_name: cast_signed
4733                    type_var: U
4734                    operands:
4735                    - !ScalarExpression
4736                      scalar_arg: IZp
4737            - !ScalarExpression
4738              scalar_fn:
4739                kind: binary
4740                fn_name: sub
4741                operands:
4742                - !ScalarExpression
4743                  scalar_fn:
4744                    kind: type
4745                    fn_name: cast_signed
4746                    type_var: U
4747                    operands:
4748                    - !ScalarExpression
4749                      scalar_arg: K
4750                - !ScalarExpression
4751                  scalar_fn:
4752                    kind: type
4753                    fn_name: cast_signed
4754                    type_var: U
4755                    operands:
4756                    - !ScalarExpression
4757                      scalar_arg: KZp
4758--- !LinalgOpConfig
4759metadata: !LinalgOpMetadata
4760  name: depthwise_conv_2d_nhwc_hwcm
4761  cpp_class_name: DepthwiseConv2DNhwcHwcmOp
4762  doc: |-
4763    Performs depth-wise 2-D convolution.
4764
4765    Numeric casting is performed on the operands to the inner multiply, promoting
4766    them to the same data type as the accumulator/output.
4767  implements:
4768  - LinalgConvolutionOpInterface
4769structured_op: !LinalgStructuredOpConfig
4770  args:
4771  - !LinalgOperandDefConfig
4772    name: I
4773    kind: input_tensor
4774    type_var: T1
4775    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
4776      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
4777  - !LinalgOperandDefConfig
4778    name: K
4779    kind: input_tensor
4780    type_var: T2
4781    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s3,
4782      s7, s9, s10)>
4783  - !LinalgOperandDefConfig
4784    name: O
4785    kind: output_tensor
4786    type_var: U
4787    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
4788      s1, s5, s9, s10)>
4789  - !LinalgOperandDefConfig
4790    name: strides
4791    kind: index_attr
4792    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
4793      (s2, s6)>
4794    default_indices:
4795    - 1
4796    - 1
4797  - !LinalgOperandDefConfig
4798    name: dilations
4799    kind: index_attr
4800    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
4801      (s4, s8)>
4802    default_indices:
4803    - 1
4804    - 1
4805  indexing_maps: !LinalgIndexingMapsConfig
4806    static_indexing_maps:
4807    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4808      s9, s10] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3)>
4809    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4810      s9, s10] -> (d5, d6, d3, d4)>
4811    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4812      s9, s10] -> (d0, d1, d2, d3, d4)>
4813  iterator_types:
4814  - parallel
4815  - parallel
4816  - parallel
4817  - parallel
4818  - parallel
4819  - reduction
4820  - reduction
4821  assignments:
4822  - !ScalarAssign
4823    arg: O
4824    value: !ScalarExpression
4825      scalar_fn:
4826        kind: binary
4827        fn_name: add
4828        operands:
4829        - !ScalarExpression
4830          scalar_arg: O
4831        - !ScalarExpression
4832          scalar_fn:
4833            kind: binary
4834            fn_name: mul
4835            operands:
4836            - !ScalarExpression
4837              scalar_fn:
4838                kind: type
4839                fn_name: cast_signed
4840                type_var: U
4841                operands:
4842                - !ScalarExpression
4843                  scalar_arg: I
4844            - !ScalarExpression
4845              scalar_fn:
4846                kind: type
4847                fn_name: cast_signed
4848                type_var: U
4849                operands:
4850                - !ScalarExpression
4851                  scalar_arg: K
4852--- !LinalgOpConfig
4853metadata: !LinalgOpMetadata
4854  name: depthwise_conv_2d_nhwc_hwcm_q
4855  cpp_class_name: DepthwiseConv2DNhwcHwcmQOp
4856  doc: |-
4857    Performs depth-wise 2-D convolution.
4858
4859    Numeric casting is performed on the operands to the inner multiply, promoting
4860    them to the same data type as the accumulator/output.
4861  implements:
4862  - LinalgConvolutionOpInterface
4863structured_op: !LinalgStructuredOpConfig
4864  args:
4865  - !LinalgOperandDefConfig
4866    name: I
4867    kind: input_tensor
4868    type_var: T1
4869    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
4870      s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
4871  - !LinalgOperandDefConfig
4872    name: K
4873    kind: input_tensor
4874    type_var: T2
4875    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s3,
4876      s7, s9, s10)>
4877  - !LinalgOperandDefConfig
4878    name: IZp
4879    kind: scalar
4880    type_var: I32
4881  - !LinalgOperandDefConfig
4882    name: KZp
4883    kind: scalar
4884    type_var: I32
4885  - !LinalgOperandDefConfig
4886    name: O
4887    kind: output_tensor
4888    type_var: U
4889    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] -> (s0,
4890      s1, s5, s9, s10)>
4891  - !LinalgOperandDefConfig
4892    name: strides
4893    kind: index_attr
4894    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
4895      (s2, s6)>
4896    default_indices:
4897    - 1
4898    - 1
4899  - !LinalgOperandDefConfig
4900    name: dilations
4901    kind: index_attr
4902    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10] ->
4903      (s4, s8)>
4904    default_indices:
4905    - 1
4906    - 1
4907  indexing_maps: !LinalgIndexingMapsConfig
4908    static_indexing_maps:
4909    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4910      s9, s10] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3)>
4911    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4912      s9, s10] -> (d5, d6, d3, d4)>
4913    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4914      s9, s10] -> ()>
4915    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4916      s9, s10] -> ()>
4917    - affine_map<(d0, d1, d2, d3, d4, d5, d6)[s0, s1, s2, s3, s4, s5, s6, s7, s8,
4918      s9, s10] -> (d0, d1, d2, d3, d4)>
4919  iterator_types:
4920  - parallel
4921  - parallel
4922  - parallel
4923  - parallel
4924  - parallel
4925  - reduction
4926  - reduction
4927  assignments:
4928  - !ScalarAssign
4929    arg: O
4930    value: !ScalarExpression
4931      scalar_fn:
4932        kind: binary
4933        fn_name: add
4934        operands:
4935        - !ScalarExpression
4936          scalar_arg: O
4937        - !ScalarExpression
4938          scalar_fn:
4939            kind: binary
4940            fn_name: mul
4941            operands:
4942            - !ScalarExpression
4943              scalar_fn:
4944                kind: binary
4945                fn_name: sub
4946                operands:
4947                - !ScalarExpression
4948                  scalar_fn:
4949                    kind: type
4950                    fn_name: cast_signed
4951                    type_var: U
4952                    operands:
4953                    - !ScalarExpression
4954                      scalar_arg: I
4955                - !ScalarExpression
4956                  scalar_fn:
4957                    kind: type
4958                    fn_name: cast_signed
4959                    type_var: U
4960                    operands:
4961                    - !ScalarExpression
4962                      scalar_arg: IZp
4963            - !ScalarExpression
4964              scalar_fn:
4965                kind: binary
4966                fn_name: sub
4967                operands:
4968                - !ScalarExpression
4969                  scalar_fn:
4970                    kind: type
4971                    fn_name: cast_signed
4972                    type_var: U
4973                    operands:
4974                    - !ScalarExpression
4975                      scalar_arg: K
4976                - !ScalarExpression
4977                  scalar_fn:
4978                    kind: type
4979                    fn_name: cast_signed
4980                    type_var: U
4981                    operands:
4982                    - !ScalarExpression
4983                      scalar_arg: KZp
4984--- !LinalgOpConfig
4985metadata: !LinalgOpMetadata
4986  name: depthwise_conv_3d_ndhwc_dhwc
4987  cpp_class_name: DepthwiseConv3DNdhwcDhwcOp
4988  doc: |-
4989    Performs depth-wise 3-D convolution.
4990
4991    Numeric casting is performed on the operands to the inner multiply, promoting
4992    them to the same data type as the accumulator/output. Multiplier is set to 1
4993    which is a special case for most depthwise convolutions.
4994  implements:
4995  - LinalgConvolutionOpInterface
4996structured_op: !LinalgStructuredOpConfig
4997  args:
4998  - !LinalgOperandDefConfig
4999    name: I
5000    kind: input_tensor
5001    type_var: T1
5002    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5003      s13] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12, s13)>
5004  - !LinalgOperandDefConfig
5005    name: K
5006    kind: input_tensor
5007    type_var: T2
5008    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5009      s13] -> (s3, s7, s11, s13)>
5010  - !LinalgOperandDefConfig
5011    name: O
5012    kind: output_tensor
5013    type_var: U
5014    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5015      s13] -> (s0, s1, s5, s9)>
5016  - !LinalgOperandDefConfig
5017    name: strides
5018    kind: index_attr
5019    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5020      s12, s13] -> (s2, s6, s10)>
5021    default_indices:
5022    - 1
5023    - 1
5024    - 1
5025  - !LinalgOperandDefConfig
5026    name: dilations
5027    kind: index_attr
5028    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5029      s12, s13] -> (s4, s8, s12)>
5030    default_indices:
5031    - 1
5032    - 1
5033    - 1
5034  indexing_maps: !LinalgIndexingMapsConfig
5035    static_indexing_maps:
5036    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5037      s8, s9, s10, s11, s12, s13] -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3
5038      * s10 + d6 * s12, d7)>
5039    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5040      s8, s9, s10, s11, s12, s13] -> (d4, d5, d6, d7)>
5041    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5042      s8, s9, s10, s11, s12, s13] -> (d0, d1, d2, d3, d7)>
5043  iterator_types:
5044  - parallel
5045  - parallel
5046  - parallel
5047  - parallel
5048  - reduction
5049  - reduction
5050  - reduction
5051  - parallel
5052  assignments:
5053  - !ScalarAssign
5054    arg: O
5055    value: !ScalarExpression
5056      scalar_fn:
5057        kind: binary
5058        fn_name: add
5059        operands:
5060        - !ScalarExpression
5061          scalar_arg: O
5062        - !ScalarExpression
5063          scalar_fn:
5064            kind: binary
5065            fn_name: mul
5066            operands:
5067            - !ScalarExpression
5068              scalar_fn:
5069                kind: type
5070                fn_name: cast_signed
5071                type_var: U
5072                operands:
5073                - !ScalarExpression
5074                  scalar_arg: I
5075            - !ScalarExpression
5076              scalar_fn:
5077                kind: type
5078                fn_name: cast_signed
5079                type_var: U
5080                operands:
5081                - !ScalarExpression
5082                  scalar_arg: K
5083--- !LinalgOpConfig
5084metadata: !LinalgOpMetadata
5085  name: depthwise_conv_3d_ncdhw_cdhw
5086  cpp_class_name: DepthwiseConv3DNcdhwCdhwOp
5087  doc: |-
5088    Performs depth-wise 3-D convolution.
5089
5090    Numeric casting is performed on the operands to the inner multiply, promoting
5091    them to the same data type as the accumulator/output. Multiplier is set to 1
5092    which is a special case for most depthwise convolutions.
5093  implements:
5094  - LinalgConvolutionOpInterface
5095structured_op: !LinalgStructuredOpConfig
5096  args:
5097  - !LinalgOperandDefConfig
5098    name: I
5099    kind: input_tensor
5100    type_var: T1
5101    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5102      s13] -> (s0, s1, s2 * s3 + s4 * s5, s6 * s7 + s8 * s9, s10 * s11 + s12 * s13)>
5103  - !LinalgOperandDefConfig
5104    name: K
5105    kind: input_tensor
5106    type_var: T2
5107    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5108      s13] -> (s1, s4, s8, s12)>
5109  - !LinalgOperandDefConfig
5110    name: O
5111    kind: output_tensor
5112    type_var: U
5113    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5114      s13] -> (s0, s1, s2, s6, s10)>
5115  - !LinalgOperandDefConfig
5116    name: strides
5117    kind: index_attr
5118    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5119      s12, s13] -> (s3, s7, s11)>
5120    default_indices:
5121    - 1
5122    - 1
5123    - 1
5124  - !LinalgOperandDefConfig
5125    name: dilations
5126    kind: index_attr
5127    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5128      s12, s13] -> (s5, s9, s13)>
5129    default_indices:
5130    - 1
5131    - 1
5132    - 1
5133  indexing_maps: !LinalgIndexingMapsConfig
5134    static_indexing_maps:
5135    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5136      s8, s9, s10, s11, s12, s13] -> (d0, d7, d1 * s3 + d4 * s5, d2 * s7 + d5 * s9,
5137      d3 * s11 + d6 * s13)>
5138    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5139      s8, s9, s10, s11, s12, s13] -> (d7, d4, d5, d6)>
5140    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
5141      s8, s9, s10, s11, s12, s13] -> (d0, d7, d1, d2, d3)>
5142  iterator_types:
5143  - parallel
5144  - parallel
5145  - parallel
5146  - parallel
5147  - reduction
5148  - reduction
5149  - reduction
5150  - parallel
5151  assignments:
5152  - !ScalarAssign
5153    arg: O
5154    value: !ScalarExpression
5155      scalar_fn:
5156        kind: binary
5157        fn_name: add
5158        operands:
5159        - !ScalarExpression
5160          scalar_arg: O
5161        - !ScalarExpression
5162          scalar_fn:
5163            kind: binary
5164            fn_name: mul
5165            operands:
5166            - !ScalarExpression
5167              scalar_fn:
5168                kind: type
5169                fn_name: cast_signed
5170                type_var: U
5171                operands:
5172                - !ScalarExpression
5173                  scalar_arg: I
5174            - !ScalarExpression
5175              scalar_fn:
5176                kind: type
5177                fn_name: cast_signed
5178                type_var: U
5179                operands:
5180                - !ScalarExpression
5181                  scalar_arg: K
5182--- !LinalgOpConfig
5183metadata: !LinalgOpMetadata
5184  name: depthwise_conv_3d_ndhwc_dhwcm
5185  cpp_class_name: DepthwiseConv3DNdhwcDhwcmOp
5186  doc: |-
5187    Performs depth-wise 3-D convolution.
5188
5189    Numeric casting is performed on the operands to the inner multiply, promoting
5190    them to the same data type as the accumulator/output.
5191  implements:
5192  - LinalgConvolutionOpInterface
5193structured_op: !LinalgStructuredOpConfig
5194  args:
5195  - !LinalgOperandDefConfig
5196    name: I
5197    kind: input_tensor
5198    type_var: T1
5199    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5200      s13, s14] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12,
5201      s13)>
5202  - !LinalgOperandDefConfig
5203    name: K
5204    kind: input_tensor
5205    type_var: T2
5206    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5207      s13, s14] -> (s3, s7, s11, s13, s14)>
5208  - !LinalgOperandDefConfig
5209    name: O
5210    kind: output_tensor
5211    type_var: U
5212    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
5213      s13, s14] -> (s0, s1, s5, s9, s14)>
5214  - !LinalgOperandDefConfig
5215    name: strides
5216    kind: index_attr
5217    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5218      s12, s13, s14] -> (s2, s6, s10)>
5219    default_indices:
5220    - 1
5221    - 1
5222    - 1
5223  - !LinalgOperandDefConfig
5224    name: dilations
5225    kind: index_attr
5226    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
5227      s12, s13, s14] -> (s4, s8, s12)>
5228    default_indices:
5229    - 1
5230    - 1
5231    - 1
5232  indexing_maps: !LinalgIndexingMapsConfig
5233    static_indexing_maps:
5234    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
5235      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6
5236      * s8, d3 * s10 + d7 * s12, d8)>
5237    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
5238      s7, s8, s9, s10, s11, s12, s13, s14] -> (d5, d6, d7, d8, d4)>
5239    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7, d8)[s0, s1, s2, s3, s4, s5, s6,
5240      s7, s8, s9, s10, s11, s12, s13, s14] -> (d0, d1, d2, d3, d8, d4)>
5241  iterator_types:
5242  - parallel
5243  - parallel
5244  - parallel
5245  - parallel
5246  - parallel
5247  - reduction
5248  - reduction
5249  - reduction
5250  - parallel
5251  assignments:
5252  - !ScalarAssign
5253    arg: O
5254    value: !ScalarExpression
5255      scalar_fn:
5256        kind: binary
5257        fn_name: add
5258        operands:
5259        - !ScalarExpression
5260          scalar_arg: O
5261        - !ScalarExpression
5262          scalar_fn:
5263            kind: binary
5264            fn_name: mul
5265            operands:
5266            - !ScalarExpression
5267              scalar_fn:
5268                kind: type
5269                fn_name: cast_signed
5270                type_var: U
5271                operands:
5272                - !ScalarExpression
5273                  scalar_arg: I
5274            - !ScalarExpression
5275              scalar_fn:
5276                kind: type
5277                fn_name: cast_signed
5278                type_var: U
5279                operands:
5280                - !ScalarExpression
5281                  scalar_arg: K
5282--- !LinalgOpConfig
5283metadata: !LinalgOpMetadata
5284  name: pooling_nhwc_sum
5285  cpp_class_name: PoolingNhwcSumOp
5286  doc: |-
5287    Performs sum pooling.
5288
5289    Layout:
5290      * Input: NHWC.
5291      * Kernel: HW.
5292
5293    Numeric casting is performed on the input operand, promoting it to the same
5294    data type as the accumulator/output.
5295  implements:
5296  - LinalgConvolutionOpInterface
5297structured_op: !LinalgStructuredOpConfig
5298  args:
5299  - !LinalgOperandDefConfig
5300    name: I
5301    kind: input_tensor
5302    type_var: T1
5303    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
5304      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
5305  - !LinalgOperandDefConfig
5306    name: K
5307    kind: input_tensor
5308    type_var: T2
5309    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7)>
5310  - !LinalgOperandDefConfig
5311    name: O
5312    kind: output_tensor
5313    type_var: U
5314    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
5315      s9)>
5316  - !LinalgOperandDefConfig
5317    name: strides
5318    kind: index_attr
5319    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
5320      s6)>
5321    default_indices:
5322    - 1
5323    - 1
5324  - !LinalgOperandDefConfig
5325    name: dilations
5326    kind: index_attr
5327    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
5328      s8)>
5329    default_indices:
5330    - 1
5331    - 1
5332  indexing_maps: !LinalgIndexingMapsConfig
5333    static_indexing_maps:
5334    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5335      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
5336    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5337      -> (d4, d5)>
5338    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5339      -> (d0, d1, d2, d3)>
5340  iterator_types:
5341  - parallel
5342  - parallel
5343  - parallel
5344  - parallel
5345  - reduction
5346  - reduction
5347  assignments:
5348  - !ScalarAssign
5349    arg: O
5350    value: !ScalarExpression
5351      scalar_fn:
5352        kind: binary
5353        fn_name: add
5354        operands:
5355        - !ScalarExpression
5356          scalar_arg: O
5357        - !ScalarExpression
5358          scalar_fn:
5359            kind: type
5360            fn_name: cast_signed
5361            type_var: U
5362            operands:
5363            - !ScalarExpression
5364              scalar_arg: I
5365--- !LinalgOpConfig
5366metadata: !LinalgOpMetadata
5367  name: pooling_nchw_sum
5368  cpp_class_name: PoolingNchwSumOp
5369  doc: |-
5370    Performs sum pooling.
5371
5372    Layout:
5373      * Input: NCHW.
5374      * Kernel: HW.
5375
5376    Numeric casting is performed on the input operand, promoting it to the same
5377    data type as the accumulator/output.
5378  implements:
5379  - LinalgConvolutionOpInterface
5380structured_op: !LinalgStructuredOpConfig
5381  args:
5382  - !LinalgOperandDefConfig
5383    name: I
5384    kind: input_tensor
5385    type_var: T1
5386    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2
5387      * s3 + s4 * s5, s6 * s7 + s8 * s9)>
5388  - !LinalgOperandDefConfig
5389    name: K
5390    kind: input_tensor
5391    type_var: T2
5392    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4, s8)>
5393  - !LinalgOperandDefConfig
5394    name: O
5395    kind: output_tensor
5396    type_var: U
5397    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2,
5398      s6)>
5399  - !LinalgOperandDefConfig
5400    name: strides
5401    kind: index_attr
5402    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3,
5403      s7)>
5404    default_indices:
5405    - 1
5406    - 1
5407  - !LinalgOperandDefConfig
5408    name: dilations
5409    kind: index_attr
5410    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s5,
5411      s9)>
5412    default_indices:
5413    - 1
5414    - 1
5415  indexing_maps: !LinalgIndexingMapsConfig
5416    static_indexing_maps:
5417    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5418      -> (d0, d1, d2 * s3 + d4 * s5, d3 * s7 + d5 * s9)>
5419    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5420      -> (d4, d5)>
5421    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5422      -> (d0, d1, d2, d3)>
5423  iterator_types:
5424  - parallel
5425  - parallel
5426  - parallel
5427  - parallel
5428  - reduction
5429  - reduction
5430  assignments:
5431  - !ScalarAssign
5432    arg: O
5433    value: !ScalarExpression
5434      scalar_fn:
5435        kind: binary
5436        fn_name: add
5437        operands:
5438        - !ScalarExpression
5439          scalar_arg: O
5440        - !ScalarExpression
5441          scalar_fn:
5442            kind: type
5443            fn_name: cast_signed
5444            type_var: U
5445            operands:
5446            - !ScalarExpression
5447              scalar_arg: I
5448--- !LinalgOpConfig
5449metadata: !LinalgOpMetadata
5450  name: pooling_nhwc_max
5451  cpp_class_name: PoolingNhwcMaxOp
5452  doc: |-
5453    Performs max pooling.
5454
5455    Numeric casting is performed on the input operand, promoting it to the same
5456    data type as the accumulator/output.
5457  implements:
5458  - LinalgConvolutionOpInterface
5459structured_op: !LinalgStructuredOpConfig
5460  args:
5461  - !LinalgOperandDefConfig
5462    name: I
5463    kind: input_tensor
5464    type_var: T1
5465    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
5466      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
5467  - !LinalgOperandDefConfig
5468    name: K
5469    kind: input_tensor
5470    type_var: T2
5471    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7)>
5472  - !LinalgOperandDefConfig
5473    name: O
5474    kind: output_tensor
5475    type_var: U
5476    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
5477      s9)>
5478  - !LinalgOperandDefConfig
5479    name: strides
5480    kind: index_attr
5481    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
5482      s6)>
5483    default_indices:
5484    - 1
5485    - 1
5486  - !LinalgOperandDefConfig
5487    name: dilations
5488    kind: index_attr
5489    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
5490      s8)>
5491    default_indices:
5492    - 1
5493    - 1
5494  indexing_maps: !LinalgIndexingMapsConfig
5495    static_indexing_maps:
5496    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5497      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
5498    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5499      -> (d4, d5)>
5500    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5501      -> (d0, d1, d2, d3)>
5502  iterator_types:
5503  - parallel
5504  - parallel
5505  - parallel
5506  - parallel
5507  - reduction
5508  - reduction
5509  assignments:
5510  - !ScalarAssign
5511    arg: O
5512    value: !ScalarExpression
5513      scalar_fn:
5514        kind: binary
5515        fn_name: max_signed
5516        operands:
5517        - !ScalarExpression
5518          scalar_arg: O
5519        - !ScalarExpression
5520          scalar_fn:
5521            kind: type
5522            fn_name: cast_signed
5523            type_var: U
5524            operands:
5525            - !ScalarExpression
5526              scalar_arg: I
5527--- !LinalgOpConfig
5528metadata: !LinalgOpMetadata
5529  name: pooling_nhwc_max_unsigned
5530  cpp_class_name: PoolingNhwcMaxUnsignedOp
5531  doc: |-
5532    Performs unsigned max pooling.
5533
5534    Numeric casting is performed on the input operand, promoting it to the same
5535    data type as the accumulator/output.
5536  implements:
5537  - LinalgConvolutionOpInterface
5538structured_op: !LinalgStructuredOpConfig
5539  args:
5540  - !LinalgOperandDefConfig
5541    name: I
5542    kind: input_tensor
5543    type_var: T1
5544    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
5545      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
5546  - !LinalgOperandDefConfig
5547    name: K
5548    kind: input_tensor
5549    type_var: T2
5550    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7)>
5551  - !LinalgOperandDefConfig
5552    name: O
5553    kind: output_tensor
5554    type_var: U
5555    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
5556      s9)>
5557  - !LinalgOperandDefConfig
5558    name: strides
5559    kind: index_attr
5560    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
5561      s6)>
5562    default_indices:
5563    - 1
5564    - 1
5565  - !LinalgOperandDefConfig
5566    name: dilations
5567    kind: index_attr
5568    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
5569      s8)>
5570    default_indices:
5571    - 1
5572    - 1
5573  indexing_maps: !LinalgIndexingMapsConfig
5574    static_indexing_maps:
5575    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5576      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
5577    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5578      -> (d4, d5)>
5579    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5580      -> (d0, d1, d2, d3)>
5581  iterator_types:
5582  - parallel
5583  - parallel
5584  - parallel
5585  - parallel
5586  - reduction
5587  - reduction
5588  assignments:
5589  - !ScalarAssign
5590    arg: O
5591    value: !ScalarExpression
5592      scalar_fn:
5593        kind: binary
5594        fn_name: max_unsigned
5595        operands:
5596        - !ScalarExpression
5597          scalar_arg: O
5598        - !ScalarExpression
5599          scalar_fn:
5600            kind: type
5601            fn_name: cast_unsigned
5602            type_var: U
5603            operands:
5604            - !ScalarExpression
5605              scalar_arg: I
5606--- !LinalgOpConfig
5607metadata: !LinalgOpMetadata
5608  name: pooling_nchw_max
5609  cpp_class_name: PoolingNchwMaxOp
5610  doc: |-
5611    Performs max pooling.
5612
5613    Numeric casting is performed on the input operand, promoting it to the same
5614    data type as the accumulator/output.
5615  implements:
5616  - LinalgConvolutionOpInterface
5617structured_op: !LinalgStructuredOpConfig
5618  args:
5619  - !LinalgOperandDefConfig
5620    name: I
5621    kind: input_tensor
5622    type_var: T1
5623    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2
5624      * s3 + s4 * s5, s6 * s7 + s8 * s9)>
5625  - !LinalgOperandDefConfig
5626    name: K
5627    kind: input_tensor
5628    type_var: T2
5629    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4, s8)>
5630  - !LinalgOperandDefConfig
5631    name: O
5632    kind: output_tensor
5633    type_var: U
5634    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s2,
5635      s6)>
5636  - !LinalgOperandDefConfig
5637    name: strides
5638    kind: index_attr
5639    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3,
5640      s7)>
5641    default_indices:
5642    - 1
5643    - 1
5644  - !LinalgOperandDefConfig
5645    name: dilations
5646    kind: index_attr
5647    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s5,
5648      s9)>
5649    default_indices:
5650    - 1
5651    - 1
5652  indexing_maps: !LinalgIndexingMapsConfig
5653    static_indexing_maps:
5654    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5655      -> (d0, d1, d2 * s3 + d4 * s5, d3 * s7 + d5 * s9)>
5656    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5657      -> (d4, d5)>
5658    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5659      -> (d0, d1, d2, d3)>
5660  iterator_types:
5661  - parallel
5662  - parallel
5663  - parallel
5664  - parallel
5665  - reduction
5666  - reduction
5667  assignments:
5668  - !ScalarAssign
5669    arg: O
5670    value: !ScalarExpression
5671      scalar_fn:
5672        kind: binary
5673        fn_name: max_signed
5674        operands:
5675        - !ScalarExpression
5676          scalar_arg: O
5677        - !ScalarExpression
5678          scalar_fn:
5679            kind: type
5680            fn_name: cast_signed
5681            type_var: U
5682            operands:
5683            - !ScalarExpression
5684              scalar_arg: I
5685--- !LinalgOpConfig
5686metadata: !LinalgOpMetadata
5687  name: pooling_nhwc_min
5688  cpp_class_name: PoolingNhwcMinOp
5689  doc: |-
5690    Performs min pooling.
5691
5692    Numeric casting is performed on the input operand, promoting it to the same
5693    data type as the accumulator/output.
5694  implements:
5695  - LinalgConvolutionOpInterface
5696structured_op: !LinalgStructuredOpConfig
5697  args:
5698  - !LinalgOperandDefConfig
5699    name: I
5700    kind: input_tensor
5701    type_var: T1
5702    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
5703      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
5704  - !LinalgOperandDefConfig
5705    name: K
5706    kind: input_tensor
5707    type_var: T2
5708    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7)>
5709  - !LinalgOperandDefConfig
5710    name: O
5711    kind: output_tensor
5712    type_var: U
5713    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
5714      s9)>
5715  - !LinalgOperandDefConfig
5716    name: strides
5717    kind: index_attr
5718    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
5719      s6)>
5720    default_indices:
5721    - 1
5722    - 1
5723  - !LinalgOperandDefConfig
5724    name: dilations
5725    kind: index_attr
5726    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
5727      s8)>
5728    default_indices:
5729    - 1
5730    - 1
5731  indexing_maps: !LinalgIndexingMapsConfig
5732    static_indexing_maps:
5733    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5734      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
5735    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5736      -> (d4, d5)>
5737    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5738      -> (d0, d1, d2, d3)>
5739  iterator_types:
5740  - parallel
5741  - parallel
5742  - parallel
5743  - parallel
5744  - reduction
5745  - reduction
5746  assignments:
5747  - !ScalarAssign
5748    arg: O
5749    value: !ScalarExpression
5750      scalar_fn:
5751        kind: binary
5752        fn_name: min_signed
5753        operands:
5754        - !ScalarExpression
5755          scalar_arg: O
5756        - !ScalarExpression
5757          scalar_fn:
5758            kind: type
5759            fn_name: cast_signed
5760            type_var: U
5761            operands:
5762            - !ScalarExpression
5763              scalar_arg: I
5764--- !LinalgOpConfig
5765metadata: !LinalgOpMetadata
5766  name: pooling_nhwc_min_unsigned
5767  cpp_class_name: PoolingNhwcMinUnsignedOp
5768  doc: |-
5769    Performs unsigned min pooling.
5770
5771    Numeric casting is performed on the input operand, promoting it to the same
5772    data type as the accumulator/output.
5773  implements:
5774  - LinalgConvolutionOpInterface
5775structured_op: !LinalgStructuredOpConfig
5776  args:
5777  - !LinalgOperandDefConfig
5778    name: I
5779    kind: input_tensor
5780    type_var: T1
5781    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1 *
5782      s2 + s3 * s4, s5 * s6 + s7 * s8, s9)>
5783  - !LinalgOperandDefConfig
5784    name: K
5785    kind: input_tensor
5786    type_var: T2
5787    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s3, s7)>
5788  - !LinalgOperandDefConfig
5789    name: O
5790    kind: output_tensor
5791    type_var: U
5792    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s0, s1, s5,
5793      s9)>
5794  - !LinalgOperandDefConfig
5795    name: strides
5796    kind: index_attr
5797    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s2,
5798      s6)>
5799    default_indices:
5800    - 1
5801    - 1
5802  - !LinalgOperandDefConfig
5803    name: dilations
5804    kind: index_attr
5805    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9] -> (s4,
5806      s8)>
5807    default_indices:
5808    - 1
5809    - 1
5810  indexing_maps: !LinalgIndexingMapsConfig
5811    static_indexing_maps:
5812    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5813      -> (d0, d1 * s2 + d4 * s4, d2 * s6 + d5 * s8, d3)>
5814    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5815      -> (d4, d5)>
5816    - affine_map<(d0, d1, d2, d3, d4, d5)[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9]
5817      -> (d0, d1, d2, d3)>
5818  iterator_types:
5819  - parallel
5820  - parallel
5821  - parallel
5822  - parallel
5823  - reduction
5824  - reduction
5825  assignments:
5826  - !ScalarAssign
5827    arg: O
5828    value: !ScalarExpression
5829      scalar_fn:
5830        kind: binary
5831        fn_name: min_unsigned
5832        operands:
5833        - !ScalarExpression
5834          scalar_arg: O
5835        - !ScalarExpression
5836          scalar_fn:
5837            kind: type
5838            fn_name: cast_unsigned
5839            type_var: U
5840            operands:
5841            - !ScalarExpression
5842              scalar_arg: I
5843--- !LinalgOpConfig
5844metadata: !LinalgOpMetadata
5845  name: pooling_nwc_sum
5846  cpp_class_name: PoolingNwcSumOp
5847  doc: |-
5848    Performs sum pooling.
5849
5850    Layout:
5851      * Input: NWC.
5852      * Kernel: W.
5853
5854    Numeric casting is performed on the input operand, promoting it to the same
5855    data type as the accumulator/output.
5856  implements:
5857  - LinalgConvolutionOpInterface
5858structured_op: !LinalgStructuredOpConfig
5859  args:
5860  - !LinalgOperandDefConfig
5861    name: I
5862    kind: input_tensor
5863    type_var: T1
5864    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
5865  - !LinalgOperandDefConfig
5866    name: K
5867    kind: input_tensor
5868    type_var: T2
5869    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
5870  - !LinalgOperandDefConfig
5871    name: O
5872    kind: output_tensor
5873    type_var: U
5874    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
5875  - !LinalgOperandDefConfig
5876    name: strides
5877    kind: index_attr
5878    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
5879    default_indices:
5880    - 1
5881  - !LinalgOperandDefConfig
5882    name: dilations
5883    kind: index_attr
5884    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
5885    default_indices:
5886    - 1
5887  indexing_maps: !LinalgIndexingMapsConfig
5888    static_indexing_maps:
5889    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
5890      d2)>
5891    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
5892    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
5893  iterator_types:
5894  - parallel
5895  - parallel
5896  - parallel
5897  - reduction
5898  assignments:
5899  - !ScalarAssign
5900    arg: O
5901    value: !ScalarExpression
5902      scalar_fn:
5903        kind: binary
5904        fn_name: add
5905        operands:
5906        - !ScalarExpression
5907          scalar_arg: O
5908        - !ScalarExpression
5909          scalar_fn:
5910            kind: type
5911            fn_name: cast_signed
5912            type_var: U
5913            operands:
5914            - !ScalarExpression
5915              scalar_arg: I
5916--- !LinalgOpConfig
5917metadata: !LinalgOpMetadata
5918  name: pooling_ncw_sum
5919  cpp_class_name: PoolingNcwSumOp
5920  doc: |-
5921    Performs sum pooling.
5922
5923    Layout:
5924      * Input: NCW.
5925      * Kernel: W.
5926
5927    Numeric casting is performed on the input operand, promoting it to the same
5928    data type as the accumulator/output.
5929  implements:
5930  - LinalgConvolutionOpInterface
5931structured_op: !LinalgStructuredOpConfig
5932  args:
5933  - !LinalgOperandDefConfig
5934    name: I
5935    kind: input_tensor
5936    type_var: T1
5937    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2 * s3 + s4 * s5)>
5938  - !LinalgOperandDefConfig
5939    name: K
5940    kind: input_tensor
5941    type_var: T2
5942    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
5943  - !LinalgOperandDefConfig
5944    name: O
5945    kind: output_tensor
5946    type_var: U
5947    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2)>
5948  - !LinalgOperandDefConfig
5949    name: strides
5950    kind: index_attr
5951    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
5952    default_indices:
5953    - 1
5954  - !LinalgOperandDefConfig
5955    name: dilations
5956    kind: index_attr
5957    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s5)>
5958    default_indices:
5959    - 1
5960  indexing_maps: !LinalgIndexingMapsConfig
5961    static_indexing_maps:
5962    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2 * s3 + d3
5963      * s5)>
5964    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
5965    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
5966  iterator_types:
5967  - parallel
5968  - parallel
5969  - parallel
5970  - reduction
5971  assignments:
5972  - !ScalarAssign
5973    arg: O
5974    value: !ScalarExpression
5975      scalar_fn:
5976        kind: binary
5977        fn_name: add
5978        operands:
5979        - !ScalarExpression
5980          scalar_arg: O
5981        - !ScalarExpression
5982          scalar_fn:
5983            kind: type
5984            fn_name: cast_signed
5985            type_var: U
5986            operands:
5987            - !ScalarExpression
5988              scalar_arg: I
5989--- !LinalgOpConfig
5990metadata: !LinalgOpMetadata
5991  name: pooling_nwc_max
5992  cpp_class_name: PoolingNwcMaxOp
5993  doc: |-
5994    Performs max pooling.
5995
5996    Numeric casting is performed on the input operand, promoting it to the same
5997    data type as the accumulator/output.
5998  implements:
5999  - LinalgConvolutionOpInterface
6000structured_op: !LinalgStructuredOpConfig
6001  args:
6002  - !LinalgOperandDefConfig
6003    name: I
6004    kind: input_tensor
6005    type_var: T1
6006    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
6007  - !LinalgOperandDefConfig
6008    name: K
6009    kind: input_tensor
6010    type_var: T2
6011    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
6012  - !LinalgOperandDefConfig
6013    name: O
6014    kind: output_tensor
6015    type_var: U
6016    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
6017  - !LinalgOperandDefConfig
6018    name: strides
6019    kind: index_attr
6020    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
6021    default_indices:
6022    - 1
6023  - !LinalgOperandDefConfig
6024    name: dilations
6025    kind: index_attr
6026    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
6027    default_indices:
6028    - 1
6029  indexing_maps: !LinalgIndexingMapsConfig
6030    static_indexing_maps:
6031    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
6032      d2)>
6033    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
6034    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
6035  iterator_types:
6036  - parallel
6037  - parallel
6038  - parallel
6039  - reduction
6040  assignments:
6041  - !ScalarAssign
6042    arg: O
6043    value: !ScalarExpression
6044      scalar_fn:
6045        kind: binary
6046        fn_name: max_signed
6047        operands:
6048        - !ScalarExpression
6049          scalar_arg: O
6050        - !ScalarExpression
6051          scalar_fn:
6052            kind: type
6053            fn_name: cast_signed
6054            type_var: U
6055            operands:
6056            - !ScalarExpression
6057              scalar_arg: I
6058--- !LinalgOpConfig
6059metadata: !LinalgOpMetadata
6060  name: pooling_nwc_max_unsigned
6061  cpp_class_name: PoolingNwcMaxUnsignedOp
6062  doc: |-
6063    Performs unsigned max pooling.
6064
6065    Numeric casting is performed on the input operand, promoting it to the same
6066    data type as the accumulator/output.
6067  implements:
6068  - LinalgConvolutionOpInterface
6069structured_op: !LinalgStructuredOpConfig
6070  args:
6071  - !LinalgOperandDefConfig
6072    name: I
6073    kind: input_tensor
6074    type_var: T1
6075    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
6076  - !LinalgOperandDefConfig
6077    name: K
6078    kind: input_tensor
6079    type_var: T2
6080    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
6081  - !LinalgOperandDefConfig
6082    name: O
6083    kind: output_tensor
6084    type_var: U
6085    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
6086  - !LinalgOperandDefConfig
6087    name: strides
6088    kind: index_attr
6089    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
6090    default_indices:
6091    - 1
6092  - !LinalgOperandDefConfig
6093    name: dilations
6094    kind: index_attr
6095    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
6096    default_indices:
6097    - 1
6098  indexing_maps: !LinalgIndexingMapsConfig
6099    static_indexing_maps:
6100    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
6101      d2)>
6102    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
6103    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
6104  iterator_types:
6105  - parallel
6106  - parallel
6107  - parallel
6108  - reduction
6109  assignments:
6110  - !ScalarAssign
6111    arg: O
6112    value: !ScalarExpression
6113      scalar_fn:
6114        kind: binary
6115        fn_name: max_unsigned
6116        operands:
6117        - !ScalarExpression
6118          scalar_arg: O
6119        - !ScalarExpression
6120          scalar_fn:
6121            kind: type
6122            fn_name: cast_unsigned
6123            type_var: U
6124            operands:
6125            - !ScalarExpression
6126              scalar_arg: I
6127--- !LinalgOpConfig
6128metadata: !LinalgOpMetadata
6129  name: pooling_ncw_max
6130  cpp_class_name: PoolingNcwMaxOp
6131  doc: |-
6132    Performs max pooling.
6133
6134    Numeric casting is performed on the input operand, promoting it to the same
6135    data type as the accumulator/output.
6136  implements:
6137  - LinalgConvolutionOpInterface
6138structured_op: !LinalgStructuredOpConfig
6139  args:
6140  - !LinalgOperandDefConfig
6141    name: I
6142    kind: input_tensor
6143    type_var: T1
6144    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2 * s3 + s4 * s5)>
6145  - !LinalgOperandDefConfig
6146    name: K
6147    kind: input_tensor
6148    type_var: T2
6149    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
6150  - !LinalgOperandDefConfig
6151    name: O
6152    kind: output_tensor
6153    type_var: U
6154    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s2)>
6155  - !LinalgOperandDefConfig
6156    name: strides
6157    kind: index_attr
6158    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
6159    default_indices:
6160    - 1
6161  - !LinalgOperandDefConfig
6162    name: dilations
6163    kind: index_attr
6164    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s5)>
6165    default_indices:
6166    - 1
6167  indexing_maps: !LinalgIndexingMapsConfig
6168    static_indexing_maps:
6169    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2 * s3 + d3
6170      * s5)>
6171    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
6172    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
6173  iterator_types:
6174  - parallel
6175  - parallel
6176  - parallel
6177  - reduction
6178  assignments:
6179  - !ScalarAssign
6180    arg: O
6181    value: !ScalarExpression
6182      scalar_fn:
6183        kind: binary
6184        fn_name: max_signed
6185        operands:
6186        - !ScalarExpression
6187          scalar_arg: O
6188        - !ScalarExpression
6189          scalar_fn:
6190            kind: type
6191            fn_name: cast_signed
6192            type_var: U
6193            operands:
6194            - !ScalarExpression
6195              scalar_arg: I
6196--- !LinalgOpConfig
6197metadata: !LinalgOpMetadata
6198  name: pooling_nwc_min
6199  cpp_class_name: PoolingNwcMinOp
6200  doc: |-
6201    Performs min pooling.
6202
6203    Numeric casting is performed on the input operand, promoting it to the same
6204    data type as the accumulator/output.
6205  implements:
6206  - LinalgConvolutionOpInterface
6207structured_op: !LinalgStructuredOpConfig
6208  args:
6209  - !LinalgOperandDefConfig
6210    name: I
6211    kind: input_tensor
6212    type_var: T1
6213    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
6214  - !LinalgOperandDefConfig
6215    name: K
6216    kind: input_tensor
6217    type_var: T2
6218    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
6219  - !LinalgOperandDefConfig
6220    name: O
6221    kind: output_tensor
6222    type_var: U
6223    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
6224  - !LinalgOperandDefConfig
6225    name: strides
6226    kind: index_attr
6227    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
6228    default_indices:
6229    - 1
6230  - !LinalgOperandDefConfig
6231    name: dilations
6232    kind: index_attr
6233    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
6234    default_indices:
6235    - 1
6236  indexing_maps: !LinalgIndexingMapsConfig
6237    static_indexing_maps:
6238    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
6239      d2)>
6240    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
6241    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
6242  iterator_types:
6243  - parallel
6244  - parallel
6245  - parallel
6246  - reduction
6247  assignments:
6248  - !ScalarAssign
6249    arg: O
6250    value: !ScalarExpression
6251      scalar_fn:
6252        kind: binary
6253        fn_name: min_signed
6254        operands:
6255        - !ScalarExpression
6256          scalar_arg: O
6257        - !ScalarExpression
6258          scalar_fn:
6259            kind: type
6260            fn_name: cast_signed
6261            type_var: U
6262            operands:
6263            - !ScalarExpression
6264              scalar_arg: I
6265--- !LinalgOpConfig
6266metadata: !LinalgOpMetadata
6267  name: pooling_nwc_min_unsigned
6268  cpp_class_name: PoolingNwcMinUnsignedOp
6269  doc: |-
6270    Performs unsigned min pooling.
6271
6272    Numeric casting is performed on the input operand, promoting it to the same
6273    data type as the accumulator/output.
6274  implements:
6275  - LinalgConvolutionOpInterface
6276structured_op: !LinalgStructuredOpConfig
6277  args:
6278  - !LinalgOperandDefConfig
6279    name: I
6280    kind: input_tensor
6281    type_var: T1
6282    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1 * s2 + s3 * s4, s5)>
6283  - !LinalgOperandDefConfig
6284    name: K
6285    kind: input_tensor
6286    type_var: T2
6287    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s3)>
6288  - !LinalgOperandDefConfig
6289    name: O
6290    kind: output_tensor
6291    type_var: U
6292    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s0, s1, s5)>
6293  - !LinalgOperandDefConfig
6294    name: strides
6295    kind: index_attr
6296    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s2)>
6297    default_indices:
6298    - 1
6299  - !LinalgOperandDefConfig
6300    name: dilations
6301    kind: index_attr
6302    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5] -> (s4)>
6303    default_indices:
6304    - 1
6305  indexing_maps: !LinalgIndexingMapsConfig
6306    static_indexing_maps:
6307    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1 * s2 + d3 * s4,
6308      d2)>
6309    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d3)>
6310    - affine_map<(d0, d1, d2, d3)[s0, s1, s2, s3, s4, s5] -> (d0, d1, d2)>
6311  iterator_types:
6312  - parallel
6313  - parallel
6314  - parallel
6315  - reduction
6316  assignments:
6317  - !ScalarAssign
6318    arg: O
6319    value: !ScalarExpression
6320      scalar_fn:
6321        kind: binary
6322        fn_name: min_unsigned
6323        operands:
6324        - !ScalarExpression
6325          scalar_arg: O
6326        - !ScalarExpression
6327          scalar_fn:
6328            kind: type
6329            fn_name: cast_unsigned
6330            type_var: U
6331            operands:
6332            - !ScalarExpression
6333              scalar_arg: I
6334--- !LinalgOpConfig
6335metadata: !LinalgOpMetadata
6336  name: pooling_ndhwc_sum
6337  cpp_class_name: PoolingNdhwcSumOp
6338  doc: |-
6339    Performs 3D sum pooling.
6340
6341    Numeric casting is performed on the input operand, promoting it to the same
6342    data type as the accumulator/output.
6343  implements:
6344  - LinalgConvolutionOpInterface
6345structured_op: !LinalgStructuredOpConfig
6346  args:
6347  - !LinalgOperandDefConfig
6348    name: I
6349    kind: input_tensor
6350    type_var: T1
6351    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6352      s13] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12, s13)>
6353  - !LinalgOperandDefConfig
6354    name: K
6355    kind: input_tensor
6356    type_var: T2
6357    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6358      s13] -> (s3, s7, s11)>
6359  - !LinalgOperandDefConfig
6360    name: O
6361    kind: output_tensor
6362    type_var: U
6363    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6364      s13] -> (s0, s1, s5, s9, s13)>
6365  - !LinalgOperandDefConfig
6366    name: strides
6367    kind: index_attr
6368    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6369      s12, s13] -> (s2, s6, s10)>
6370    default_indices:
6371    - 1
6372    - 1
6373    - 1
6374  - !LinalgOperandDefConfig
6375    name: dilations
6376    kind: index_attr
6377    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6378      s12, s13] -> (s4, s8, s12)>
6379    default_indices:
6380    - 1
6381    - 1
6382    - 1
6383  indexing_maps: !LinalgIndexingMapsConfig
6384    static_indexing_maps:
6385    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6386      s8, s9, s10, s11, s12, s13] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3
6387      * s10 + d7 * s12, d4)>
6388    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6389      s8, s9, s10, s11, s12, s13] -> (d5, d6, d7)>
6390    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6391      s8, s9, s10, s11, s12, s13] -> (d0, d1, d2, d3, d4)>
6392  iterator_types:
6393  - parallel
6394  - parallel
6395  - parallel
6396  - parallel
6397  - parallel
6398  - reduction
6399  - reduction
6400  - reduction
6401  assignments:
6402  - !ScalarAssign
6403    arg: O
6404    value: !ScalarExpression
6405      scalar_fn:
6406        kind: binary
6407        fn_name: add
6408        operands:
6409        - !ScalarExpression
6410          scalar_arg: O
6411        - !ScalarExpression
6412          scalar_fn:
6413            kind: type
6414            fn_name: cast_signed
6415            type_var: U
6416            operands:
6417            - !ScalarExpression
6418              scalar_arg: I
6419--- !LinalgOpConfig
6420metadata: !LinalgOpMetadata
6421  name: pooling_ndhwc_max
6422  cpp_class_name: PoolingNdhwcMaxOp
6423  doc: |-
6424    Performs 3D max pooling.
6425
6426    Numeric casting is performed on the input operand, promoting it to the same
6427    data type as the accumulator/output.
6428  implements:
6429  - LinalgConvolutionOpInterface
6430structured_op: !LinalgStructuredOpConfig
6431  args:
6432  - !LinalgOperandDefConfig
6433    name: I
6434    kind: input_tensor
6435    type_var: T1
6436    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6437      s13] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12, s13)>
6438  - !LinalgOperandDefConfig
6439    name: K
6440    kind: input_tensor
6441    type_var: T2
6442    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6443      s13] -> (s3, s7, s11)>
6444  - !LinalgOperandDefConfig
6445    name: O
6446    kind: output_tensor
6447    type_var: U
6448    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6449      s13] -> (s0, s1, s5, s9, s13)>
6450  - !LinalgOperandDefConfig
6451    name: strides
6452    kind: index_attr
6453    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6454      s12, s13] -> (s2, s6, s10)>
6455    default_indices:
6456    - 1
6457    - 1
6458    - 1
6459  - !LinalgOperandDefConfig
6460    name: dilations
6461    kind: index_attr
6462    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6463      s12, s13] -> (s4, s8, s12)>
6464    default_indices:
6465    - 1
6466    - 1
6467    - 1
6468  indexing_maps: !LinalgIndexingMapsConfig
6469    static_indexing_maps:
6470    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6471      s8, s9, s10, s11, s12, s13] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3
6472      * s10 + d7 * s12, d4)>
6473    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6474      s8, s9, s10, s11, s12, s13] -> (d5, d6, d7)>
6475    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6476      s8, s9, s10, s11, s12, s13] -> (d0, d1, d2, d3, d4)>
6477  iterator_types:
6478  - parallel
6479  - parallel
6480  - parallel
6481  - parallel
6482  - parallel
6483  - reduction
6484  - reduction
6485  - reduction
6486  assignments:
6487  - !ScalarAssign
6488    arg: O
6489    value: !ScalarExpression
6490      scalar_fn:
6491        kind: binary
6492        fn_name: max_signed
6493        operands:
6494        - !ScalarExpression
6495          scalar_arg: O
6496        - !ScalarExpression
6497          scalar_fn:
6498            kind: type
6499            fn_name: cast_signed
6500            type_var: U
6501            operands:
6502            - !ScalarExpression
6503              scalar_arg: I
6504--- !LinalgOpConfig
6505metadata: !LinalgOpMetadata
6506  name: pooling_ndhwc_min
6507  cpp_class_name: PoolingNdhwcMinOp
6508  doc: |-
6509    Performs 3D min pooling.
6510
6511    Numeric casting is performed on the input operand, promoting it to the same
6512    data type as the accumulator/output.
6513  implements:
6514  - LinalgConvolutionOpInterface
6515structured_op: !LinalgStructuredOpConfig
6516  args:
6517  - !LinalgOperandDefConfig
6518    name: I
6519    kind: input_tensor
6520    type_var: T1
6521    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6522      s13] -> (s0, s1 * s2 + s3 * s4, s5 * s6 + s7 * s8, s9 * s10 + s11 * s12, s13)>
6523  - !LinalgOperandDefConfig
6524    name: K
6525    kind: input_tensor
6526    type_var: T2
6527    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6528      s13] -> (s3, s7, s11)>
6529  - !LinalgOperandDefConfig
6530    name: O
6531    kind: output_tensor
6532    type_var: U
6533    shape_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
6534      s13] -> (s0, s1, s5, s9, s13)>
6535  - !LinalgOperandDefConfig
6536    name: strides
6537    kind: index_attr
6538    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6539      s12, s13] -> (s2, s6, s10)>
6540    default_indices:
6541    - 1
6542    - 1
6543    - 1
6544  - !LinalgOperandDefConfig
6545    name: dilations
6546    kind: index_attr
6547    index_attr_map: affine_map<()[s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11,
6548      s12, s13] -> (s4, s8, s12)>
6549    default_indices:
6550    - 1
6551    - 1
6552    - 1
6553  indexing_maps: !LinalgIndexingMapsConfig
6554    static_indexing_maps:
6555    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6556      s8, s9, s10, s11, s12, s13] -> (d0, d1 * s2 + d5 * s4, d2 * s6 + d6 * s8, d3
6557      * s10 + d7 * s12, d4)>
6558    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6559      s8, s9, s10, s11, s12, s13] -> (d5, d6, d7)>
6560    - affine_map<(d0, d1, d2, d3, d4, d5, d6, d7)[s0, s1, s2, s3, s4, s5, s6, s7,
6561      s8, s9, s10, s11, s12, s13] -> (d0, d1, d2, d3, d4)>
6562  iterator_types:
6563  - parallel
6564  - parallel
6565  - parallel
6566  - parallel
6567  - parallel
6568  - reduction
6569  - reduction
6570  - reduction
6571  assignments:
6572  - !ScalarAssign
6573    arg: O
6574    value: !ScalarExpression
6575      scalar_fn:
6576        kind: binary
6577        fn_name: min_signed
6578        operands:
6579        - !ScalarExpression
6580          scalar_arg: O
6581        - !ScalarExpression
6582          scalar_fn:
6583            kind: type
6584            fn_name: cast_signed
6585            type_var: U
6586            operands:
6587            - !ScalarExpression
6588              scalar_arg: I
6589--- !LinalgOpConfig
6590metadata: !LinalgOpMetadata
6591  name: fill
6592  cpp_class_name: FillOp
6593  doc: |-
6594    Fills the output tensor with the given value.
6595
6596    Works for arbitrary ranked output tensors since the operation performs scalar
6597    accesses only and is thus rank polymorphic. Numeric casting is performed on
6598    the value operand, promoting it to the same data type as the output.
6599  implements:
6600  - LinalgFillOpInterface
6601  defines:
6602  - hasCanonicalizer
6603structured_op: !LinalgStructuredOpConfig
6604  args:
6605  - !LinalgOperandDefConfig
6606    name: value
6607    kind: scalar
6608    type_var: T1
6609  - !LinalgOperandDefConfig
6610    name: O
6611    kind: output_tensor
6612    type_var: U
6613    shape_map: affine_map<() -> ()>
6614  indexing_maps: !LinalgIndexingMapsConfig
6615    static_indexing_maps:
6616    - affine_map<() -> ()>
6617    - affine_map<() -> ()>
6618  iterator_types: []
6619  assignments:
6620  - !ScalarAssign
6621    arg: O
6622    value: !ScalarExpression
6623      scalar_fn:
6624        kind: type
6625        fn_name: cast_signed
6626        type_var: U
6627        operands:
6628        - !ScalarExpression
6629          scalar_arg: value
6630--- !LinalgOpConfig
6631metadata: !LinalgOpMetadata
6632  name: fill_rng_2d
6633  cpp_class_name: FillRng2DOp
6634  doc: |-
6635    Fills the output tensor with pseudo random numbers.
6636
6637    The operation generations pseudo random numbers using a linear congruential
6638    generator. It provides no guarantees regarding the distribution of the
6639    generated random numbers. Instead of generating the random numbers
6640    sequentially, it instantiates one random number generator per data element
6641    and runs them in parallel. The seed operand and the indices of the data
6642    element seed the random number generation. The min and max operands limit
6643    the range of the generated random numbers.
6644structured_op: !LinalgStructuredOpConfig
6645  args:
6646  - !LinalgOperandDefConfig
6647    name: min
6648    kind: scalar
6649    type_var: F64
6650  - !LinalgOperandDefConfig
6651    name: max
6652    kind: scalar
6653    type_var: F64
6654  - !LinalgOperandDefConfig
6655    name: seed
6656    kind: scalar
6657    type_var: I32
6658  - !LinalgOperandDefConfig
6659    name: O
6660    kind: output_tensor
6661    type_var: T
6662    shape_map: affine_map<()[s0, s1] -> (s0, s1)>
6663  indexing_maps: !LinalgIndexingMapsConfig
6664    static_indexing_maps:
6665    - affine_map<(d0, d1)[s0, s1] -> ()>
6666    - affine_map<(d0, d1)[s0, s1] -> ()>
6667    - affine_map<(d0, d1)[s0, s1] -> ()>
6668    - affine_map<(d0, d1)[s0, s1] -> (d0, d1)>
6669  iterator_types:
6670  - parallel
6671  - parallel
6672  assignments:
6673  - !ScalarAssign
6674    arg: O
6675    value: !ScalarExpression
6676      scalar_fn:
6677        kind: type
6678        fn_name: cast_signed
6679        type_var: T
6680        operands:
6681        - !ScalarExpression
6682          scalar_fn:
6683            kind: binary
6684            fn_name: add
6685            operands:
6686            - !ScalarExpression
6687              scalar_fn:
6688                kind: binary
6689                fn_name: mul
6690                operands:
6691                - !ScalarExpression
6692                  scalar_fn:
6693                    kind: binary
6694                    fn_name: add
6695                    operands:
6696                    - !ScalarExpression
6697                      scalar_fn:
6698                        kind: type
6699                        fn_name: cast_signed
6700                        type_var: F64
6701                        operands:
6702                        - !ScalarExpression
6703                          scalar_const: '2147483647 : i64'
6704                    - !ScalarExpression
6705                      scalar_fn:
6706                        kind: type
6707                        fn_name: cast_signed
6708                        type_var: F64
6709                        operands:
6710                        - !ScalarExpression
6711                          scalar_fn:
6712                            kind: binary
6713                            fn_name: add
6714                            operands:
6715                            - !ScalarExpression
6716                              scalar_fn:
6717                                kind: binary
6718                                fn_name: mul
6719                                operands:
6720                                - !ScalarExpression
6721                                  scalar_fn:
6722                                    kind: binary
6723                                    fn_name: add
6724                                    operands:
6725                                    - !ScalarExpression
6726                                      scalar_fn:
6727                                        kind: type
6728                                        fn_name: cast_signed
6729                                        type_var: I32
6730                                        operands:
6731                                        - !ScalarExpression
6732                                          scalar_index: 1
6733                                    - !ScalarExpression
6734                                      scalar_fn:
6735                                        kind: binary
6736                                        fn_name: add
6737                                        operands:
6738                                        - !ScalarExpression
6739                                          scalar_fn:
6740                                            kind: binary
6741                                            fn_name: mul
6742                                            operands:
6743                                            - !ScalarExpression
6744                                              scalar_fn:
6745                                                kind: binary
6746                                                fn_name: add
6747                                                operands:
6748                                                - !ScalarExpression
6749                                                  scalar_fn:
6750                                                    kind: type
6751                                                    fn_name: cast_signed
6752                                                    type_var: I32
6753                                                    operands:
6754                                                    - !ScalarExpression
6755                                                      scalar_index: 0
6756                                                - !ScalarExpression
6757                                                  scalar_arg: seed
6758                                            - !ScalarExpression
6759                                              scalar_fn:
6760                                                kind: type
6761                                                fn_name: cast_signed
6762                                                type_var: I32
6763                                                operands:
6764                                                - !ScalarExpression
6765                                                  scalar_const: '1103515245 : i64'
6766                                        - !ScalarExpression
6767                                          scalar_fn:
6768                                            kind: type
6769                                            fn_name: cast_signed
6770                                            type_var: I32
6771                                            operands:
6772                                            - !ScalarExpression
6773                                              scalar_const: '12345 : i64'
6774                                - !ScalarExpression
6775                                  scalar_fn:
6776                                    kind: type
6777                                    fn_name: cast_signed
6778                                    type_var: I32
6779                                    operands:
6780                                    - !ScalarExpression
6781                                      scalar_const: '1103515245 : i64'
6782                            - !ScalarExpression
6783                              scalar_fn:
6784                                kind: type
6785                                fn_name: cast_signed
6786                                type_var: I32
6787                                operands:
6788                                - !ScalarExpression
6789                                  scalar_const: '12345 : i64'
6790                - !ScalarExpression
6791                  scalar_fn:
6792                    kind: binary
6793                    fn_name: mul
6794                    operands:
6795                    - !ScalarExpression
6796                      scalar_fn:
6797                        kind: binary
6798                        fn_name: sub
6799                        operands:
6800                        - !ScalarExpression
6801                          scalar_arg: max
6802                        - !ScalarExpression
6803                          scalar_arg: min
6804                    - !ScalarExpression
6805                      scalar_fn:
6806                        kind: type
6807                        fn_name: cast_signed
6808                        type_var: F64
6809                        operands:
6810                        - !ScalarExpression
6811                          scalar_const: '2.3283063999999999E-10 : f64'
6812            - !ScalarExpression
6813              scalar_arg: min
6814