@@ -33,7 +33,7 @@ StringRef stringifyTypeName<FloatType>() {
33
33
}
34
34
35
35
// Verifies an atomic update op.
36
- template <typename ExpectedElementType>
36
+ template <typename AtomicOpTy, typename ExpectedElementType>
37
37
static LogicalResult verifyAtomicUpdateOp (Operation *op) {
38
38
auto ptrType = llvm::cast<spirv::PointerType>(op->getOperand (0 ).getType ());
39
39
auto elementType = ptrType.getPointeeType ();
@@ -42,8 +42,10 @@ static LogicalResult verifyAtomicUpdateOp(Operation *op) {
42
42
<< stringifyTypeName<ExpectedElementType>()
43
43
<< " value, found " << elementType;
44
44
45
+ StringAttr semanticsAttrName =
46
+ AtomicOpTy::getSemanticsAttrName (op->getName ());
45
47
auto memorySemantics =
46
- op->getAttrOfType <spirv::MemorySemanticsAttr>(kSemanticsAttrName )
48
+ op->getAttrOfType <spirv::MemorySemanticsAttr>(semanticsAttrName )
47
49
.getValue ();
48
50
if (failed (verifyMemorySemantics (op, memorySemantics))) {
49
51
return failure ();
@@ -56,95 +58,95 @@ static LogicalResult verifyAtomicUpdateOp(Operation *op) {
56
58
// ===----------------------------------------------------------------------===//
57
59
58
60
LogicalResult AtomicAndOp::verify () {
59
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
61
+ return verifyAtomicUpdateOp<AtomicAndOp, IntegerType>(getOperation ());
60
62
}
61
63
62
64
// ===----------------------------------------------------------------------===//
63
65
// spirv.AtomicIAddOp
64
66
// ===----------------------------------------------------------------------===//
65
67
66
68
LogicalResult AtomicIAddOp::verify () {
67
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
69
+ return verifyAtomicUpdateOp<AtomicIAddOp, IntegerType>(getOperation ());
68
70
}
69
71
70
72
// ===----------------------------------------------------------------------===//
71
73
// spirv.EXT.AtomicFAddOp
72
74
// ===----------------------------------------------------------------------===//
73
75
74
76
LogicalResult EXTAtomicFAddOp::verify () {
75
- return verifyAtomicUpdateOp<FloatType>(getOperation ());
77
+ return verifyAtomicUpdateOp<EXTAtomicFAddOp, FloatType>(getOperation ());
76
78
}
77
79
78
80
// ===----------------------------------------------------------------------===//
79
81
// spirv.AtomicIDecrementOp
80
82
// ===----------------------------------------------------------------------===//
81
83
82
84
LogicalResult AtomicIDecrementOp::verify () {
83
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
85
+ return verifyAtomicUpdateOp<AtomicIDecrementOp, IntegerType>(getOperation ());
84
86
}
85
87
86
88
// ===----------------------------------------------------------------------===//
87
89
// spirv.AtomicIIncrementOp
88
90
// ===----------------------------------------------------------------------===//
89
91
90
92
LogicalResult AtomicIIncrementOp::verify () {
91
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
93
+ return verifyAtomicUpdateOp<AtomicIIncrementOp, IntegerType>(getOperation ());
92
94
}
93
95
94
96
// ===----------------------------------------------------------------------===//
95
97
// spirv.AtomicISubOp
96
98
// ===----------------------------------------------------------------------===//
97
99
98
100
LogicalResult AtomicISubOp::verify () {
99
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
101
+ return verifyAtomicUpdateOp<AtomicISubOp, IntegerType>(getOperation ());
100
102
}
101
103
102
104
// ===----------------------------------------------------------------------===//
103
105
// spirv.AtomicOrOp
104
106
// ===----------------------------------------------------------------------===//
105
107
106
108
LogicalResult AtomicOrOp::verify () {
107
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
109
+ return verifyAtomicUpdateOp<AtomicOrOp, IntegerType>(getOperation ());
108
110
}
109
111
110
112
// ===----------------------------------------------------------------------===//
111
113
// spirv.AtomicSMaxOp
112
114
// ===----------------------------------------------------------------------===//
113
115
114
116
LogicalResult AtomicSMaxOp::verify () {
115
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
117
+ return verifyAtomicUpdateOp<AtomicSMaxOp, IntegerType>(getOperation ());
116
118
}
117
119
118
120
// ===----------------------------------------------------------------------===//
119
121
// spirv.AtomicSMinOp
120
122
// ===----------------------------------------------------------------------===//
121
123
122
124
LogicalResult AtomicSMinOp::verify () {
123
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
125
+ return verifyAtomicUpdateOp<AtomicSMinOp, IntegerType>(getOperation ());
124
126
}
125
127
126
128
// ===----------------------------------------------------------------------===//
127
129
// spirv.AtomicUMaxOp
128
130
// ===----------------------------------------------------------------------===//
129
131
130
132
LogicalResult AtomicUMaxOp::verify () {
131
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
133
+ return verifyAtomicUpdateOp<AtomicUMaxOp, IntegerType>(getOperation ());
132
134
}
133
135
134
136
// ===----------------------------------------------------------------------===//
135
137
// spirv.AtomicUMinOp
136
138
// ===----------------------------------------------------------------------===//
137
139
138
140
LogicalResult AtomicUMinOp::verify () {
139
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
141
+ return verifyAtomicUpdateOp<AtomicUMinOp, IntegerType>(getOperation ());
140
142
}
141
143
142
144
// ===----------------------------------------------------------------------===//
143
145
// spirv.AtomicXorOp
144
146
// ===----------------------------------------------------------------------===//
145
147
146
148
LogicalResult AtomicXorOp::verify () {
147
- return verifyAtomicUpdateOp<IntegerType>(getOperation ());
149
+ return verifyAtomicUpdateOp<AtomicXorOp, IntegerType>(getOperation ());
148
150
}
149
151
150
152
} // namespace mlir::spirv
0 commit comments