@@ -19,10 +19,40 @@ include "ArmSME.td"
19
19
// ArmSME Intrinsic op definitions
20
20
//===----------------------------------------------------------------------===//
21
21
22
- def MOPPredicate : ScalableVectorOfLengthAndType<[16, 8, 4, 2], [I1]>;
23
- def MOPVector : ScalableVectorOfLengthAndType<[16, 8, 4, 2],
24
- [I8, I16, BF16, F16, F32, F64]>;
25
- def LDSTPredicate : ScalableVectorOfLengthAndType<[16, 8, 4, 2, 1], [I1]>;
22
+ def MOPPredicate : ScalableVectorOfRankAndLengthAndType<[1], [16, 8, 4, 2], [I1]>
23
+ {
24
+ let summary = "a vector type that is a supported predicate for the SME MOP instructions";
25
+ let description = [{
26
+ Possible vector types:
27
+
28
+ * `vector<[16]xi1>`
29
+ * `vector<[8]xi1>`
30
+ * `vector<[4]xi1>`
31
+ * `vector<[2]xi1>`
32
+ }];
33
+ }
34
+
35
+ // FIXME: This allows types that are not SVE vectors, e.g. vector<[16]xf32>.
36
+ def MOPVector : ScalableVectorOfRankAndLengthAndType<[1], [16, 8, 4, 2],
37
+ [I8, I16, BF16, F16, F32, F64]>
38
+ {
39
+ let summary = "a vector type that is a supported input for the SME MOP instructions";
40
+ let description = [{
41
+ Possible vector types:
42
+
43
+ Integer elements:
44
+
45
+ * `vector<[16]xi8>`
46
+ * `vector<[8]xi16>`
47
+
48
+ Floating point elements:
49
+
50
+ * `vector<[8]xf16>`
51
+ * `vector<[8]xbf16>`
52
+ * `vector<[4]xf32>`
53
+ * `vector<[2]xf64>`
54
+ }];
55
+ }
26
56
27
57
class ArmSME_IntrOp<string mnemonic, list<int> overloadedOperands = [],
28
58
list<Trait> traits = [], int numResults = 0,
@@ -65,7 +95,7 @@ def LLVM_aarch64_sme_usmops_wide : ArmSME_IntrMopOverloadedOp<"usmops.wide">;
65
95
// Loads
66
96
class ArmSME_IntrLoadOp<string mnemonic>
67
97
: ArmSME_IntrOp<mnemonic>,
68
- Arguments<(ins Arg<LDSTPredicate , "Vector predicate">:$predicate,
98
+ Arguments<(ins Arg<SVEPredicate , "Vector predicate">:$predicate,
69
99
Arg<LLVM_AnyPointer, "Load address">:$load_address,
70
100
Arg<I32, "Virtual tile ID">:$tile_id,
71
101
Arg<I32, "Tile slice">:$tile_slice_index)>;
@@ -84,7 +114,7 @@ def LLVM_aarch64_sme_ld1q_vert : ArmSME_IntrLoadOp<"ld1q.vert">;
84
114
// Stores
85
115
class ArmSME_IntrStoreOp<string mnemonic>
86
116
: ArmSME_IntrOp<mnemonic>,
87
- Arguments<(ins Arg<LDSTPredicate , "Vector predicate">:$predicate,
117
+ Arguments<(ins Arg<SVEPredicate , "Vector predicate">:$predicate,
88
118
Arg<LLVM_AnyPointer, "Store address", [MemWrite]>:$store_address,
89
119
Arg<I32, "Virtual tile ID">:$tile_id,
90
120
Arg<I32, "Tile slice">:$tile_slice_index)>;
0 commit comments