@@ -87,21 +87,21 @@ class LLVM_TernarySameArgsIntrOpF<string func, list<Trait> traits = []> :
87
87
class LLVM_CountZerosIntrOp<string func, list<Trait> traits = []> :
88
88
LLVM_OneResultIntrOp<func, [], [0],
89
89
!listconcat([Pure, SameOperandsAndResultType], traits),
90
- /*requiresFastmath=*/0,
90
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
91
91
/*immArgPositions=*/[1], /*immArgAttrNames=*/["is_zero_poison"]> {
92
92
let arguments = (ins LLVM_ScalarOrVectorOf<AnySignlessInteger>:$in,
93
93
I1Attr:$is_zero_poison);
94
94
}
95
95
96
96
def LLVM_AbsOp : LLVM_OneResultIntrOp<"abs", [], [0], [Pure],
97
- /*requiresFastmath=*/0,
97
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
98
98
/*immArgPositions=*/[1], /*immArgAttrNames=*/["is_int_min_poison"]> {
99
99
let arguments = (ins LLVM_ScalarOrVectorOf<AnySignlessInteger>:$in,
100
100
I1Attr:$is_int_min_poison);
101
101
}
102
102
103
103
def LLVM_IsFPClass : LLVM_OneResultIntrOp<"is.fpclass", [], [0], [Pure],
104
- /*requiresFastmath=*/0,
104
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
105
105
/*immArgPositions=*/[1], /*immArgAttrNames=*/["bit"]> {
106
106
let arguments = (ins LLVM_ScalarOrVectorOf<LLVM_AnyFloat>:$in, I32Attr:$bit);
107
107
}
@@ -360,8 +360,8 @@ def LLVM_LifetimeEndOp : LLVM_LifetimeBaseOp<"lifetime.end">;
360
360
361
361
def LLVM_InvariantStartOp : LLVM_OneResultIntrOp<"invariant.start", [], [1],
362
362
[DeclareOpInterfaceMethods<PromotableOpInterface>],
363
- /*requiresFastmath=*/0, /*immArgPositions =*/[0] ,
364
- /*immArgAttrNames=*/["size"]> {
363
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs =*/0 ,
364
+ /*immArgPositions=*/[0], /* immArgAttrNames=*/["size"]> {
365
365
let arguments = (ins I64Attr:$size, LLVM_AnyPointer:$ptr);
366
366
let results = (outs LLVM_DefaultPointer:$res);
367
367
let assemblyFormat = "$size `,` $ptr attr-dict `:` qualified(type($ptr))";
@@ -412,6 +412,7 @@ class LLVM_ConstrainedIntr<string mnem, int numArgs,
412
412
!gt(hasRoundingMode, 0) : [DeclareOpInterfaceMethods<RoundingModeOpInterface>],
413
413
true : []),
414
414
/*requiresFastmath=*/0,
415
+ /*requiresArgAndResultAttrs=*/0,
415
416
/*immArgPositions=*/[],
416
417
/*immArgAttrNames=*/[]> {
417
418
dag regularArgs = !dag(ins, !listsplat(LLVM_Type, numArgs), !foreach(i, !range(numArgs), "arg_" #i));
@@ -589,7 +590,7 @@ def LLVM_ExpectOp
589
590
def LLVM_ExpectWithProbabilityOp
590
591
: LLVM_OneResultIntrOp<"expect.with.probability", [], [0],
591
592
[Pure, AllTypesMatch<["val", "expected", "res"]>],
592
- /*requiresFastmath=*/0,
593
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
593
594
/*immArgPositions=*/[2], /*immArgAttrNames=*/["prob"]> {
594
595
let arguments = (ins AnySignlessInteger:$val,
595
596
AnySignlessInteger:$expected,
@@ -825,7 +826,7 @@ class LLVM_VecReductionAccBase<string mnem, Type element>
825
826
/*overloadedResults=*/[],
826
827
/*overloadedOperands=*/[1],
827
828
/*traits=*/[Pure, SameOperandsAndResultElementType],
828
- /*equiresFastmath =*/1>,
829
+ /*requiresFastmath =*/1>,
829
830
Arguments<(ins element:$start_value,
830
831
LLVM_VectorOf<element>:$input,
831
832
DefaultValuedAttr<LLVM_FastmathFlagsAttr, "{}">:$fastmathFlags)>;
@@ -1069,14 +1070,36 @@ def LLVM_masked_scatter : LLVM_ZeroResultIntrOp<"masked.scatter"> {
1069
1070
}
1070
1071
1071
1072
/// Create a call to Masked Expand Load intrinsic.
1072
- def LLVM_masked_expandload : LLVM_IntrOp<"masked.expandload", [0], [], [], 1> {
1073
- let arguments = (ins LLVM_AnyPointer, LLVM_VectorOf<I1>, LLVM_AnyVector);
1073
+ def LLVM_masked_expandload
1074
+ : LLVM_OneResultIntrOp<"masked.expandload", [0], [],
1075
+ /*traits=*/[], /*requiresFastMath=*/0, /*requiresArgAndResultAttrs=*/1,
1076
+ /*immArgPositions=*/[], /*immArgAttrNames=*/[]> {
1077
+ dag args = (ins LLVM_AnyPointer:$ptr,
1078
+ LLVM_VectorOf<I1>:$mask,
1079
+ LLVM_AnyVector:$passthru);
1080
+
1081
+ let arguments = !con(args, baseArgs);
1082
+
1083
+ let builders = [
1084
+ OpBuilder<(ins "TypeRange":$resTy, "Value":$ptr, "Value":$mask, "Value":$passthru, CArg<"uint64_t", "1">:$align)>
1085
+ ];
1074
1086
}
1075
1087
1076
1088
/// Create a call to Masked Compress Store intrinsic.
1077
1089
def LLVM_masked_compressstore
1078
- : LLVM_IntrOp<"masked.compressstore", [], [0], [], 0> {
1079
- let arguments = (ins LLVM_AnyVector, LLVM_AnyPointer, LLVM_VectorOf<I1>);
1090
+ : LLVM_ZeroResultIntrOp<"masked.compressstore", [0],
1091
+ /*traits=*/[], /*requiresAccessGroup=*/0, /*requiresAliasAnalysis=*/0,
1092
+ /*requiresArgAndResultAttrs=*/1, /*requiresOpBundles=*/0,
1093
+ /*immArgPositions=*/[], /*immArgAttrNames=*/[]> {
1094
+ dag args = (ins LLVM_AnyVector:$value,
1095
+ LLVM_AnyPointer:$ptr,
1096
+ LLVM_VectorOf<I1>:$mask);
1097
+
1098
+ let arguments = !con(args, baseArgs);
1099
+
1100
+ let builders = [
1101
+ OpBuilder<(ins "Value":$value, "Value":$ptr, "Value":$mask, CArg<"uint64_t", "1">:$align)>
1102
+ ];
1080
1103
}
1081
1104
1082
1105
//
@@ -1155,7 +1178,7 @@ def LLVM_vector_insert
1155
1178
PredOpTrait<"it is not inserting scalable into fixed-length vectors.",
1156
1179
CPred<"!isScalableVectorType($srcvec.getType()) || "
1157
1180
"isScalableVectorType($dstvec.getType())">>],
1158
- /*requiresFastmath=*/0,
1181
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
1159
1182
/*immArgPositions=*/[2], /*immArgAttrNames=*/["pos"]> {
1160
1183
let arguments = (ins LLVM_AnyVector:$dstvec, LLVM_AnyVector:$srcvec,
1161
1184
I64Attr:$pos);
@@ -1189,7 +1212,7 @@ def LLVM_vector_extract
1189
1212
PredOpTrait<"it is not extracting scalable from fixed-length vectors.",
1190
1213
CPred<"!isScalableVectorType($res.getType()) || "
1191
1214
"isScalableVectorType($srcvec.getType())">>],
1192
- /*requiresFastmath=*/0,
1215
+ /*requiresFastmath=*/0, /*requiresArgAndResultAttrs=*/0,
1193
1216
/*immArgPositions=*/[1], /*immArgAttrNames=*/["pos"]> {
1194
1217
let arguments = (ins LLVM_AnyVector:$srcvec, I64Attr:$pos);
1195
1218
let results = (outs LLVM_AnyVector:$res);
0 commit comments