23template <
typename OpTy>
25 GroupOperation operation = cast<OpTy>(groupOp).getGroupOperation();
26 if (operation == GroupOperation::ClusteredReduce &&
28 return groupOp->
emitOpError(
"cluster size operand must be provided for "
29 "'ClusteredReduce' group operation");
32 int32_t clusterSize = 0;
37 "cluster size operand must come from a constant op");
39 if (!llvm::isPowerOf2_32(clusterSize))
41 "cluster size operand must be a power of two");
50LogicalResult GroupBroadcastOp::verify() {
51 if (
auto localIdTy = dyn_cast<VectorType>(getLocalid().
getType()))
52 if (localIdTy.getNumElements() != 2 && localIdTy.getNumElements() != 3)
53 return emitOpError(
"localid is a vector and can be with only "
54 " 2 or 3 components, actual number is ")
55 << localIdTy.getNumElements();
64LogicalResult GroupNonUniformBroadcastOp::verify() {
68 if (
auto spirvModule = (*this)->getParentOfType<spirv::ModuleOp>())
71 if (targetEnv.getVersion() < spirv::Version::V_1_5) {
72 auto *idOp = getId().getDefiningOp();
73 if (!idOp || !isa<spirv::ConstantOp,
74 spirv::ReferenceOfOp>(idOp))
75 return emitOpError(
"id must be the result of a constant op");
85template <
typename OpTy>
87 if (op.getOperands().back().getType().isSignedInteger())
88 return op.emitOpError(
"second operand must be a singless/unsigned integer");
93LogicalResult GroupNonUniformShuffleOp::verify() {
96LogicalResult GroupNonUniformShuffleDownOp::verify() {
99LogicalResult GroupNonUniformShuffleUpOp::verify() {
102LogicalResult GroupNonUniformShuffleXorOp::verify() {
110LogicalResult GroupNonUniformFAddOp::verify() {
118LogicalResult GroupNonUniformFMaxOp::verify() {
126LogicalResult GroupNonUniformFMinOp::verify() {
134LogicalResult GroupNonUniformFMulOp::verify() {
142LogicalResult GroupNonUniformIAddOp::verify() {
150LogicalResult GroupNonUniformIMulOp::verify() {
158LogicalResult GroupNonUniformSMaxOp::verify() {
166LogicalResult GroupNonUniformSMinOp::verify() {
174LogicalResult GroupNonUniformUMaxOp::verify() {
182LogicalResult GroupNonUniformUMinOp::verify() {
190LogicalResult GroupNonUniformBitwiseAndOp::verify() {
198LogicalResult GroupNonUniformBitwiseOrOp::verify() {
206LogicalResult GroupNonUniformBitwiseXorOp::verify() {
214LogicalResult GroupNonUniformLogicalAndOp::verify() {
222LogicalResult GroupNonUniformLogicalOrOp::verify() {
230LogicalResult GroupNonUniformLogicalXorOp::verify() {
238LogicalResult GroupNonUniformRotateKHROp::verify() {
239 if (Value clusterSizeVal = getClusterSize()) {
240 mlir::Operation *defOp = clusterSizeVal.getDefiningOp();
241 int32_t clusterSize = 0;
244 return emitOpError(
"cluster size operand must come from a constant op");
246 if (!llvm::isPowerOf2_32(clusterSize))
247 return emitOpError(
"cluster size operand must be a power of two");
p<< " : "<< getMemRefType()<< ", "<< getType();}static LogicalResult verifyVectorMemoryOp(Operation *op, MemRefType memrefType, VectorType vectorType) { if(memrefType.getElementType() !=vectorType.getElementType()) return op-> emitOpError("requires memref and vector types of the same elemental type")
Given a list of lists of parsed operands, populates uniqueOperands with unique operands.
Operation is the basic unit of execution within MLIR.
Value getOperand(unsigned idx)
unsigned getNumOperands()
InFlightDiagnostic emitOpError(const Twine &message={})
Emit an error with the op name prefixed, like "'dim' op " which is convenient for verifiers.
Operation * getDefiningOp() const
If this value is the result of an operation, return the operation that defines it.
static LogicalResult verifyGroupNonUniformArithmeticOp(Operation *groupOp)
TargetEnvAttr lookupTargetEnvOrDefault(Operation *op)
Queries the target environment recursively from enclosing symbol table ops containing the given op or...
static LogicalResult verifyGroupNonUniformShuffleOp(OpTy op)
LogicalResult extractValueFromConstOp(Operation *op, int32_t &value)
TargetEnvAttr getDefaultTargetEnv(MLIRContext *context)
Returns the default target environment: SPIR-V 1.0 with Shader capability and no extra extensions.
Type getType(OpFoldResult ofr)
Returns the int type of the integer in ofr.