@@ -31,10 +31,6 @@ class HLO_Op<string mnemonic, list<Trait> traits> :
3131 Op<HLO_Dialect, mnemonic, traits> {
3232 // Whether this operation has a custom conversion to HLO or not.
3333 bit hasCustomHLOConverter = 0b0;
34-
35- // TODO(b/129012527) Much of this custom verification should be expressed as
36- // type constraints.
37- let verifier = [{ return Verify(*this); }];
3834}
3935
4036class HLO_ShapedInterfaceOp<string mnemonic, list<Trait> traits> :
@@ -84,6 +80,7 @@ def HLO_IotaOp : HLO_Op<"iota", [NoSideEffect]> {
8480 let hasCustomHLOConverter = 1;
8581 let hasCanonicalizer = 1;
8682 let hasFolder = 1;
83+ let hasVerifier = 1;
8784}
8885
8986def HLO_DynamicIotaOp: HLO_ShapedInterfaceOp<"dynamic_iota", [NoSideEffect]> {
@@ -695,6 +692,7 @@ def HLO_InfeedOp : HLO_Op<"infeed", []> {
695692 );
696693 let results = (outs Variadic<HLO_TensorOrToken>);
697694 let hasCustomHLOConverter = 1;
695+ let hasVerifier = 1;
698696}
699697
700698// OutfeedOp corresponds to 'OutfeedWithToken' xla client API and not 'Outfeed'.
@@ -768,6 +766,7 @@ def HLO_RecvOp : HLO_Op<"recv", []> {
768766
769767 let results = (outs Variadic<HLO_TensorOrToken>);
770768 let hasCustomHLOConverter = 1;
769+ let hasVerifier = 1;
771770}
772771
773772//===----------------------------------------------------------------------===//
@@ -839,6 +838,7 @@ def HLO_IfOp: HLO_Op<"if", [
839838 let hasCustomHLOConverter = 1;
840839
841840 let hasCanonicalizer = 1;
841+ let hasVerifier = 1;
842842}
843843
844844// Xla Client API has two separate calls for indexed and predicated conditional,
@@ -874,6 +874,7 @@ def HLO_CaseOp: HLO_Op<"case", [
874874 let hasCustomHLOConverter = 1;
875875
876876 let hasCanonicalizer = 1;
877+ let hasVerifier = 1;
877878}
878879
879880
@@ -911,7 +912,7 @@ def HLO_WhileOp: HLO_Op<"while", [
911912 // TODO(b/129422361): WhileOp has special conversion logic to HLO.
912913 let hasCustomHLOConverter = 1;
913914 let hasCanonicalizer = 1;
914- let verifier = [{ return mhlo::verify(*this); }] ;
915+ let hasVerifier = 1 ;
915916 let printer = [{ return ::mlir::mhlo::printWhileOp(*this, p); }];
916917 let parser = [{ return ::mlir::mhlo::parseWhileOp(parser, result); }];
917918
@@ -935,6 +936,7 @@ def HLO_AllGatherOp : HLO_Op<"all_gather", [SameOperandsAndResultElementType]> {
935936 );
936937 let results = (outs HLO_Tensor);
937938 let hasCustomHLOConverter = 1;
939+ let hasVerifier = 1;
938940}
939941
940942def HLO_AllReduceOp : HLO_Op<"all_reduce",
@@ -975,6 +977,7 @@ def HLO_ReduceScatterOp : HLO_Op<"reduce_scatter",
975977 let regions = (region SizedRegion<1>:$computation);
976978 let results = (outs HLO_Tensor);
977979 let hasCustomHLOConverter = 1;
980+ let hasVerifier = 1;
978981}
979982
980983def HLO_AllToAllOp : HLO_Op<"all_to_all",
@@ -988,6 +991,8 @@ def HLO_AllToAllOp : HLO_Op<"all_to_all",
988991 I64ElementsAttr:$replica_groups
989992 );
990993 let results = (outs HLO_Tensor);
994+
995+ let hasVerifier = 1;
991996}
992997
993998def HLO_ReduceOp: HLO_ShapedInterfaceOp<"reduce", [
@@ -1017,6 +1022,7 @@ def HLO_ReduceOp: HLO_ShapedInterfaceOp<"reduce", [
10171022
10181023 let hasFolder = 1;
10191024 let hasCanonicalizer = 1;
1025+ let hasVerifier = 1;
10201026
10211027 // TODO(hinsu): Verify that the attached body arguments and results are
10221028 // compatible with reduce op's operands.
@@ -1047,6 +1053,7 @@ def HLO_GetTupleElementOp: HLO_Op<"get_tuple_element", [NoSideEffect]> {
10471053 let results = (outs HLO_TensorOrTokenOrTuple);
10481054
10491055 let hasFolder = 1;
1056+ let hasVerifier = 1;
10501057
10511058 let builders = [
10521059 OpBuilder<(ins "Value":$value, "int32_t":$index)>];
@@ -1066,6 +1073,7 @@ def HLO_TupleOp : HLO_Op<"tuple", [NoSideEffect]> {
10661073 OpBuilder<(ins "ValueRange":$values)>];
10671074
10681075 let hasCanonicalizer = 1;
1076+ let hasVerifier = 1;
10691077}
10701078
10711079def HLO_CompareOp: HLO_Op<"compare", [NoSideEffect, SameTypeOperands,
@@ -1138,6 +1146,7 @@ def HLO_DynamicSliceOp: HLO_Op<"dynamic-slice",
11381146
11391147 let results = (outs HLO_Tensor:$result);
11401148 let hasCanonicalizer = 1;
1149+ let hasVerifier = 1;
11411150}
11421151
11431152def HLO_DynamicUpdateSliceOp: HLO_Op<"dynamic-update-slice",
@@ -1157,6 +1166,7 @@ def HLO_DynamicUpdateSliceOp: HLO_Op<"dynamic-update-slice",
11571166 );
11581167 let results = (outs HLO_Tensor:$result);
11591168 let hasFolder = 1;
1169+ let hasVerifier = 1;
11601170}
11611171
11621172
@@ -1270,6 +1280,7 @@ def HLO_BroadcastOp : HLO_ShapedInterfaceOp<"broadcast",
12701280 let results = (outs HLO_Tensor);
12711281
12721282 let hasFolder = 1;
1283+ let hasVerifier = 1;
12731284}
12741285
12751286def HLO_BroadcastInDimOp : HLO_Op<"broadcast_in_dim",
@@ -1300,6 +1311,7 @@ def HLO_BroadcastInDimOp : HLO_Op<"broadcast_in_dim",
13001311
13011312 let hasFolder = 1;
13021313 let hasCanonicalizer = 1;
1314+ let hasVerifier = 1;
13031315 // Only handles a static subset of the legacy format.
13041316 let hasCustomHLOConverter = 1;
13051317}
@@ -1323,6 +1335,7 @@ def HLO_DynamicBroadcastInDimOp : HLO_ShapedInterfaceOp<
13231335 let results = (outs HLO_Tensor);
13241336
13251337 let hasCanonicalizer = 1;
1338+ let hasVerifier = 1;
13261339 // Cannot be exported to legacy formats.
13271340 let hasCustomHLOConverter = 1;
13281341}
@@ -1382,6 +1395,8 @@ def HLO_ClampOp : HLO_ShapedInterfaceOp<"clamp", [NoSideEffect,
13821395 HLO_Tensor:$max
13831396 );
13841397 let results = (outs HLO_Tensor);
1398+
1399+ let hasVerifier = 1;
13851400}
13861401
13871402def HLO_ConcatenateOp : HLO_ShapedInterfaceOp<"concatenate",
@@ -1403,6 +1418,7 @@ def HLO_ConcatenateOp : HLO_ShapedInterfaceOp<"concatenate",
14031418
14041419 let hasCanonicalizer = 1;
14051420 let hasFolder = 1;
1421+ let hasVerifier = 1;
14061422
14071423 let extraClassDeclaration = [{
14081424 static bool isCompatibleReturnTypes(TypeRange l, TypeRange r) {
@@ -1432,6 +1448,7 @@ def HLO_CollectivePermuteOp: HLO_Op<"collective_permute",
14321448 I64ElementsAttr:$source_target_pairs
14331449 );
14341450 let results = (outs HLO_Tensor);
1451+ let hasVerifier = 1;
14351452}
14361453
14371454def HLO_ConvOp : HLO_Op<"convolution", [NoSideEffect]> {
@@ -1553,6 +1570,7 @@ def HLO_CustomCallOp: HLO_Op<"custom_call", []> {
15531570 );
15541571 let results = (outs Variadic<HLO_TensorOrTokenOrTuple>);
15551572 let hasCustomHLOConverter = 1;
1573+ let hasVerifier = 1;
15561574}
15571575
15581576def HLO_DotOp: HLO_Op<"dot", [NoSideEffect]> {
@@ -1569,10 +1587,10 @@ def HLO_DotOp: HLO_Op<"dot", [NoSideEffect]> {
15691587 HLO_PrecisionConfigAttr:$precision_config
15701588 );
15711589 let results = (outs HLO_Tensor);
1572- let verifier = [{ return Verify(*this); }];
15731590 // Dot op required custom exporter to pass the preferred element type
15741591 // to Xla builder.
15751592 let hasCustomHLOConverter = 1;
1593+ let hasVerifier = 1;
15761594}
15771595
15781596def HLO_DotGeneralOp: HLO_Op<"dot_general", [NoSideEffect]> {
@@ -1591,10 +1609,10 @@ def HLO_DotGeneralOp: HLO_Op<"dot_general", [NoSideEffect]> {
15911609 );
15921610
15931611 let results = (outs HLO_Tensor);
1594- let verifier = [{ return Verify(*this); }];
15951612 // DotGeneral op required custom exporter to pass the preferred element type
15961613 // to Xla builder.
15971614 let hasCustomHLOConverter = 1;
1615+ let hasVerifier = 1;
15981616}
15991617
16001618// Define Base Einsum op within the HLO dialect as these are client ops and
@@ -1699,6 +1717,7 @@ def HLO_GetDimensionSizeOp: HLO_Op<"get_dimension_size", [NoSideEffect]> {
16991717 let results = (outs I32Tensor);
17001718
17011719 let hasFolder = 1;
1720+ let hasVerifier = 1;
17021721}
17031722
17041723def HLO_MapOp: HLO_Op<"map",
@@ -1725,6 +1744,7 @@ def HLO_MapOp: HLO_Op<"map",
17251744 let results = (outs HLO_Tensor);
17261745 let hasFolder = 1;
17271746 let hasCustomHLOConverter = 1;
1747+ let hasVerifier = 1;
17281748}
17291749
17301750def HLO_ReshapeOp: HLO_Op<"reshape",
@@ -1740,6 +1760,7 @@ def HLO_ReshapeOp: HLO_Op<"reshape",
17401760 let results = (outs HLO_StaticShapeTensor);
17411761 let hasFolder = 1;
17421762 let hasCanonicalizer = 1;
1763+ let hasVerifier = 1;
17431764
17441765 let hasCustomHLOConverter = 1;
17451766}
@@ -1762,6 +1783,7 @@ def HLO_DynamicReshapeOp: HLO_ShapedInterfaceOp<"dynamic_reshape", [NoSideEffect
17621783 let hasCanonicalizer = 1;
17631784 // Cannot be exported to legacy formats.
17641785 let hasCustomHLOConverter = 1;
1786+ let hasVerifier = 1;
17651787}
17661788
17671789def HLO_ScatterOp: HLO_Op<"scatter", [RecursiveSideEffects]> {
@@ -1812,6 +1834,7 @@ def HLO_SelectOp: HLO_Op<"select", [NoSideEffect, HLO_BroadcastingElementwise,
18121834 let results = (outs HLO_Tensor);
18131835
18141836 let hasFolder = 1;
1837+ let hasVerifier = 1;
18151838
18161839 let extraClassDeclaration = [{
18171840 static bool isCompatibleReturnTypes(TypeRange l, TypeRange r) {
@@ -1866,6 +1889,7 @@ def HLO_SetDimensionSizeOp: HLO_Op<"set_dimension_size", [NoSideEffect]> {
18661889 let results = (outs HLO_Tensor);
18671890
18681891 let hasFolder = 1;
1892+ let hasVerifier = 1;
18691893}
18701894
18711895def HLO_SortOp : HLO_Op<"sort", [RecursiveSideEffects,
@@ -1895,6 +1919,7 @@ def HLO_SortOp : HLO_Op<"sort", [RecursiveSideEffects,
18951919 let hasCustomHLOConverter = 1;
18961920
18971921 let hasCanonicalizer = 1;
1922+ let hasVerifier = 1;
18981923}
18991924
19001925def HLO_ReverseOp: HLO_Op<"reverse",
@@ -1943,6 +1968,7 @@ def HLO_PadOp: HLO_Op<"pad",
19431968 let hasCustomHLOConverter = 1;
19441969
19451970 let hasFolder = 1;
1971+ let hasVerifier = 1;
19461972}
19471973
19481974def HLO_TraceOp: HLO_Op<"trace", []> {
@@ -2016,6 +2042,8 @@ def HLO_TriangularSolveOp: HLO_Op<"triangular_solve",
20162042 HLO_TransposeAttr:$transpose_a
20172043 );
20182044 let results = (outs HLO_FpOrComplexTensor);
2045+
2046+ let hasVerifier = 1;
20192047}
20202048
20212049def HLO_ReduceWindowOp: HLO_Op<"reduce_window", [
@@ -2070,7 +2098,7 @@ def HLO_ReduceWindowOp: HLO_Op<"reduce_window", [
20702098 ];
20712099
20722100 let hasCustomHLOConverter = 1;
2073- let verifier = [{ return Verify(*this); }] ;
2101+ let hasVerifier = 1 ;
20742102 // TODO(hinsu): Implement custom printer and parser.
20752103
20762104 let extraClassDeclaration = [{
@@ -2239,6 +2267,7 @@ def HLO_DequantizeOp : HLO_Op<"dequantize", [NoSideEffect]> {
22392267 let results = (outs TensorOf<[BF16]>:$output);
22402268
22412269 let hasCustomHLOConverter = 1;
2270+ let hasVerifier = 1;
22422271}
22432272
22442273def HLO_FusionOp : HLO_Op<"fusion", []> {
@@ -2322,6 +2351,7 @@ def HLO_RealDynamicSliceOp: HLO_ShapedInterfaceOp<
23222351 let results = (outs HLO_Tensor:$result);
23232352 let hasCanonicalizer = 1;
23242353 let hasCustomHLOConverter = 1;
2354+ let hasVerifier = 1;
23252355}
23262356
23272357def HLO_DynamicPadOp: HLO_ShapedInterfaceOp<"dynamic_pad",
@@ -2350,6 +2380,7 @@ def HLO_DynamicPadOp: HLO_ShapedInterfaceOp<"dynamic_pad",
23502380 }];
23512381 let hasCanonicalizer = 1;
23522382 let hasCustomHLOConverter = 1;
2383+ let hasVerifier = 1;
23532384}
23542385
23552386def HLO_DynamicGatherOp: HLO_Op<"dynamic_gather",
0 commit comments