@@ -43,16 +43,6 @@ def LLVM_ZeroResultOpBuilder :
43
43
}
44
44
}]>;
45
45
46
- class LLVM_TwoBuilders<OpBuilderDAG b1, OpBuilderDAG b2> {
47
- list<OpBuilderDAG> builders = [b1, b2];
48
- }
49
-
50
- // Base class for LLVM operations with one result.
51
- class LLVM_OneResultOp<string mnemonic, list<OpTrait> traits = []> :
52
- LLVM_Op<mnemonic, traits>, Results<(outs LLVM_Type:$res)> {
53
- let builders = [LLVM_OneResultOpBuilder];
54
- }
55
-
56
46
// Compatibility builder that takes an instance of wrapped llvm::VoidType
57
47
// to indicate no result.
58
48
def LLVM_VoidResultTypeOpBuilder :
@@ -66,10 +56,6 @@ def LLVM_VoidResultTypeOpBuilder :
66
56
build($_builder, $_state, operands, attributes);
67
57
}]>;
68
58
69
- // Base class for LLVM operations with zero results.
70
- class LLVM_ZeroResultOp<string mnemonic, list<OpTrait> traits = []> :
71
- LLVM_Op<mnemonic, traits>, Results<(outs)>,
72
- LLVM_TwoBuilders<LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder>;
73
59
74
60
// Opaque builder used for terminator operations that contain successors.
75
61
def LLVM_TerminatorPassthroughOpBuilder :
@@ -89,12 +75,13 @@ class LLVM_TerminatorOp<string mnemonic, list<OpTrait> traits = []> :
89
75
// Class for arithmetic binary operations.
90
76
class LLVM_ArithmeticOpBase<Type type, string mnemonic,
91
77
string builderFunc, list<OpTrait> traits = []> :
92
- LLVM_OneResultOp <mnemonic,
78
+ LLVM_Op <mnemonic,
93
79
!listconcat([NoSideEffect, SameOperandsAndResultType], traits)>,
94
80
LLVM_Builder<"$res = builder." # builderFunc # "($lhs, $rhs);"> {
95
81
let arguments = (ins LLVM_ScalarOrVectorOf<type>:$lhs,
96
82
LLVM_ScalarOrVectorOf<type>:$rhs);
97
83
let results = (outs LLVM_ScalarOrVectorOf<type>:$res);
84
+ let builders = [LLVM_OneResultOpBuilder];
98
85
let assemblyFormat = "$lhs `,` $rhs attr-dict `:` type($res)";
99
86
}
100
87
class LLVM_IntArithmeticOp<string mnemonic, string builderFunc,
@@ -107,11 +94,12 @@ class LLVM_FloatArithmeticOp<string mnemonic, string builderFunc,
107
94
// Class for arithmetic unary operations.
108
95
class LLVM_UnaryArithmeticOp<Type type, string mnemonic,
109
96
string builderFunc, list<OpTrait> traits = []> :
110
- LLVM_OneResultOp <mnemonic,
97
+ LLVM_Op <mnemonic,
111
98
!listconcat([NoSideEffect, SameOperandsAndResultType], traits)>,
112
99
LLVM_Builder<"$res = builder." # builderFunc # "($operand);"> {
113
100
let arguments = (ins type:$operand);
114
101
let results = (outs type:$res);
102
+ let builders = [LLVM_OneResultOpBuilder];
115
103
let assemblyFormat = "$operand attr-dict `:` type($res)";
116
104
}
117
105
@@ -151,7 +139,7 @@ def ICmpPredicate : I64EnumAttr<
151
139
}
152
140
153
141
// Other integer operations.
154
- def LLVM_ICmpOp : LLVM_OneResultOp <"icmp", [NoSideEffect]> {
142
+ def LLVM_ICmpOp : LLVM_Op <"icmp", [NoSideEffect]> {
155
143
let arguments = (ins ICmpPredicate:$predicate,
156
144
LLVM_ScalarOrVectorOf<LLVM_AnyInteger>:$lhs,
157
145
LLVM_ScalarOrVectorOf<LLVM_AnyInteger>:$rhs);
@@ -199,7 +187,7 @@ def FCmpPredicate : I64EnumAttr<
199
187
}
200
188
201
189
// Other integer operations.
202
- def LLVM_FCmpOp : LLVM_OneResultOp <"fcmp", [NoSideEffect]> {
190
+ def LLVM_FCmpOp : LLVM_Op <"fcmp", [NoSideEffect]> {
203
191
let arguments = (ins FCmpPredicate:$predicate,
204
192
LLVM_ScalarOrVectorOf<LLVM_AnyFloat>:$lhs,
205
193
LLVM_ScalarOrVectorOf<LLVM_AnyFloat>:$rhs);
@@ -252,9 +240,7 @@ class MemoryOpWithAlignmentAndAttributes : MemoryOpWithAlignmentBase {
252
240
}
253
241
254
242
// Memory-related operations.
255
- def LLVM_AllocaOp :
256
- MemoryOpWithAlignmentBase,
257
- LLVM_OneResultOp<"alloca"> {
243
+ def LLVM_AllocaOp : LLVM_Op<"alloca">, MemoryOpWithAlignmentBase {
258
244
let arguments = (ins LLVM_AnyInteger:$arraySize,
259
245
OptionalAttr<I64Attr>:$alignment);
260
246
let results = (outs LLVM_AnyPointer:$res);
@@ -277,19 +263,18 @@ def LLVM_AllocaOp :
277
263
let printer = [{ printAllocaOp(p, *this); }];
278
264
}
279
265
280
- def LLVM_GEPOp : LLVM_OneResultOp <"getelementptr", [NoSideEffect]>,
266
+ def LLVM_GEPOp : LLVM_Op <"getelementptr", [NoSideEffect]>,
281
267
LLVM_Builder<"$res = builder.CreateGEP($base, $indices);"> {
282
268
let arguments = (ins LLVM_ScalarOrVectorOf<LLVM_AnyPointer>:$base,
283
269
Variadic<LLVM_ScalarOrVectorOf<LLVM_AnyInteger>>:$indices);
284
270
let results = (outs LLVM_ScalarOrVectorOf<LLVM_AnyPointer>:$res);
271
+ let builders = [LLVM_OneResultOpBuilder];
285
272
let assemblyFormat = [{
286
273
$base `[` $indices `]` attr-dict `:` functional-type(operands, results)
287
274
}];
288
275
}
289
276
290
- def LLVM_LoadOp :
291
- MemoryOpWithAlignmentAndAttributes,
292
- LLVM_OneResultOp<"load"> {
277
+ def LLVM_LoadOp : LLVM_Op<"load">, MemoryOpWithAlignmentAndAttributes {
293
278
let arguments = (ins LLVM_PointerTo<LLVM_LoadableType>:$addr,
294
279
OptionalAttr<I64Attr>:$alignment, UnitAttr:$volatile_,
295
280
UnitAttr:$nontemporal);
@@ -312,9 +297,8 @@ def LLVM_LoadOp :
312
297
let parser = [{ return parseLoadOp(parser, result); }];
313
298
let printer = [{ printLoadOp(p, *this); }];
314
299
}
315
- def LLVM_StoreOp :
316
- MemoryOpWithAlignmentAndAttributes,
317
- LLVM_ZeroResultOp<"store"> {
300
+
301
+ def LLVM_StoreOp : LLVM_Op<"store">, MemoryOpWithAlignmentAndAttributes {
318
302
let arguments = (ins LLVM_LoadableType:$value,
319
303
LLVM_PointerTo<LLVM_LoadableType>:$addr,
320
304
OptionalAttr<I64Attr>:$alignment, UnitAttr:$volatile_,
@@ -334,11 +318,11 @@ def LLVM_StoreOp :
334
318
// Casts.
335
319
class LLVM_CastOp<string mnemonic, string builderFunc, Type type,
336
320
Type resultType, list<OpTrait> traits = []> :
337
- LLVM_OneResultOp<mnemonic,
338
- !listconcat([NoSideEffect], traits)>,
321
+ LLVM_Op<mnemonic, !listconcat([NoSideEffect], traits)>,
339
322
LLVM_Builder<"$res = builder." # builderFunc # "($arg, $_resultType);"> {
340
323
let arguments = (ins type:$arg);
341
324
let results = (outs resultType:$res);
325
+ let builders = [LLVM_OneResultOpBuilder];
342
326
let parser = [{ return mlir::impl::parseCastOp(parser, result); }];
343
327
let printer = [{ mlir::impl::printCastOp(this->getOperation(), p); }];
344
328
}
@@ -413,9 +397,10 @@ def LLVM_InvokeOp : LLVM_Op<"invoke", [
413
397
let printer = [{ printInvokeOp(p, *this); }];
414
398
}
415
399
416
- def LLVM_LandingpadOp : LLVM_OneResultOp <"landingpad"> {
400
+ def LLVM_LandingpadOp : LLVM_Op <"landingpad"> {
417
401
let arguments = (ins UnitAttr:$cleanup, Variadic<LLVM_Type>);
418
402
let results = (outs LLVM_Type:$res);
403
+ let builders = [LLVM_OneResultOpBuilder];
419
404
let verifier = [{ return ::verify(*this); }];
420
405
let parser = [{ return parseLandingpadOp(parser, result); }];
421
406
let printer = [{ printLandingpadOp(p, *this); }];
@@ -440,7 +425,7 @@ def LLVM_CallOp : LLVM_Op<"call"> {
440
425
let parser = [{ return parseCallOp(parser, result); }];
441
426
let printer = [{ printCallOp(p, *this); }];
442
427
}
443
- def LLVM_ExtractElementOp : LLVM_OneResultOp <"extractelement", [NoSideEffect]> {
428
+ def LLVM_ExtractElementOp : LLVM_Op <"extractelement", [NoSideEffect]> {
444
429
let arguments = (ins LLVM_AnyVector:$vector, LLVM_AnyInteger:$position);
445
430
let results = (outs LLVM_Type:$res);
446
431
string llvmBuilder = [{
@@ -452,26 +437,28 @@ def LLVM_ExtractElementOp : LLVM_OneResultOp<"extractelement", [NoSideEffect]> {
452
437
let parser = [{ return parseExtractElementOp(parser, result); }];
453
438
let printer = [{ printExtractElementOp(p, *this); }];
454
439
}
455
- def LLVM_ExtractValueOp : LLVM_OneResultOp <"extractvalue", [NoSideEffect]> {
440
+ def LLVM_ExtractValueOp : LLVM_Op <"extractvalue", [NoSideEffect]> {
456
441
let arguments = (ins LLVM_AnyAggregate:$container, ArrayAttr:$position);
457
442
let results = (outs LLVM_Type:$res);
458
443
string llvmBuilder = [{
459
444
$res = builder.CreateExtractValue($container, extractPosition($position));
460
445
}];
446
+ let builders = [LLVM_OneResultOpBuilder];
461
447
let parser = [{ return parseExtractValueOp(parser, result); }];
462
448
let printer = [{ printExtractValueOp(p, *this); }];
463
449
}
464
- def LLVM_InsertElementOp : LLVM_OneResultOp <"insertelement", [NoSideEffect]> {
450
+ def LLVM_InsertElementOp : LLVM_Op <"insertelement", [NoSideEffect]> {
465
451
let arguments = (ins LLVM_AnyVector:$vector, LLVM_PrimitiveType:$value,
466
452
LLVM_AnyInteger:$position);
467
453
let results = (outs LLVM_AnyVector:$res);
468
454
string llvmBuilder = [{
469
455
$res = builder.CreateInsertElement($vector, $value, $position);
470
456
}];
457
+ let builders = [LLVM_OneResultOpBuilder];
471
458
let parser = [{ return parseInsertElementOp(parser, result); }];
472
459
let printer = [{ printInsertElementOp(p, *this); }];
473
460
}
474
- def LLVM_InsertValueOp : LLVM_OneResultOp <"insertvalue", [NoSideEffect]> {
461
+ def LLVM_InsertValueOp : LLVM_Op <"insertvalue", [NoSideEffect]> {
475
462
let arguments = (ins LLVM_AnyAggregate:$container, LLVM_PrimitiveType:$value,
476
463
ArrayAttr:$position);
477
464
let results = (outs LLVM_AnyAggregate:$res);
@@ -487,7 +474,7 @@ def LLVM_InsertValueOp : LLVM_OneResultOp<"insertvalue", [NoSideEffect]> {
487
474
let parser = [{ return parseInsertValueOp(parser, result); }];
488
475
let printer = [{ printInsertValueOp(p, *this); }];
489
476
}
490
- def LLVM_ShuffleVectorOp : LLVM_OneResultOp <"shufflevector", [NoSideEffect]> {
477
+ def LLVM_ShuffleVectorOp : LLVM_Op <"shufflevector", [NoSideEffect]> {
491
478
let arguments = (ins LLVM_AnyVector:$v1, LLVM_AnyVector:$v2, ArrayAttr:$mask);
492
479
let results = (outs LLVM_AnyVector:$res);
493
480
string llvmBuilder = [{
@@ -514,7 +501,7 @@ def LLVM_ShuffleVectorOp : LLVM_OneResultOp<"shufflevector", [NoSideEffect]> {
514
501
515
502
// Misc operations.
516
503
def LLVM_SelectOp
517
- : LLVM_OneResultOp <"select",
504
+ : LLVM_Op <"select",
518
505
[NoSideEffect, AllTypesMatch<["trueValue", "falseValue", "res"]>]>,
519
506
LLVM_Builder<
520
507
"$res = builder.CreateSelect($condition, $trueValue, $falseValue);"> {
@@ -528,9 +515,10 @@ def LLVM_SelectOp
528
515
}]>];
529
516
let assemblyFormat = "operands attr-dict `:` type($condition) `,` type($res)";
530
517
}
531
- def LLVM_FreezeOp : LLVM_OneResultOp <"freeze", [SameOperandsAndResultType]> {
518
+ def LLVM_FreezeOp : LLVM_Op <"freeze", [SameOperandsAndResultType]> {
532
519
let arguments = (ins LLVM_Type:$val);
533
520
let results = (outs LLVM_Type:$res);
521
+ let builders = [LLVM_OneResultOpBuilder];
534
522
let assemblyFormat = "$val attr-dict `:` type($val)";
535
523
string llvmBuilder = "builder.CreateFreeze($val);";
536
524
}
@@ -662,7 +650,7 @@ def Linkage : LLVM_EnumAttr<
662
650
}
663
651
664
652
665
- def LLVM_AddressOfOp : LLVM_OneResultOp <"mlir.addressof"> {
653
+ def LLVM_AddressOfOp : LLVM_Op <"mlir.addressof"> {
666
654
let arguments = (ins FlatSymbolRefAttr:$global_name);
667
655
let results = (outs LLVM_Type:$res);
668
656
@@ -701,10 +689,8 @@ def LLVM_AddressOfOp : LLVM_OneResultOp<"mlir.addressof"> {
701
689
let verifier = "return ::verify(*this);";
702
690
}
703
691
704
- def LLVM_GlobalOp
705
- : LLVM_ZeroResultOp<"mlir.global",
706
- [IsolatedFromAbove,
707
- SingleBlockImplicitTerminator<"ReturnOp">, Symbol]> {
692
+ def LLVM_GlobalOp : LLVM_Op<"mlir.global",
693
+ [IsolatedFromAbove, SingleBlockImplicitTerminator<"ReturnOp">, Symbol]> {
708
694
let arguments = (ins
709
695
TypeAttr:$type,
710
696
UnitAttr:$constant,
@@ -764,9 +750,8 @@ def LLVM_GlobalOp
764
750
let verifier = "return ::verify(*this);";
765
751
}
766
752
767
- def LLVM_LLVMFuncOp
768
- : LLVM_ZeroResultOp<"func", [AutomaticAllocationScope, IsolatedFromAbove,
769
- FunctionLike, Symbol]> {
753
+ def LLVM_LLVMFuncOp : LLVM_Op<"func",
754
+ [AutomaticAllocationScope, IsolatedFromAbove, FunctionLike, Symbol]> {
770
755
let summary = "LLVM dialect function, has wrapped LLVM IR function type";
771
756
772
757
let arguments = (ins DefaultValuedAttr<Linkage, "Linkage::External">:$linkage,
@@ -817,24 +802,27 @@ def LLVM_LLVMFuncOp
817
802
}
818
803
819
804
def LLVM_NullOp
820
- : LLVM_OneResultOp <"mlir.null", [NoSideEffect]>,
805
+ : LLVM_Op <"mlir.null", [NoSideEffect]>,
821
806
LLVM_Builder<"$res = llvm::ConstantPointerNull::get("
822
807
" cast<llvm::PointerType>($_resultType));"> {
823
808
let results = (outs LLVM_AnyPointer:$res);
809
+ let builders = [LLVM_OneResultOpBuilder];
824
810
let assemblyFormat = "attr-dict `:` type($res)";
825
811
}
826
812
827
- def LLVM_UndefOp : LLVM_OneResultOp <"mlir.undef", [NoSideEffect]>,
813
+ def LLVM_UndefOp : LLVM_Op <"mlir.undef", [NoSideEffect]>,
828
814
LLVM_Builder<"$res = llvm::UndefValue::get($_resultType);"> {
829
815
let results = (outs LLVM_Type:$res);
816
+ let builders = [LLVM_OneResultOpBuilder];
830
817
let assemblyFormat = "attr-dict `:` type($res)";
831
818
}
832
819
def LLVM_ConstantOp
833
- : LLVM_OneResultOp <"mlir.constant", [NoSideEffect]>,
820
+ : LLVM_Op <"mlir.constant", [NoSideEffect]>,
834
821
LLVM_Builder<"$res = getLLVMConstant($_resultType, $value, $_location);">
835
822
{
836
823
let arguments = (ins AnyAttr:$value);
837
824
let results = (outs LLVM_Type:$res);
825
+ let builders = [LLVM_OneResultOpBuilder];
838
826
let assemblyFormat = "`(` $value `)` attr-dict `:` type($res)";
839
827
let verifier = [{ return ::verify(*this); }];
840
828
}
@@ -973,11 +961,11 @@ def LLVM_vector_reduce_fmul : LLVM_VectorReductionAcc<"fmul">;
973
961
/// isVolatile - True if the load operation is marked as volatile.
974
962
/// columns - Number of columns in matrix (must be a constant)
975
963
/// stride - Space between columns
976
- def LLVM_MatrixColumnMajorLoadOp
977
- : LLVM_OneResultOp<"intr.matrix.column.major.load"> {
964
+ def LLVM_MatrixColumnMajorLoadOp : LLVM_Op<"intr.matrix.column.major.load"> {
978
965
let arguments = (ins LLVM_Type:$data, LLVM_Type:$stride, I1Attr:$isVolatile,
979
966
I32Attr:$rows, I32Attr:$columns);
980
967
let results = (outs LLVM_Type:$res);
968
+ let builders = [LLVM_OneResultOpBuilder];
981
969
string llvmBuilder = [{
982
970
llvm::MatrixBuilder<decltype(builder)> mb(builder);
983
971
const llvm::DataLayout &dl =
@@ -1000,10 +988,10 @@ def LLVM_MatrixColumnMajorLoadOp
1000
988
/// rows - Number of rows in matrix (must be a constant)
1001
989
/// columns - Number of columns in matrix (must be a constant)
1002
990
/// stride - Space between columns
1003
- def LLVM_MatrixColumnMajorStoreOp
1004
- : LLVM_ZeroResultOp<"intr.matrix.column.major.store"> {
991
+ def LLVM_MatrixColumnMajorStoreOp : LLVM_Op<"intr.matrix.column.major.store"> {
1005
992
let arguments = (ins LLVM_Type:$matrix, LLVM_Type:$data, LLVM_Type:$stride,
1006
993
I1Attr:$isVolatile, I32Attr:$rows, I32Attr:$columns);
994
+ let builders = [LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder];
1007
995
string llvmBuilder = [{
1008
996
llvm::MatrixBuilder<decltype(builder)> mb(builder);
1009
997
const llvm::DataLayout &dl =
@@ -1020,11 +1008,11 @@ def LLVM_MatrixColumnMajorStoreOp
1020
1008
1021
1009
/// Create a llvm.matrix.multiply call, multiplying 2-D matrices LHS and RHS, as
1022
1010
/// specified in the LLVM MatrixBuilder.
1023
- def LLVM_MatrixMultiplyOp
1024
- : LLVM_OneResultOp<"intr.matrix.multiply"> {
1011
+ def LLVM_MatrixMultiplyOp : LLVM_Op<"intr.matrix.multiply"> {
1025
1012
let arguments = (ins LLVM_Type:$lhs, LLVM_Type:$rhs, I32Attr:$lhs_rows,
1026
1013
I32Attr:$lhs_columns, I32Attr:$rhs_columns);
1027
1014
let results = (outs LLVM_Type:$res);
1015
+ let builders = [LLVM_OneResultOpBuilder];
1028
1016
string llvmBuilder = [{
1029
1017
llvm::MatrixBuilder<decltype(builder)> mb(builder);
1030
1018
$res = mb.CreateMatrixMultiply(
@@ -1037,9 +1025,10 @@ def LLVM_MatrixMultiplyOp
1037
1025
1038
1026
/// Create a llvm.matrix.transpose call, transposing a `rows` x `columns` 2-D
1039
1027
/// `matrix`, as specified in the LLVM MatrixBuilder.
1040
- def LLVM_MatrixTransposeOp : LLVM_OneResultOp <"intr.matrix.transpose"> {
1028
+ def LLVM_MatrixTransposeOp : LLVM_Op <"intr.matrix.transpose"> {
1041
1029
let arguments = (ins LLVM_Type:$matrix, I32Attr:$rows, I32Attr:$columns);
1042
1030
let results = (outs LLVM_Type:$res);
1031
+ let builders = [LLVM_OneResultOpBuilder];
1043
1032
string llvmBuilder = [{
1044
1033
llvm::MatrixBuilder<decltype(builder)> mb(builder);
1045
1034
$res = mb.CreateMatrixTranspose(
@@ -1061,10 +1050,11 @@ def LLVM_GetActiveLaneMaskOp
1061
1050
}
1062
1051
1063
1052
/// Create a call to Masked Load intrinsic.
1064
- def LLVM_MaskedLoadOp : LLVM_OneResultOp <"intr.masked.load"> {
1053
+ def LLVM_MaskedLoadOp : LLVM_Op <"intr.masked.load"> {
1065
1054
let arguments = (ins LLVM_Type:$data, LLVM_Type:$mask,
1066
1055
Variadic<LLVM_Type>:$pass_thru, I32Attr:$alignment);
1067
1056
let results = (outs LLVM_Type:$res);
1057
+ let builders = [LLVM_OneResultOpBuilder];
1068
1058
string llvmBuilder = [{
1069
1059
$res = $pass_thru.empty() ? builder.CreateMaskedLoad(
1070
1060
$data, llvm::Align($alignment), $mask) :
@@ -1076,9 +1066,10 @@ def LLVM_MaskedLoadOp : LLVM_OneResultOp<"intr.masked.load"> {
1076
1066
}
1077
1067
1078
1068
/// Create a call to Masked Store intrinsic.
1079
- def LLVM_MaskedStoreOp : LLVM_ZeroResultOp <"intr.masked.store"> {
1069
+ def LLVM_MaskedStoreOp : LLVM_Op <"intr.masked.store"> {
1080
1070
let arguments = (ins LLVM_Type:$value, LLVM_Type:$data, LLVM_Type:$mask,
1081
1071
I32Attr:$alignment);
1072
+ let builders = [LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder];
1082
1073
string llvmBuilder = [{
1083
1074
builder.CreateMaskedStore(
1084
1075
$value, $data, llvm::Align($alignment), $mask);
@@ -1088,10 +1079,11 @@ def LLVM_MaskedStoreOp : LLVM_ZeroResultOp<"intr.masked.store"> {
1088
1079
}
1089
1080
1090
1081
/// Create a call to Masked Gather intrinsic.
1091
- def LLVM_masked_gather : LLVM_OneResultOp <"intr.masked.gather"> {
1082
+ def LLVM_masked_gather : LLVM_Op <"intr.masked.gather"> {
1092
1083
let arguments = (ins LLVM_Type:$ptrs, LLVM_Type:$mask,
1093
1084
Variadic<LLVM_Type>:$pass_thru, I32Attr:$alignment);
1094
1085
let results = (outs LLVM_Type:$res);
1086
+ let builders = [LLVM_OneResultOpBuilder];
1095
1087
string llvmBuilder = [{
1096
1088
$res = $pass_thru.empty() ? builder.CreateMaskedGather(
1097
1089
$ptrs, llvm::Align($alignment), $mask) :
@@ -1103,9 +1095,10 @@ def LLVM_masked_gather : LLVM_OneResultOp<"intr.masked.gather"> {
1103
1095
}
1104
1096
1105
1097
/// Create a call to Masked Scatter intrinsic.
1106
- def LLVM_masked_scatter : LLVM_ZeroResultOp <"intr.masked.scatter"> {
1098
+ def LLVM_masked_scatter : LLVM_Op <"intr.masked.scatter"> {
1107
1099
let arguments = (ins LLVM_Type:$value, LLVM_Type:$ptrs, LLVM_Type:$mask,
1108
1100
I32Attr:$alignment);
1101
+ let builders = [LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder];
1109
1102
string llvmBuilder = [{
1110
1103
builder.CreateMaskedScatter(
1111
1104
$value, $ptrs, llvm::Align($alignment), $mask);
@@ -1223,8 +1216,9 @@ def LLVM_AssumeOp : LLVM_Op<"intr.assume", []> {
1223
1216
}];
1224
1217
}
1225
1218
1226
- def LLVM_FenceOp : LLVM_ZeroResultOp <"fence", [] > {
1219
+ def LLVM_FenceOp : LLVM_Op <"fence"> {
1227
1220
let arguments = (ins AtomicOrdering:$ordering, StrAttr:$syncscope);
1221
+ let builders = [LLVM_VoidResultTypeOpBuilder, LLVM_ZeroResultOpBuilder];
1228
1222
let llvmBuilder = [{
1229
1223
llvm::LLVMContext &llvmContext = builder.getContext();
1230
1224
builder.CreateFence(getLLVMAtomicOrdering($ordering),
0 commit comments