Skip to content

Commit 1a281ab

Browse files
d0ktensorflower-gardener
authored andcommitted
[mhlo] Make mhlo/chlo use hasVerifier
This is a bit cleaner and the old verifier attribute is deprecated. The change is mostly mechanical, changing static functions into members. PiperOrigin-RevId: 426193139 Change-Id: I26c9a96a558ce83efa61493b1652924ae8b92e07
1 parent c183b19 commit 1a281ab

File tree

4 files changed

+402
-400
lines changed

4 files changed

+402
-400
lines changed

‎tensorflow/compiler/mlir/hlo/include/mlir-hlo/Dialect/mhlo/IR/chlo_ops.td‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@ def HLOClient_Dialect : Dialect {
5858

5959
class HLOClient_Op<string mnemonic, list<Trait> traits> :
6060
Op<HLOClient_Dialect, mnemonic, traits> {
61-
// TODO(b/129012527) Much of this custom verification should be expressed as
62-
// type constraints.
63-
let verifier = [{ return Verify(*this); }];
6461
}
6562

6663
class HLOClient_NativeOpTrait<string name> : NativeOpTrait<name> {
@@ -626,6 +623,7 @@ def HLOClient_ConstantLikeOp : HLOClient_Op<"constant_like", [NoSideEffect,
626623
let results = (outs HLO_Tensor);
627624

628625
let hasFolder = 1;
626+
let hasVerifier = 1;
629627
}
630628

631629
def HLOClient_DigammaOp : HLOClient_UnaryElementwiseOp<"digamma",
@@ -809,6 +807,7 @@ def HLOClient_MinimumBroadcastShapesOp :
809807

810808
let assemblyFormat = "$shapes attr-dict `:` type($shapes) `->` type($results)";
811809

810+
let hasVerifier = 1;
812811
}
813812

814813
def HLOClient_RankSpecializationClusterOp
@@ -844,6 +843,8 @@ def HLOClient_RankSpecializationClusterOp
844843
let arguments = (ins Variadic<HLO_Tensor>:$operands);
845844
let results = (outs Variadic<HLO_Tensor>:$results);
846845
let regions = (region SizedRegion<1>:$body);
846+
847+
let hasVerifier = 1;
847848
}
848849

849850
def HLOClient_RankSpecializationClusterYieldOp

‎tensorflow/compiler/mlir/hlo/include/mlir-hlo/Dialect/mhlo/IR/hlo_ops.td‎

Lines changed: 39 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4036
class 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

8986
def 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

940942
def 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

980983
def 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

993998
def 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

10711079
def 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

11431152
def 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

12751286
def 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

13871402
def 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

14371454
def 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

15581576
def 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

15781596
def 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

17041723
def 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

17301750
def 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

17671789
def 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

18711895
def 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

19001925
def 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

19481974
def 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

20212049
def 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

22442273
def 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

23272357
def 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

23552386
def HLO_DynamicGatherOp: HLO_Op<"dynamic_gather",

0 commit comments

Comments
 (0)