/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\ |* *| |* Op Definitions *| |* *| |* Automatically generated file, do not edit! *| |* From: PtrOps.td *| |* *| \*===----------------------------------------------------------------------===*/ #ifdef GET_OP_LIST #undef GET_OP_LIST ::mlir::ptr::ConstantOp, ::mlir::ptr::FromPtrOp, ::mlir::ptr::GatherOp, ::mlir::ptr::GetMetadataOp, ::mlir::ptr::LoadOp, ::mlir::ptr::MaskedLoadOp, ::mlir::ptr::MaskedStoreOp, ::mlir::ptr::PtrAddOp, ::mlir::ptr::PtrDiffOp, ::mlir::ptr::ScatterOp, ::mlir::ptr::StoreOp, ::mlir::ptr::ToPtrOp, ::mlir::ptr::TypeOffsetOp #endif // GET_OP_LIST #ifdef GET_OP_CLASSES #undef GET_OP_CLASSES //===----------------------------------------------------------------------===// // Local Utility Method Definitions //===----------------------------------------------------------------------===// static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps1( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::llvm::isa<::mlir::ptr::PtrType>(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be pointer type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps2( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::llvm::isa<::mlir::ptr::PtrMetadataType>(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be Pointer metadata type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps3( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((::llvm::isa<::mlir::PtrLikeTypeInterface>(type)))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be PtrLikeTypeInterface instance, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps4( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::ptr::PtrType>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be A shaped type with value semantics and rank. of pointer type values, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps5( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return (elementType.isSignlessInteger(1)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be A shaped type with value semantics and rank. of 1-bit signless integer values, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps6( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return !((::llvm::isa<::mlir::TokenType>(elementType))); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be A shaped type with value semantics and rank. of any non-token type values, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps7( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(!((::llvm::isa<::mlir::TokenType>(type))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be any non-token type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps8( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((((type.hasTrait<::mlir::ValueSemantics>())) && ((::llvm::cast<::mlir::ShapedType>(type).hasRank()))) && ([](::mlir::Type elementType) { return (::llvm::isa<::mlir::ptr::PtrType>(elementType)); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) || ((::llvm::isa<::mlir::ptr::PtrType>(type))))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be A shaped type with value semantics and rank. of pointer type values or pointer type, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps9( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!(((((type.hasTrait<::mlir::ValueSemantics>())) && ((::llvm::cast<::mlir::ShapedType>(type).hasRank()))) && ([](::mlir::Type elementType) { return (elementType.isSignlessIntOrIndex()); }(::llvm::cast<::mlir::ShapedType>(type).getElementType()))) || ((type.isSignlessIntOrIndex())))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be A shaped type with value semantics and rank. of signless integer or index values or signless integer or index, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_type_constraint_PtrOps10( ::mlir::Operation *op, ::mlir::Type type, ::llvm::StringRef valueKind, unsigned valueIndex) { if (!((type.isSignlessIntOrIndex()))) { return op->emitOpError(valueKind) << " #" << valueIndex << " must be signless integer or index, but got " << type; } return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps1( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::TypedAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: TypedAttr instance"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps1( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_PtrOps1(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps2( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !((::llvm::isa<::mlir::StringAttr>(attr)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: string attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps2( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_PtrOps2(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps3( ::mlir::Attribute attr, ::llvm::StringRef attrName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (attr && !(((::llvm::isa<::mlir::TypeAttr>(attr))) && ((::llvm::isa<::mlir::Type>(::llvm::cast<::mlir::TypeAttr>(attr).getValue()))) && ((true)))) return emitError() << "attribute '" << attrName << "' failed to satisfy constraint: any type attribute"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_attr_constraint_PtrOps3( ::mlir::Operation *op, ::mlir::Attribute attr, ::llvm::StringRef attrName) { return __mlir_ods_local_attr_constraint_PtrOps3(attr, attrName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps1( ::mlir::ptr::AtomicOrdering prop, ::llvm::StringRef propName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (!(((prop == ::mlir::ptr::AtomicOrdering::not_atomic)) || ((prop == ::mlir::ptr::AtomicOrdering::unordered)) || ((prop == ::mlir::ptr::AtomicOrdering::monotonic)) || ((prop == ::mlir::ptr::AtomicOrdering::acquire)) || ((prop == ::mlir::ptr::AtomicOrdering::release)) || ((prop == ::mlir::ptr::AtomicOrdering::acq_rel)) || ((prop == ::mlir::ptr::AtomicOrdering::seq_cst)))) return emitError() << "property '" << propName << "' failed to satisfy constraint: Atomic ordering for LLVM's memory model"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps1( ::mlir::Operation *op, ::mlir::ptr::AtomicOrdering prop, ::llvm::StringRef propName) { return __mlir_ods_local_prop_constraint_PtrOps1(prop, propName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps2( ::mlir::ptr::PtrAddFlags prop, ::llvm::StringRef propName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (!(((prop == ::mlir::ptr::PtrAddFlags::none)) || ((prop == ::mlir::ptr::PtrAddFlags::nusw)) || ((prop == ::mlir::ptr::PtrAddFlags::nuw)) || ((prop == ::mlir::ptr::PtrAddFlags::inbounds)))) return emitError() << "property '" << propName << "' failed to satisfy constraint: Pointer add flags"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps2( ::mlir::Operation *op, ::mlir::ptr::PtrAddFlags prop, ::llvm::StringRef propName) { return __mlir_ods_local_prop_constraint_PtrOps2(prop, propName, [op]() { return op->emitOpError(); }); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps3( ::mlir::ptr::PtrDiffFlags prop, ::llvm::StringRef propName, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { if (!(((static_cast(prop) & ~3) == 0))) return emitError() << "property '" << propName << "' failed to satisfy constraint: Pointer difference flags"; return ::mlir::success(); } static ::llvm::LogicalResult __mlir_ods_local_prop_constraint_PtrOps3( ::mlir::Operation *op, ::mlir::ptr::PtrDiffFlags prop, ::llvm::StringRef propName) { return __mlir_ods_local_prop_constraint_PtrOps3(prop, propName, [op]() { return op->emitOpError(); }); } namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::ConstantOp definitions //===----------------------------------------------------------------------===// namespace detail { ConstantOpGenericAdaptorBase::ConstantOpGenericAdaptorBase(ConstantOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::TypedAttr ConstantOpGenericAdaptorBase::getValue() { auto attr = getValueAttr(); return attr; } } // namespace detail ConstantOpAdaptor::ConstantOpAdaptor(ConstantOp op) : ConstantOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ConstantOpAdaptor::verify(::mlir::Location loc) { auto tblgen_value = getProperties().value; (void)tblgen_value; if (!tblgen_value) return emitError(loc, "'ptr.constant' op requires attribute 'value'"); if (tblgen_value && !((::llvm::isa<::mlir::TypedAttr>(tblgen_value)))) return emitError(loc, "'ptr.constant' op attribute 'value' failed to satisfy constraint: TypedAttr instance"); return ::mlir::success(); } ::llvm::LogicalResult ConstantOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.value; auto attr = dict.get("value"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `value` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute ConstantOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.value; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("value", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ConstantOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.value.getAsOpaquePointer())); } std::optional ConstantOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "value") return prop.value; return std::nullopt; } void ConstantOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "value") { prop.value = ::llvm::dyn_cast_or_null>(value); return; } } void ConstantOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.value) attrs.append("value", prop.value); } ::llvm::LogicalResult ConstantOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getValueAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps1(attr, "value", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult ConstantOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.value))) return ::mlir::failure(); return ::mlir::success(); } void ConstantOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.value); } ::mlir::TypedAttr ConstantOp::getValue() { auto attr = getValueAttr(); return attr; } void ConstantOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::TypedAttr value) { odsState.getOrAddProperties().value = value; odsState.addTypes(result); } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::TypedAttr value) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(value)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::TypedAttr value) { return create(builder, builder.getLoc(), std::forward(result), std::forward(value)); } void ConstantOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypedAttr value) { odsState.getOrAddProperties().value = value; ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(ConstantOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, odsState.operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) odsState.addTypes(inferredReturnTypes); else ::mlir::detail::reportFatalInferReturnTypesError(odsState); } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypedAttr value) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypedAttr value) { return create(builder, builder.getLoc(), std::forward(value)); } void ConstantOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::TypedAttr value) { odsState.getOrAddProperties().value = value; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::TypedAttr value) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(value)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::TypedAttr value) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(value)); } void ConstantOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ConstantOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(ConstantOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(attributes)); } void ConstantOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void ConstantOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(ConstantOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } ConstantOp ConstantOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ConstantOp ConstantOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ConstantOp::verifyInvariantsImpl() { auto tblgen_value = getProperties().value; (void)tblgen_value; if (!tblgen_value) return emitOpError("requires attribute 'value'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps1(*this, tblgen_value, "value"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!(((getValue().getType()) == ((*this->getODSResults(0).begin()).getType()) && ((*this->getODSResults(0).begin()).getType()) == (getValue().getType())))) return emitOpError("failed to verify that all of {value, result} have same type"); return ::mlir::success(); } ::llvm::LogicalResult ConstantOp::verifyInvariants() { return verifyInvariantsImpl(); } ::llvm::LogicalResult ConstantOp::inferReturnTypes(::mlir::MLIRContext *context, ::std::optional<::mlir::Location> location, ::mlir::ValueRange operands, ::mlir::DictionaryAttr attributes, ::mlir::PropertyRef properties, ::mlir::RegionRange regions, ::llvm::SmallVectorImpl<::mlir::Type>&inferredReturnTypes) { inferredReturnTypes.resize(1); ::mlir::Builder odsBuilder(context); ::mlir::TypedAttr odsInferredTypeAttr0 = (properties ? properties.as()->value : ::llvm::dyn_cast_or_null<::mlir::TypedAttr>(attributes.get("value"))); if (!odsInferredTypeAttr0) return ::mlir::failure(); ::mlir::Type odsInferredType0 = odsInferredTypeAttr0.getType(); inferredReturnTypes[0] = odsInferredType0; return ::mlir::success(); } ::mlir::ParseResult ConstantOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::TypedAttr valueAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseCustomAttributeWithFallback(valueAttr, ::mlir::Type{})) { return ::mlir::failure(); } if (valueAttr) result.getOrAddProperties().value = valueAttr; result.addTypes(valueAttr.getType()); return ::mlir::success(); } void ConstantOp::print(::mlir::OpAsmPrinter &_odsPrinter) { ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("value"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' '; _odsPrinter.printStrippedAttrOrType(getValueAttr()); } void ConstantOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::ConstantOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::ConstantOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::FromPtrOp definitions //===----------------------------------------------------------------------===// namespace detail { FromPtrOpGenericAdaptorBase::FromPtrOpGenericAdaptorBase(FromPtrOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} std::pair FromPtrOpGenericAdaptorBase::getODSOperandIndexAndLength(unsigned index, unsigned odsOperandsSize) { bool isVariadic[] = {false, true}; int prevVariadicCount = 0; for (unsigned i = 0; i < index; ++i) if (isVariadic[i]) ++prevVariadicCount; // Calculate how many dynamic values a static variadic operand corresponds to. // This assumes all static variadic operands have the same dynamic value count. int variadicSize = (odsOperandsSize - 1) / 1; // `index` passed in as the parameter is the static index which counts each // operand (variadic or not) as size 1. So here for each previous static variadic // operand, we need to offset by (variadicSize - 1) to get where the dynamic // value pack for this static operand starts. int start = index + (variadicSize - 1) * prevVariadicCount; int size = isVariadic[index] ? variadicSize : 1; return {start, size}; } } // namespace detail FromPtrOpAdaptor::FromPtrOpAdaptor(FromPtrOp op) : FromPtrOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult FromPtrOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } std::pair FromPtrOp::getODSOperandIndexAndLength(unsigned index) { bool isVariadic[] = {false, true}; int prevVariadicCount = 0; for (unsigned i = 0; i < index; ++i) if (isVariadic[i]) ++prevVariadicCount; // Calculate how many dynamic values a static variadic operand corresponds to. // This assumes all static variadic operands have the same dynamic value count. int variadicSize = (getOperation()->getNumOperands() - 1) / 1; // `index` passed in as the parameter is the static index which counts each // operand (variadic or not) as size 1. So here for each previous static variadic // operand, we need to offset by (variadicSize - 1) to get where the dynamic // value pack for this static operand starts. int start = index + (variadicSize - 1) * prevVariadicCount; int size = isVariadic[index] ? variadicSize : 1; return {start, size}; } ::mlir::MutableOperandRange FromPtrOp::getMetadataMutable() { auto range = getODSOperandIndexAndLength(1); auto mutableRange = ::mlir::MutableOperandRange(getOperation(), range.first, range.second); return mutableRange; } ::llvm::LogicalResult FromPtrOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute FromPtrOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code FromPtrOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional FromPtrOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void FromPtrOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void FromPtrOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult FromPtrOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void FromPtrOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { odsState.addOperands(ptr); if (metadata) odsState.addOperands(metadata); odsState.addTypes(result); } FromPtrOp FromPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(ptr), std::forward(metadata)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FromPtrOp FromPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { return create(builder, builder.getLoc(), std::forward(result), std::forward(ptr), std::forward(metadata)); } void FromPtrOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { odsState.addOperands(ptr); if (metadata) odsState.addOperands(metadata); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } FromPtrOp FromPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(metadata)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FromPtrOp FromPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/::mlir::Value metadata) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(metadata)); } void FromPtrOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() >= 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } FromPtrOp FromPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FromPtrOp FromPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void FromPtrOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() >= 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } FromPtrOp FromPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } FromPtrOp FromPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult FromPtrOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); if (valueGroup1.size() > 1) { return emitOpError("operand group starting at #") << index << " requires 0 or 1 element, but found " << valueGroup1.size(); } for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps2(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps3(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((!getResult() || !getMetadata() || std::equal_to<>()(PtrMetadataType::get(cast((*this->getODSResults(0).begin()).getType())), (*this->getODSOperands(1).begin()).getType())))) return emitOpError("failed to verify that metadata type"); return ::mlir::success(); } ::llvm::LogicalResult FromPtrOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult FromPtrOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::llvm::SmallVector<::mlir::OpAsmParser::UnresolvedOperand, 4> metadataOperands; ::llvm::SMLoc metadataOperandsLoc; (void)metadataOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("metadata"))) { { metadataOperandsLoc = parser.getCurrentLocation(); ::mlir::OpAsmParser::UnresolvedOperand operand; ::mlir::OptionalParseResult parseResult = parser.parseOptionalOperand(operand); if (parseResult.has_value()) { if (failed(*parseResult)) return ::mlir::failure(); metadataOperands.push_back(operand); } } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::ptr::PtrType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::PtrLikeTypeInterface type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } for (::mlir::Type type : resultTypes) { (void)type; if (!((::llvm::isa<::mlir::PtrLikeTypeInterface>(type)))) { return parser.emitError(parser.getNameLoc()) << "'result' must be PtrLikeTypeInterface instance, but got " << type; } } result.addTypes(resultTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); if (!metadataOperands.empty()) { if (parser.resolveOperands(metadataOperands, PtrMetadataType::get(cast(resultTypes[0])), metadataOperandsLoc, result.operands)) return ::mlir::failure(); } return ::mlir::success(); } void FromPtrOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); if (getMetadata()) { _odsPrinter << ' ' << "metadata"; _odsPrinter << ' '; if (::mlir::Value value = getMetadata()) _odsPrinter << value; } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ptr::PtrType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::PtrLikeTypeInterface>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void FromPtrOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::FromPtrOp) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::GatherOp definitions //===----------------------------------------------------------------------===// namespace detail { GatherOpGenericAdaptorBase::GatherOpGenericAdaptorBase(GatherOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail GatherOpAdaptor::GatherOpAdaptor(GatherOp op) : GatherOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GatherOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult GatherOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } return ::mlir::success(); } ::mlir::Attribute GatherOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GatherOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.alignment)); } std::optional GatherOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void GatherOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void GatherOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult GatherOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult GatherOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void GatherOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType, Value ptrs, Value mask, Value passthrough, unsigned alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType, Value ptrs, Value mask, Value passthrough, unsigned alignment) { return create(builder, builder.getLoc(), std::forward(resultType), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void GatherOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptrs); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); odsState.addTypes(result); } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(result), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void GatherOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptrs); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GatherOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, odsState.operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) odsState.addTypes(inferredReturnTypes); else ::mlir::detail::reportFatalInferReturnTypesError(odsState); } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void GatherOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptrs); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptrs, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptrs), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void GatherOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GatherOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GatherOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(attributes)); } void GatherOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GatherOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GatherOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } GatherOp GatherOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GatherOp GatherOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GatherOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((std::equal_to<>()( ::llvm::cast((*this->getODSResults(0).begin()).getType()).clone( IntegerType::get((*this->getODSResults(0).begin()).getType().getContext(), 1)) , (*this->getODSOperands(1).begin()).getType())))) return emitOpError("failed to verify that result and mask must be compatible"); if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(2).begin()).getType()) && ((*this->getODSOperands(2).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {result, passthrough} have same type"); if (!(((::llvm::cast<::mlir::ShapedType>((*this->getODSResults(0).begin()).getType()).getShape()) == (::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(0).begin()).getType()).getShape()) && (::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(0).begin()).getType()).getShape()) == (::llvm::cast<::mlir::ShapedType>((*this->getODSResults(0).begin()).getType()).getShape())))) return emitOpError("failed to verify that all of {result, ptrs} have same shape"); if (!((((*this->getODSResults(0).begin()).getType().getTypeID()) == ((*this->getODSOperands(0).begin()).getType().getTypeID()) && ((*this->getODSOperands(0).begin()).getType().getTypeID()) == ((*this->getODSResults(0).begin()).getType().getTypeID())))) return emitOpError("failed to verify that all of {result, ptrs} have same type IDs"); return ::mlir::success(); } ::llvm::LogicalResult GatherOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::llvm::LogicalResult GatherOp::inferReturnTypes(::mlir::MLIRContext *context, ::std::optional<::mlir::Location> location, ::mlir::ValueRange operands, ::mlir::DictionaryAttr attributes, ::mlir::PropertyRef properties, ::mlir::RegionRange regions, ::llvm::SmallVectorImpl<::mlir::Type>&inferredReturnTypes) { inferredReturnTypes.resize(1); ::mlir::Builder odsBuilder(context); if (operands.size() <= 2) return ::mlir::failure(); ::mlir::Type odsInferredType0 = operands[2].getType(); inferredReturnTypes[0] = odsInferredType0; return ::mlir::success(); } ::mlir::ParseResult GatherOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrsRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrsOperands(&ptrsRawOperand, 1); ::llvm::SMLoc ptrsOperandsLoc; (void)ptrsOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand passthroughRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> passthroughOperands(&passthroughRawOperand, 1); ::llvm::SMLoc passthroughOperandsLoc; (void)passthroughOperandsLoc; ::mlir::Type ptrsRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrsTypes(&ptrsRawType, 1); ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); ptrsOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrsRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); passthroughOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(passthroughRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("alignment"))) { if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrsRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } for (::mlir::Type type : resultTypes) { (void)type; if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return !((::llvm::isa<::mlir::TokenType>(elementType))); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return parser.emitError(parser.getNameLoc()) << "'result' must be A shaped type with value semantics and rank. of any non-token type values, but got " << type; } } result.addTypes(resultTypes); if (parser.resolveOperands(ptrsOperands, ptrsTypes, ptrsOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, ::llvm::cast(resultTypes[0]).clone( IntegerType::get(resultTypes[0].getContext(), 1)) , maskOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(passthroughOperands, resultTypes[0], passthroughOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GatherOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtrs(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPassthrough(); if (getAlignment() != std::nullopt) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtrs().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::GatherOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::GatherOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::GetMetadataOp definitions //===----------------------------------------------------------------------===// namespace detail { GetMetadataOpGenericAdaptorBase::GetMetadataOpGenericAdaptorBase(GetMetadataOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail GetMetadataOpAdaptor::GetMetadataOpAdaptor(GetMetadataOp op) : GetMetadataOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult GetMetadataOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult GetMetadataOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute GetMetadataOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code GetMetadataOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional GetMetadataOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void GetMetadataOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void GetMetadataOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult GetMetadataOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void GetMetadataOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value ptr) { odsState.addOperands(ptr); odsState.addTypes(result); } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(result), std::forward(ptr)); } void GetMetadataOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr) { odsState.addOperands(ptr); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GetMetadataOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, odsState.operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) odsState.addTypes(inferredReturnTypes); else ::mlir::detail::reportFatalInferReturnTypesError(odsState); } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(ptr)); } void GetMetadataOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { odsState.addOperands(ptr); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr)); } void GetMetadataOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void GetMetadataOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GetMetadataOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(attributes)); } void GetMetadataOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void GetMetadataOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(GetMetadataOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } GetMetadataOp GetMetadataOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } GetMetadataOp GetMetadataOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult GetMetadataOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps2(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((std::equal_to<>()(PtrMetadataType::get(cast((*this->getODSOperands(0).begin()).getType())), (*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that metadata type"); return ::mlir::success(); } ::llvm::LogicalResult GetMetadataOp::verifyInvariants() { return verifyInvariantsImpl(); } ::llvm::LogicalResult GetMetadataOp::inferReturnTypes(::mlir::MLIRContext *context, ::std::optional<::mlir::Location> location, ::mlir::ValueRange operands, ::mlir::DictionaryAttr attributes, ::mlir::PropertyRef properties, ::mlir::RegionRange regions, ::llvm::SmallVectorImpl<::mlir::Type>&inferredReturnTypes) { inferredReturnTypes.resize(1); ::mlir::Builder odsBuilder(context); if (operands.size() <= 0) return ::mlir::failure(); ::mlir::Type odsInferredType0 = PtrMetadataType::get(cast(operands[0].getType())); inferredReturnTypes[0] = odsInferredType0; return ::mlir::success(); } ::mlir::ParseResult GetMetadataOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::PtrLikeTypeInterface type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } for (::mlir::Type type : ptrTypes) { (void)type; if (!((::llvm::isa<::mlir::PtrLikeTypeInterface>(type)))) { return parser.emitError(parser.getNameLoc()) << "'ptr' must be PtrLikeTypeInterface instance, but got " << type; } } result.addTypes(PtrMetadataType::get(cast(ptrTypes[0]))); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void GetMetadataOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::PtrLikeTypeInterface>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void GetMetadataOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::GetMetadataOp) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::LoadOp definitions //===----------------------------------------------------------------------===// namespace detail { LoadOpGenericAdaptorBase::LoadOpGenericAdaptorBase(LoadOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::llvm::StringRef > LoadOpGenericAdaptorBase::getSyncscope() { auto attr = getSyncscopeAttr(); return attr ? ::std::optional< ::llvm::StringRef >(attr.getValue()) : (::std::nullopt); } } // namespace detail LoadOpAdaptor::LoadOpAdaptor(LoadOp op) : LoadOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult LoadOpAdaptor::verify(::mlir::Location loc) { { [[maybe_unused]] ::mlir::ptr::AtomicOrdering tblgen_ordering = this->getOrdering(); if (!(((tblgen_ordering == ::mlir::ptr::AtomicOrdering::not_atomic)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::unordered)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::monotonic)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::acquire)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::release)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::acq_rel)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::seq_cst)))) return emitError(loc, "'ptr.load' op property 'ordering' failed to satisfy constraint: Atomic ordering for LLVM's memory model"); } auto tblgen_syncscope = getProperties().syncscope; (void)tblgen_syncscope; if (tblgen_syncscope && !((::llvm::isa<::mlir::StringAttr>(tblgen_syncscope)))) return emitError(loc, "'ptr.load' op attribute 'syncscope' failed to satisfy constraint: string attribute"); return ::mlir::success(); } ::llvm::LogicalResult LoadOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.syncscope; auto attr = dict.get("syncscope"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `syncscope` in property conversion: " << attr; return ::mlir::failure(); } } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("volatile_");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.volatile_, attr, [&]() { return emitError() << "for `volatile_`: "; }))) return ::mlir::failure(); } else { prop.volatile_ = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("nontemporal");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.nontemporal, attr, [&]() { return emitError() << "for `nontemporal`: "; }))) return ::mlir::failure(); } else { prop.nontemporal = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("invariant");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.invariant, attr, [&]() { return emitError() << "for `invariant`: "; }))) return ::mlir::failure(); } else { prop.invariant = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("invariantGroup");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.invariantGroup, attr, [&]() { return emitError() << "for `invariantGroup`: "; }))) return ::mlir::failure(); } else { prop.invariantGroup = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto intAttr = ::mlir::dyn_cast_if_present<::mlir::IntegerAttr>(propAttr); if (!intAttr) { return emitError() << "expected IntegerAttr storage for ::mlir::ptr::AtomicOrdering"; } propStorage = static_cast<::mlir::ptr::AtomicOrdering>(intAttr.getValue().getZExtValue()); return ::mlir::success(); }; auto attr = dict.get("ordering");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.ordering, attr, [&]() { return emitError() << "for `ordering`: "; }))) return ::mlir::failure(); } else { prop.ordering = AtomicOrdering::not_atomic; } } return ::mlir::success(); } ::mlir::Attribute LoadOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.syncscope; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("syncscope", propStorage)); } { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } { const auto &propStorage = prop.volatile_; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("volatile_", attr)); } { const auto &propStorage = prop.nontemporal; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("nontemporal", attr)); } { const auto &propStorage = prop.invariant; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("invariant", attr)); } { const auto &propStorage = prop.invariantGroup; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("invariantGroup", attr)); } { const auto &propStorage = prop.ordering; auto attr = [&]() -> ::mlir::Attribute { return ::mlir::IntegerAttr::get(::mlir::IntegerType::get(ctx, 32), static_cast(propStorage)); }(); attrs.push_back(odsBuilder.getNamedAttr("ordering", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code LoadOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.syncscope.getAsOpaquePointer()), hash_value(prop.alignment), hash_value(prop.volatile_), hash_value(prop.nontemporal), hash_value(prop.invariant), hash_value(prop.invariantGroup), hash_value(prop.ordering)); } std::optional LoadOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "syncscope") return prop.syncscope; return std::nullopt; } void LoadOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "syncscope") { prop.syncscope = ::llvm::dyn_cast_or_null>(value); return; } } void LoadOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.syncscope) attrs.append("syncscope", prop.syncscope); } ::llvm::LogicalResult LoadOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSyncscopeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps2(attr, "syncscope", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult LoadOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.syncscope))) return ::mlir::failure(); { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.volatile_; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.nontemporal; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.invariant; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.invariantGroup; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.ordering; auto readProp = [&]() { uint64_t rawValue; if (::mlir::failed(reader.readVarInt(rawValue))) return ::mlir::failure(); if (rawValue > std::numeric_limits::max()) return ::mlir::failure(); propStorage = static_cast<::mlir::ptr::AtomicOrdering>(rawValue);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void LoadOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.syncscope); { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } { auto &propStorage = prop.volatile_; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.nontemporal; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.invariant; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.invariantGroup; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.ordering; writer.writeVarInt(static_cast(propStorage));; } } ::std::optional< ::llvm::StringRef > LoadOp::getSyncscope() { auto attr = getSyncscopeAttr(); return attr ? ::std::optional< ::llvm::StringRef >(attr.getValue()) : (::std::nullopt); } void LoadOp::setSyncscope(::std::optional<::llvm::StringRef> attrValue) { auto &odsProp = getProperties().syncscope; if (attrValue) odsProp = ::mlir::Builder((*this)->getContext()).getStringAttr(*attrValue); else odsProp = nullptr; } LoadOp LoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type type, Value ptr, unsigned alignment, bool isVolatile, bool isNonTemporal, bool isInvariant, bool isInvariantGroup, AtomicOrdering ordering, StringRef syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(type), std::forward(ptr), std::forward(alignment), std::forward(isVolatile), std::forward(isNonTemporal), std::forward(isInvariant), std::forward(isInvariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadOp LoadOp::create(::mlir::ImplicitLocOpBuilder &builder, Type type, Value ptr, unsigned alignment, bool isVolatile, bool isNonTemporal, bool isInvariant, bool isInvariantGroup, AtomicOrdering ordering, StringRef syncscope) { return create(builder, builder.getLoc(), std::forward(type), std::forward(ptr), std::forward(alignment), std::forward(isVolatile), std::forward(isNonTemporal), std::forward(isInvariant), std::forward(isInvariantGroup), std::forward(ordering), std::forward(syncscope)); } void LoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { odsState.addOperands(ptr); odsState.getOrAddProperties().setAlignment(alignment); odsState.getOrAddProperties().setVolatile_(volatile_); odsState.getOrAddProperties().setNontemporal(nontemporal); odsState.getOrAddProperties().setInvariant(invariant); odsState.getOrAddProperties().setInvariantGroup(invariantGroup); odsState.getOrAddProperties().setOrdering(ordering); if (syncscope) { odsState.getOrAddProperties().syncscope = syncscope; } odsState.addTypes(value); } LoadOp LoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariant), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadOp LoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariant), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); } void LoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { odsState.addOperands(ptr); odsState.getOrAddProperties().setAlignment(alignment); odsState.getOrAddProperties().setVolatile_(volatile_); odsState.getOrAddProperties().setNontemporal(nontemporal); odsState.getOrAddProperties().setInvariant(invariant); odsState.getOrAddProperties().setInvariantGroup(invariantGroup); odsState.getOrAddProperties().setOrdering(ordering); if (syncscope) { odsState.getOrAddProperties().syncscope = syncscope; } assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } LoadOp LoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariant), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadOp LoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariant, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariant), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); } void LoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } LoadOp LoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadOp LoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void LoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } LoadOp LoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } LoadOp LoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult LoadOp::verifyInvariantsImpl() { { [[maybe_unused]] ::mlir::ptr::AtomicOrdering tblgen_ordering = this->getOrdering(); if (::mlir::failed(__mlir_ods_local_prop_constraint_PtrOps1(*this, tblgen_ordering, "ordering"))) return ::mlir::failure(); } auto tblgen_syncscope = getProperties().syncscope; (void)tblgen_syncscope; if (::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps2(*this, tblgen_syncscope, "syncscope"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps7(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult LoadOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult LoadOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::StringAttr syncscopeAttr; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type valueRawType{}; ::llvm::ArrayRef<::mlir::Type> valueTypes(&valueRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("volatile"))) { result.getOrAddProperties().volatile_ = true; } ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("atomic"))) { if (::mlir::succeeded(parser.parseOptionalKeyword("syncscope"))) { if (parser.parseLParen()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(syncscopeAttr, parser.getBuilder().getType<::mlir::NoneType>())) { return ::mlir::failure(); } if (syncscopeAttr) result.getOrAddProperties().syncscope = syncscopeAttr; if (parser.parseRParen()) return ::mlir::failure(); } auto orderingPropLoc = parser.getCurrentLocation(); auto orderingPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { auto value = ::mlir::FieldParser<::mlir::ptr::AtomicOrdering>::parse(parser); if (::mlir::failed(value)) return ::mlir::failure(); propStorage = std::move(*value); return ::mlir::success(); }(result.getOrAddProperties().ordering); if (failed(orderingPropParseResult)) { return parser.emitError(orderingPropLoc, "invalid value for property ordering, expected Atomic ordering for LLVM's memory model"); } } bool nontemporalClause = false; bool invariantClause = false; bool invariant_groupClause = false; bool alignmentClause = false; while(true) { if (succeeded(parser.parseOptionalKeyword("nontemporal"))) { if (nontemporalClause) { return parser.emitError(parser.getNameLoc()) << "`nontemporal` clause can appear at most once in the expansion of the " "oilist directive"; } nontemporalClause = true; result.getOrAddProperties().nontemporal = true; } else if (succeeded(parser.parseOptionalKeyword("invariant"))) { if (invariantClause) { return parser.emitError(parser.getNameLoc()) << "`invariant` clause can appear at most once in the expansion of the " "oilist directive"; } invariantClause = true; result.getOrAddProperties().invariant = true; } else if (succeeded(parser.parseOptionalKeyword("invariant_group"))) { if (invariant_groupClause) { return parser.emitError(parser.getNameLoc()) << "`invariant_group` clause can appear at most once in the expansion of the " "oilist directive"; } invariant_groupClause = true; result.getOrAddProperties().invariantGroup = true; } else if (succeeded(parser.parseOptionalKeyword("alignment"))) { if (alignmentClause) { return parser.emitError(parser.getNameLoc()) << "`alignment` clause can appear at most once in the expansion of the " "oilist directive"; } alignmentClause = true; if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } else { break; } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); valueRawType = type; } result.addTypes(valueTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void LoadOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getVolatile_() != false) { _odsPrinter << ' ' << "volatile"; } _odsPrinter << ' '; _odsPrinter << getPtr(); if (getOrdering() != AtomicOrdering::not_atomic) { _odsPrinter << ' ' << "atomic"; if (getSyncscopeAttr()) { _odsPrinter << ' ' << "syncscope"; _odsPrinter << "("; _odsPrinter.printAttributeWithoutType(getSyncscopeAttr()); _odsPrinter << ")"; } _odsPrinter << ' '; _odsPrinter << getProperties().ordering; } if (false || (getNontemporal() != false)) { _odsPrinter << ' ' << "nontemporal"; } if (false || (getInvariant() != false)) { _odsPrinter << ' ' << "invariant"; } if (false || (getInvariantGroup() != false)) { _odsPrinter << ' ' << "invariant_group"; } if (false || (getAlignment() != std::nullopt)) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("syncscope"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getValue().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::LoadOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::LoadOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::MaskedLoadOp definitions //===----------------------------------------------------------------------===// namespace detail { MaskedLoadOpGenericAdaptorBase::MaskedLoadOpGenericAdaptorBase(MaskedLoadOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail MaskedLoadOpAdaptor::MaskedLoadOpAdaptor(MaskedLoadOp op) : MaskedLoadOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult MaskedLoadOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult MaskedLoadOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } return ::mlir::success(); } ::mlir::Attribute MaskedLoadOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code MaskedLoadOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.alignment)); } std::optional MaskedLoadOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void MaskedLoadOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void MaskedLoadOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult MaskedLoadOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult MaskedLoadOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void MaskedLoadOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Type resultType, Value ptr, Value mask, Value passthrough, unsigned alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultType), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, Type resultType, Value ptr, Value mask, Value passthrough, unsigned alignment) { return create(builder, builder.getLoc(), std::forward(resultType), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void MaskedLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptr); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); odsState.addTypes(result); } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(result), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void MaskedLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptr); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(MaskedLoadOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, odsState.operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) odsState.addTypes(inferredReturnTypes); else ::mlir::detail::reportFatalInferReturnTypesError(odsState); } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void MaskedLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { odsState.addOperands(ptr); odsState.addOperands(mask); odsState.addOperands(passthrough); odsState.getOrAddProperties().setAlignment(alignment); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr, ::mlir::Value mask, ::mlir::Value passthrough, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr), std::forward(mask), std::forward(passthrough), std::forward(alignment)); } void MaskedLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void MaskedLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(MaskedLoadOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(attributes)); } void MaskedLoadOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void MaskedLoadOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(MaskedLoadOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } MaskedLoadOp MaskedLoadOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedLoadOp MaskedLoadOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult MaskedLoadOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((std::equal_to<>()( ::llvm::cast((*this->getODSResults(0).begin()).getType()).clone( IntegerType::get((*this->getODSResults(0).begin()).getType().getContext(), 1)) , (*this->getODSOperands(1).begin()).getType())))) return emitOpError("failed to verify that result and mask must be compatible"); if (!((((*this->getODSResults(0).begin()).getType()) == ((*this->getODSOperands(2).begin()).getType()) && ((*this->getODSOperands(2).begin()).getType()) == ((*this->getODSResults(0).begin()).getType())))) return emitOpError("failed to verify that all of {result, passthrough} have same type"); return ::mlir::success(); } ::llvm::LogicalResult MaskedLoadOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::llvm::LogicalResult MaskedLoadOp::inferReturnTypes(::mlir::MLIRContext *context, ::std::optional<::mlir::Location> location, ::mlir::ValueRange operands, ::mlir::DictionaryAttr attributes, ::mlir::PropertyRef properties, ::mlir::RegionRange regions, ::llvm::SmallVectorImpl<::mlir::Type>&inferredReturnTypes) { inferredReturnTypes.resize(1); ::mlir::Builder odsBuilder(context); if (operands.size() <= 2) return ::mlir::failure(); ::mlir::Type odsInferredType0 = operands[2].getType(); inferredReturnTypes[0] = odsInferredType0; return ::mlir::success(); } ::mlir::ParseResult MaskedLoadOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand passthroughRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> passthroughOperands(&passthroughRawOperand, 1); ::llvm::SMLoc passthroughOperandsLoc; (void)passthroughOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); passthroughOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(passthroughRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("alignment"))) { if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } for (::mlir::Type type : resultTypes) { (void)type; if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return !((::llvm::isa<::mlir::TokenType>(elementType))); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return parser.emitError(parser.getNameLoc()) << "'result' must be A shaped type with value semantics and rank. of any non-token type values, but got " << type; } } result.addTypes(resultTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, ::llvm::cast(resultTypes[0]).clone( IntegerType::get(resultTypes[0].getContext(), 1)) , maskOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(passthroughOperands, resultTypes[0], passthroughOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void MaskedLoadOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPassthrough(); if (getAlignment() != std::nullopt) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::MaskedLoadOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::MaskedLoadOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::MaskedStoreOp definitions //===----------------------------------------------------------------------===// namespace detail { MaskedStoreOpGenericAdaptorBase::MaskedStoreOpGenericAdaptorBase(MaskedStoreOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail MaskedStoreOpAdaptor::MaskedStoreOpAdaptor(MaskedStoreOp op) : MaskedStoreOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult MaskedStoreOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult MaskedStoreOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } return ::mlir::success(); } ::mlir::Attribute MaskedStoreOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code MaskedStoreOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.alignment)); } std::optional MaskedStoreOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void MaskedStoreOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void MaskedStoreOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult MaskedStoreOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult MaskedStoreOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void MaskedStoreOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } } MaskedStoreOp MaskedStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Value value, Value ptr, Value mask, unsigned alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedStoreOp MaskedStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, Value value, Value ptr, Value mask, unsigned alignment) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); } void MaskedStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { odsState.addOperands(value); odsState.addOperands(ptr); odsState.addOperands(mask); odsState.getOrAddProperties().setAlignment(alignment); } MaskedStoreOp MaskedStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedStoreOp MaskedStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); } void MaskedStoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { odsState.addOperands(value); odsState.addOperands(ptr); odsState.addOperands(mask); odsState.getOrAddProperties().setAlignment(alignment); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } MaskedStoreOp MaskedStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedStoreOp MaskedStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, ::mlir::Value mask, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(value), std::forward(ptr), std::forward(mask), std::forward(alignment)); } void MaskedStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } MaskedStoreOp MaskedStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedStoreOp MaskedStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void MaskedStoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } MaskedStoreOp MaskedStoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } MaskedStoreOp MaskedStoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult MaskedStoreOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } if (!((std::equal_to<>()( ::llvm::cast((*this->getODSOperands(0).begin()).getType()).clone( IntegerType::get((*this->getODSOperands(0).begin()).getType().getContext(), 1)) , (*this->getODSOperands(2).begin()).getType())))) return emitOpError("failed to verify that value and mask must be compatible"); return ::mlir::success(); } ::llvm::LogicalResult MaskedStoreOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult MaskedStoreOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand valueRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> valueOperands(&valueRawOperand, 1); ::llvm::SMLoc valueOperandsLoc; (void)valueOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type valueRawType{}; ::llvm::ArrayRef<::mlir::Type> valueTypes(&valueRawType, 1); ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); valueOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(valueRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("alignment"))) { if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); valueRawType = type; } if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); for (::mlir::Type type : valueTypes) { (void)type; if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return !((::llvm::isa<::mlir::TokenType>(elementType))); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return parser.emitError(parser.getNameLoc()) << "'value' must be A shaped type with value semantics and rank. of any non-token type values, but got " << type; } } if (parser.resolveOperands(valueOperands, valueTypes, valueOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, ::llvm::cast(valueTypes[0]).clone( IntegerType::get(valueTypes[0].getContext(), 1)) , maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void MaskedStoreOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getValue(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPtr(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); if (getAlignment() != std::nullopt) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getValue().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::MaskedStoreOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::MaskedStoreOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::PtrAddOp definitions //===----------------------------------------------------------------------===// namespace detail { PtrAddOpGenericAdaptorBase::PtrAddOpGenericAdaptorBase(PtrAddOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail PtrAddOpAdaptor::PtrAddOpAdaptor(PtrAddOp op) : PtrAddOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult PtrAddOpAdaptor::verify(::mlir::Location loc) { { [[maybe_unused]] ::mlir::ptr::PtrAddFlags tblgen_flags = this->getFlags(); if (!(((tblgen_flags == ::mlir::ptr::PtrAddFlags::none)) || ((tblgen_flags == ::mlir::ptr::PtrAddFlags::nusw)) || ((tblgen_flags == ::mlir::ptr::PtrAddFlags::nuw)) || ((tblgen_flags == ::mlir::ptr::PtrAddFlags::inbounds)))) return emitError(loc, "'ptr.ptr_add' op property 'flags' failed to satisfy constraint: Pointer add flags"); } return ::mlir::success(); } ::llvm::LogicalResult PtrAddOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto intAttr = ::mlir::dyn_cast_if_present<::mlir::IntegerAttr>(propAttr); if (!intAttr) { return emitError() << "expected IntegerAttr storage for ::mlir::ptr::PtrAddFlags"; } propStorage = static_cast<::mlir::ptr::PtrAddFlags>(intAttr.getValue().getZExtValue()); return ::mlir::success(); }; auto attr = dict.get("flags");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.flags, attr, [&]() { return emitError() << "for `flags`: "; }))) return ::mlir::failure(); } else { prop.flags = PtrAddFlags::none; } } return ::mlir::success(); } ::mlir::Attribute PtrAddOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.flags; auto attr = [&]() -> ::mlir::Attribute { return ::mlir::IntegerAttr::get(::mlir::IntegerType::get(ctx, 32), static_cast(propStorage)); }(); attrs.push_back(odsBuilder.getNamedAttr("flags", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code PtrAddOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.flags)); } std::optional PtrAddOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void PtrAddOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void PtrAddOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult PtrAddOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult PtrAddOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.flags; auto readProp = [&]() { uint64_t rawValue; if (::mlir::failed(reader.readVarInt(rawValue))) return ::mlir::failure(); if (rawValue > std::numeric_limits::max()) return ::mlir::failure(); propStorage = static_cast<::mlir::ptr::PtrAddFlags>(rawValue);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void PtrAddOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.flags; writer.writeVarInt(static_cast(propStorage));; } } void PtrAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { odsState.addOperands(base); odsState.addOperands(offset); odsState.getOrAddProperties().setFlags(flags); odsState.addTypes(result); } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(base), std::forward(offset), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { return create(builder, builder.getLoc(), std::forward(result), std::forward(base), std::forward(offset), std::forward(flags)); } void PtrAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { odsState.addOperands(base); odsState.addOperands(offset); odsState.getOrAddProperties().setFlags(flags); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(PtrAddOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, odsState.operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) odsState.addTypes(inferredReturnTypes); else ::mlir::detail::reportFatalInferReturnTypesError(odsState); } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(base), std::forward(offset), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { return create(builder, builder.getLoc(), std::forward(base), std::forward(offset), std::forward(flags)); } void PtrAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { odsState.addOperands(base); odsState.addOperands(offset); odsState.getOrAddProperties().setFlags(flags); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(base), std::forward(offset), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value base, ::mlir::Value offset, /*optional*/::mlir::ptr::PtrAddFlags flags) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(base), std::forward(offset), std::forward(flags)); } void PtrAddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void PtrAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(PtrAddOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(attributes)); } void PtrAddOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } void PtrAddOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); ::llvm::SmallVector<::mlir::Type, 2> inferredReturnTypes; if (::mlir::succeeded(PtrAddOp::inferReturnTypes(odsBuilder.getContext(), odsState.location, operands, odsState.attributes.getDictionary(odsState.getContext()), odsState.getRawProperties(), odsState.regions, inferredReturnTypes))) { assert(inferredReturnTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(inferredReturnTypes); } else { ::llvm::report_fatal_error("Failed to infer result type(s)."); } } PtrAddOp PtrAddOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrAddOp PtrAddOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult PtrAddOp::verifyInvariantsImpl() { { [[maybe_unused]] ::mlir::ptr::PtrAddFlags tblgen_flags = this->getFlags(); if (::mlir::failed(__mlir_ods_local_prop_constraint_PtrOps2(*this, tblgen_flags, "flags"))) return ::mlir::failure(); } { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps9(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps8(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult PtrAddOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult PtrAddOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand baseRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> baseOperands(&baseRawOperand, 1); ::llvm::SMLoc baseOperandsLoc; (void)baseOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand offsetRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> offsetOperands(&offsetRawOperand, 1); ::llvm::SMLoc offsetOperandsLoc; (void)offsetOperandsLoc; ::mlir::Type baseRawType{}; ::llvm::ArrayRef<::mlir::Type> baseTypes(&baseRawType, 1); ::mlir::Type offsetRawType{}; ::llvm::ArrayRef<::mlir::Type> offsetTypes(&offsetRawType, 1); auto flagsPropParseResult = [&](auto& propStorage) -> ::mlir::OptionalParseResult { auto value = ::mlir::FieldParser>::parse(parser); if (::mlir::failed(value)) return ::mlir::failure(); if (!(value->has_value())) return std::nullopt; propStorage = std::move(**value); return ::mlir::success(); }(result.getOrAddProperties().flags); if (flagsPropParseResult.has_value() && failed(*flagsPropParseResult)) { return ::mlir::failure(); } if (flagsPropParseResult.has_value() && succeeded(*flagsPropParseResult)) { } baseOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(baseRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); offsetOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(offsetRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); baseRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); offsetRawType = type; } if (parser.resolveOperands(baseOperands, baseTypes, baseOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(offsetOperands, offsetTypes, offsetOperandsLoc, result.operands)) return ::mlir::failure(); ::llvm::SmallVector<::mlir::Type> inferredReturnTypes; if (::mlir::failed(PtrAddOp::inferReturnTypes(parser.getContext(), result.location, result.operands, result.attributes.getDictionary(parser.getContext()), result.getRawProperties(), result.regions, inferredReturnTypes))) return ::mlir::failure(); result.addTypes(inferredReturnTypes); return ::mlir::success(); } void PtrAddOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getFlags() != PtrAddFlags::none) { _odsPrinter << ' '; _odsPrinter << getProperties().flags; } _odsPrinter << ' '; _odsPrinter << getBase(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getOffset(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getBase().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getOffset().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void PtrAddOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::PtrAddOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::PtrAddOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::PtrDiffOp definitions //===----------------------------------------------------------------------===// namespace detail { PtrDiffOpGenericAdaptorBase::PtrDiffOpGenericAdaptorBase(PtrDiffOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail PtrDiffOpAdaptor::PtrDiffOpAdaptor(PtrDiffOp op) : PtrDiffOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult PtrDiffOpAdaptor::verify(::mlir::Location loc) { { [[maybe_unused]] ::mlir::ptr::PtrDiffFlags tblgen_flags = this->getFlags(); if (!(((static_cast(tblgen_flags) & ~3) == 0))) return emitError(loc, "'ptr.ptr_diff' op property 'flags' failed to satisfy constraint: Pointer difference flags"); } return ::mlir::success(); } ::llvm::LogicalResult PtrDiffOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto intAttr = ::mlir::dyn_cast_if_present<::mlir::IntegerAttr>(propAttr); if (!intAttr) { return emitError() << "expected IntegerAttr storage for ::mlir::ptr::PtrDiffFlags"; } propStorage = static_cast<::mlir::ptr::PtrDiffFlags>(intAttr.getValue().getZExtValue()); return ::mlir::success(); }; auto attr = dict.get("flags");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.flags, attr, [&]() { return emitError() << "for `flags`: "; }))) return ::mlir::failure(); } else { prop.flags = PtrDiffFlags::none; } } return ::mlir::success(); } ::mlir::Attribute PtrDiffOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.flags; auto attr = [&]() -> ::mlir::Attribute { return ::mlir::IntegerAttr::get(::mlir::IntegerType::get(ctx, 8), static_cast(propStorage)); }(); attrs.push_back(odsBuilder.getNamedAttr("flags", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code PtrDiffOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.flags)); } std::optional PtrDiffOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void PtrDiffOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void PtrDiffOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult PtrDiffOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult PtrDiffOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.flags; auto readProp = [&]() { uint64_t rawValue; if (::mlir::failed(reader.readVarInt(rawValue))) return ::mlir::failure(); if (rawValue > std::numeric_limits::max()) return ::mlir::failure(); propStorage = static_cast<::mlir::ptr::PtrDiffFlags>(rawValue);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void PtrDiffOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.flags; writer.writeVarInt(static_cast(propStorage));; } } void PtrDiffOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { odsState.addOperands(lhs); odsState.addOperands(rhs); odsState.getOrAddProperties().setFlags(flags); odsState.addTypes(result); } PtrDiffOp PtrDiffOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(lhs), std::forward(rhs), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrDiffOp PtrDiffOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { return create(builder, builder.getLoc(), std::forward(result), std::forward(lhs), std::forward(rhs), std::forward(flags)); } void PtrDiffOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { odsState.addOperands(lhs); odsState.addOperands(rhs); odsState.getOrAddProperties().setFlags(flags); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } PtrDiffOp PtrDiffOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(lhs), std::forward(rhs), std::forward(flags)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrDiffOp PtrDiffOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value lhs, ::mlir::Value rhs, /*optional*/::mlir::ptr::PtrDiffFlags flags) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(lhs), std::forward(rhs), std::forward(flags)); } void PtrDiffOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } PtrDiffOp PtrDiffOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrDiffOp PtrDiffOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void PtrDiffOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } PtrDiffOp PtrDiffOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } PtrDiffOp PtrDiffOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult PtrDiffOp::verifyInvariantsImpl() { { [[maybe_unused]] ::mlir::ptr::PtrDiffFlags tblgen_flags = this->getFlags(); if (::mlir::failed(__mlir_ods_local_prop_constraint_PtrOps3(*this, tblgen_flags, "flags"))) return ::mlir::failure(); } { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps8(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps9(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } if (!((((*this->getODSOperands(0).begin()).getType()) == ((*this->getODSOperands(1).begin()).getType()) && ((*this->getODSOperands(1).begin()).getType()) == ((*this->getODSOperands(0).begin()).getType())))) return emitOpError("failed to verify that all of {lhs, rhs} have same type"); return ::mlir::success(); } ::llvm::LogicalResult PtrDiffOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult PtrDiffOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand lhsRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> lhsOperands(&lhsRawOperand, 1); ::llvm::SMLoc lhsOperandsLoc; (void)lhsOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand rhsRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> rhsOperands(&rhsRawOperand, 1); ::llvm::SMLoc rhsOperandsLoc; (void)rhsOperandsLoc; ::mlir::Type lhsRawType{}; ::llvm::ArrayRef<::mlir::Type> lhsTypes(&lhsRawType, 1); ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); auto flagsPropParseResult = [&](auto& propStorage) -> ::mlir::OptionalParseResult { auto value = ::mlir::FieldParser>::parse(parser); if (::mlir::failed(value)) return ::mlir::failure(); if (!(value->has_value())) return std::nullopt; propStorage = std::move(**value); return ::mlir::success(); }(result.getOrAddProperties().flags); if (flagsPropParseResult.has_value() && failed(*flagsPropParseResult)) { return ::mlir::failure(); } if (flagsPropParseResult.has_value() && succeeded(*flagsPropParseResult)) { } lhsOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(lhsRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); rhsOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(rhsRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); lhsRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } result.addTypes(resultTypes); if (parser.resolveOperands(lhsOperands, lhsTypes, lhsOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(rhsOperands, lhsTypes[0], rhsOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void PtrDiffOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getFlags() != PtrDiffFlags::none) { _odsPrinter << ' '; _odsPrinter << getProperties().flags; } _odsPrinter << ' '; _odsPrinter << getLhs(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getRhs(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getLhs().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void PtrDiffOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::PtrDiffOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::PtrDiffOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::ScatterOp definitions //===----------------------------------------------------------------------===// namespace detail { ScatterOpGenericAdaptorBase::ScatterOpGenericAdaptorBase(ScatterOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ScatterOpAdaptor::ScatterOpAdaptor(ScatterOp op) : ScatterOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ScatterOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ScatterOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } return ::mlir::success(); } ::mlir::Attribute ScatterOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ScatterOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( hash_value(prop.alignment)); } std::optional ScatterOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ScatterOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ScatterOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ScatterOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } ::llvm::LogicalResult ScatterOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void ScatterOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } } ScatterOp ScatterOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Value value, Value ptrs, Value mask, unsigned alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ScatterOp ScatterOp::create(::mlir::ImplicitLocOpBuilder &builder, Value value, Value ptrs, Value mask, unsigned alignment) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); } void ScatterOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { odsState.addOperands(value); odsState.addOperands(ptrs); odsState.addOperands(mask); odsState.getOrAddProperties().setAlignment(alignment); } ScatterOp ScatterOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ScatterOp ScatterOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); } void ScatterOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { odsState.addOperands(value); odsState.addOperands(ptrs); odsState.addOperands(mask); odsState.getOrAddProperties().setAlignment(alignment); assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } ScatterOp ScatterOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ScatterOp ScatterOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptrs, ::mlir::Value mask, /*optional*/std::optional alignment) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(value), std::forward(ptrs), std::forward(mask), std::forward(alignment)); } void ScatterOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } ScatterOp ScatterOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ScatterOp ScatterOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ScatterOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 3u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ScatterOp ScatterOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ScatterOp ScatterOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ScatterOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps6(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps4(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup2 = getODSOperands(2); for (auto v : valueGroup2) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps5(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } if (!((std::equal_to<>()( ::llvm::cast((*this->getODSOperands(0).begin()).getType()).clone( IntegerType::get((*this->getODSOperands(0).begin()).getType().getContext(), 1)) , (*this->getODSOperands(2).begin()).getType())))) return emitOpError("failed to verify that value and mask must be compatible"); if (!(((::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(0).begin()).getType()).getShape()) == (::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(1).begin()).getType()).getShape()) && (::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(1).begin()).getType()).getShape()) == (::llvm::cast<::mlir::ShapedType>((*this->getODSOperands(0).begin()).getType()).getShape())))) return emitOpError("failed to verify that all of {value, ptrs} have same shape"); if (!((((*this->getODSOperands(0).begin()).getType().getTypeID()) == ((*this->getODSOperands(1).begin()).getType().getTypeID()) && ((*this->getODSOperands(1).begin()).getType().getTypeID()) == ((*this->getODSOperands(0).begin()).getType().getTypeID())))) return emitOpError("failed to verify that all of {value, ptrs} have same type IDs"); return ::mlir::success(); } ::llvm::LogicalResult ScatterOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult ScatterOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand valueRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> valueOperands(&valueRawOperand, 1); ::llvm::SMLoc valueOperandsLoc; (void)valueOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ptrsRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrsOperands(&ptrsRawOperand, 1); ::llvm::SMLoc ptrsOperandsLoc; (void)ptrsOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand maskRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> maskOperands(&maskRawOperand, 1); ::llvm::SMLoc maskOperandsLoc; (void)maskOperandsLoc; ::mlir::Type valueRawType{}; ::llvm::ArrayRef<::mlir::Type> valueTypes(&valueRawType, 1); ::mlir::Type ptrsRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrsTypes(&ptrsRawType, 1); valueOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(valueRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ptrsOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrsRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); maskOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(maskRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("alignment"))) { if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); valueRawType = type; } if (parser.parseComma()) return ::mlir::failure(); { ::mlir::ShapedType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrsRawType = type; } for (::mlir::Type type : valueTypes) { (void)type; if (!((((type.hasTrait<::mlir::ValueSemantics>())) && (((::llvm::cast<::mlir::ShapedType>(type).hasRank())) && ((::llvm::cast<::mlir::ShapedType>(type).getRank() == 1)))) && ([](::mlir::Type elementType) { return !((::llvm::isa<::mlir::TokenType>(elementType))); }(::llvm::cast<::mlir::ShapedType>(type).getElementType())))) { return parser.emitError(parser.getNameLoc()) << "'value' must be A shaped type with value semantics and rank. of any non-token type values, but got " << type; } } if (parser.resolveOperands(valueOperands, valueTypes, valueOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ptrsOperands, ptrsTypes, ptrsOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(maskOperands, ::llvm::cast(valueTypes[0]).clone( IntegerType::get(valueTypes[0].getContext(), 1)) , maskOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ScatterOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getValue(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPtrs(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getMask(); if (getAlignment() != std::nullopt) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getValue().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; { auto type = getPtrs().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ShapedType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::ScatterOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::ScatterOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::StoreOp definitions //===----------------------------------------------------------------------===// namespace detail { StoreOpGenericAdaptorBase::StoreOpGenericAdaptorBase(StoreOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::std::optional< ::llvm::StringRef > StoreOpGenericAdaptorBase::getSyncscope() { auto attr = getSyncscopeAttr(); return attr ? ::std::optional< ::llvm::StringRef >(attr.getValue()) : (::std::nullopt); } } // namespace detail StoreOpAdaptor::StoreOpAdaptor(StoreOp op) : StoreOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult StoreOpAdaptor::verify(::mlir::Location loc) { { [[maybe_unused]] ::mlir::ptr::AtomicOrdering tblgen_ordering = this->getOrdering(); if (!(((tblgen_ordering == ::mlir::ptr::AtomicOrdering::not_atomic)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::unordered)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::monotonic)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::acquire)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::release)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::acq_rel)) || ((tblgen_ordering == ::mlir::ptr::AtomicOrdering::seq_cst)))) return emitError(loc, "'ptr.store' op property 'ordering' failed to satisfy constraint: Atomic ordering for LLVM's memory model"); } auto tblgen_syncscope = getProperties().syncscope; (void)tblgen_syncscope; if (tblgen_syncscope && !((::llvm::isa<::mlir::StringAttr>(tblgen_syncscope)))) return emitError(loc, "'ptr.store' op attribute 'syncscope' failed to satisfy constraint: string attribute"); return ::mlir::success(); } ::llvm::LogicalResult StoreOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.syncscope; auto attr = dict.get("syncscope"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `syncscope` in property conversion: " << attr; return ::mlir::failure(); } } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto arrayAttr = ::llvm::dyn_cast<::mlir::ArrayAttr>(propAttr); if (!arrayAttr) return emitError() << "expected optional properties to materialize as arrays"; if (arrayAttr.size() > 1) return emitError() << "expected optional properties to become 0- or 1-element arrays"; if (arrayAttr.empty()) { propStorage = std::nullopt; return ::mlir::success(); } ::mlir::Attribute presentAttr = arrayAttr[0]; int64_t presentVal; auto presentRes = [&](::mlir::Attribute propAttr, int64_t& propStorage) -> ::mlir::LogicalResult { return convertFromAttribute(propStorage, propAttr, emitError); }(presentAttr, presentVal); if (::mlir::failed(presentRes)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); }; auto attr = dict.get("alignment");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.alignment, attr, [&]() { return emitError() << "for `alignment`: "; }))) return ::mlir::failure(); } else { prop.alignment = std::nullopt; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("volatile_");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.volatile_, attr, [&]() { return emitError() << "for `volatile_`: "; }))) return ::mlir::failure(); } else { prop.volatile_ = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("nontemporal");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.nontemporal, attr, [&]() { return emitError() << "for `nontemporal`: "; }))) return ::mlir::failure(); } else { prop.nontemporal = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { if (::llvm::isa<::mlir::UnitAttr>(propAttr)) { propStorage = true; return ::mlir::success(); } if (auto boolAttr = ::llvm::dyn_cast<::mlir::BoolAttr>(propAttr)) { propStorage = boolAttr.getValue(); return ::mlir::success(); } return ::mlir::failure(); }; auto attr = dict.get("invariantGroup");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.invariantGroup, attr, [&]() { return emitError() << "for `invariantGroup`: "; }))) return ::mlir::failure(); } else { prop.invariantGroup = false; } } { auto setFromAttr = [] (auto &propStorage, ::mlir::Attribute propAttr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) -> ::mlir::LogicalResult { auto intAttr = ::mlir::dyn_cast_if_present<::mlir::IntegerAttr>(propAttr); if (!intAttr) { return emitError() << "expected IntegerAttr storage for ::mlir::ptr::AtomicOrdering"; } propStorage = static_cast<::mlir::ptr::AtomicOrdering>(intAttr.getValue().getZExtValue()); return ::mlir::success(); }; auto attr = dict.get("ordering");; ; if (attr) { if (::mlir::failed(setFromAttr(prop.ordering, attr, [&]() { return emitError() << "for `ordering`: "; }))) return ::mlir::failure(); } else { prop.ordering = AtomicOrdering::not_atomic; } } return ::mlir::success(); } ::mlir::Attribute StoreOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.syncscope; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("syncscope", propStorage)); } { const auto &propStorage = prop.alignment; auto attr = [&]() -> ::mlir::Attribute { if (!propStorage.has_value()) { return ::mlir::ArrayAttr::get(ctx, {}); } auto attr = [&]() -> ::mlir::Attribute { return convertToAttribute(ctx, (*(propStorage))); }(); return ::mlir::ArrayAttr::get(ctx, {attr}); }(); attrs.push_back(odsBuilder.getNamedAttr("alignment", attr)); } { const auto &propStorage = prop.volatile_; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("volatile_", attr)); } { const auto &propStorage = prop.nontemporal; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("nontemporal", attr)); } { const auto &propStorage = prop.invariantGroup; auto attr = [&]() -> ::mlir::Attribute { if (propStorage) return ::mlir::UnitAttr::get(ctx); else return ::mlir::BoolAttr::get(ctx, false); }(); attrs.push_back(odsBuilder.getNamedAttr("invariantGroup", attr)); } { const auto &propStorage = prop.ordering; auto attr = [&]() -> ::mlir::Attribute { return ::mlir::IntegerAttr::get(::mlir::IntegerType::get(ctx, 32), static_cast(propStorage)); }(); attrs.push_back(odsBuilder.getNamedAttr("ordering", attr)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code StoreOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.syncscope.getAsOpaquePointer()), hash_value(prop.alignment), hash_value(prop.volatile_), hash_value(prop.nontemporal), hash_value(prop.invariantGroup), hash_value(prop.ordering)); } std::optional StoreOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "syncscope") return prop.syncscope; return std::nullopt; } void StoreOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "syncscope") { prop.syncscope = ::llvm::dyn_cast_or_null>(value); return; } } void StoreOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.syncscope) attrs.append("syncscope", prop.syncscope); } ::llvm::LogicalResult StoreOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getSyncscopeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps2(attr, "syncscope", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult StoreOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readOptionalAttribute(prop.syncscope))) return ::mlir::failure(); { auto &propStorage = prop.alignment; auto readProp = [&]() { bool isPresent = false; if (::mlir::failed(reader.readBool(isPresent))) return ::mlir::failure(); if (!isPresent) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto presentResult = [&](int64_t& propStorage) -> ::mlir::LogicalResult { uint64_t val; if (failed(reader.readVarInt(val))) return ::mlir::failure(); propStorage = val; ; return ::mlir::success(); }(presentVal); if (::mlir::failed(presentResult)) return ::mlir::failure(); propStorage = std::move(presentVal);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.volatile_; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.nontemporal; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.invariantGroup; auto readProp = [&]() { if (::mlir::failed(reader.readBool(propStorage))) return ::mlir::failure();; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } { auto &propStorage = prop.ordering; auto readProp = [&]() { uint64_t rawValue; if (::mlir::failed(reader.readVarInt(rawValue))) return ::mlir::failure(); if (rawValue > std::numeric_limits::max()) return ::mlir::failure(); propStorage = static_cast<::mlir::ptr::AtomicOrdering>(rawValue);; return ::mlir::success(); }; if (::mlir::failed(readProp())) return ::mlir::failure(); } return ::mlir::success(); } void StoreOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeOptionalAttribute(prop.syncscope); { auto &propStorage = prop.alignment; writer.writeOwnedBool(propStorage.has_value()); if (propStorage.has_value()) { writer.writeVarInt((*(propStorage))); }; } { auto &propStorage = prop.volatile_; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.nontemporal; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.invariantGroup; writer.writeOwnedBool(propStorage);; } { auto &propStorage = prop.ordering; writer.writeVarInt(static_cast(propStorage));; } } ::std::optional< ::llvm::StringRef > StoreOp::getSyncscope() { auto attr = getSyncscopeAttr(); return attr ? ::std::optional< ::llvm::StringRef >(attr.getValue()) : (::std::nullopt); } void StoreOp::setSyncscope(::std::optional<::llvm::StringRef> attrValue) { auto &odsProp = getProperties().syncscope; if (attrValue) odsProp = ::mlir::Builder((*this)->getContext()).getStringAttr(*attrValue); else odsProp = nullptr; } StoreOp StoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, Value value, Value ptr, unsigned alignment, bool isVolatile, bool isNonTemporal, bool isInvariantGroup, AtomicOrdering ordering, StringRef syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(isVolatile), std::forward(isNonTemporal), std::forward(isInvariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } StoreOp StoreOp::create(::mlir::ImplicitLocOpBuilder &builder, Value value, Value ptr, unsigned alignment, bool isVolatile, bool isNonTemporal, bool isInvariantGroup, AtomicOrdering ordering, StringRef syncscope) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(isVolatile), std::forward(isNonTemporal), std::forward(isInvariantGroup), std::forward(ordering), std::forward(syncscope)); } void StoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { odsState.addOperands(value); odsState.addOperands(ptr); odsState.getOrAddProperties().setAlignment(alignment); odsState.getOrAddProperties().setVolatile_(volatile_); odsState.getOrAddProperties().setNontemporal(nontemporal); odsState.getOrAddProperties().setInvariantGroup(invariantGroup); odsState.getOrAddProperties().setOrdering(ordering); if (syncscope) { odsState.getOrAddProperties().syncscope = syncscope; } } StoreOp StoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } StoreOp StoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { return create(builder, builder.getLoc(), std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); } void StoreOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { odsState.addOperands(value); odsState.addOperands(ptr); odsState.getOrAddProperties().setAlignment(alignment); odsState.getOrAddProperties().setVolatile_(volatile_); odsState.getOrAddProperties().setNontemporal(nontemporal); odsState.getOrAddProperties().setInvariantGroup(invariantGroup); odsState.getOrAddProperties().setOrdering(ordering); if (syncscope) { odsState.getOrAddProperties().syncscope = syncscope; } assert(resultTypes.size() == 0u && "mismatched number of results"); odsState.addTypes(resultTypes); } StoreOp StoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } StoreOp StoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value value, ::mlir::Value ptr, /*optional*/std::optional alignment, /*optional*/bool volatile_, /*optional*/bool nontemporal, /*optional*/bool invariantGroup, /*optional*/::mlir::ptr::AtomicOrdering ordering, /*optional*/::mlir::StringAttr syncscope) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(value), std::forward(ptr), std::forward(alignment), std::forward(volatile_), std::forward(nontemporal), std::forward(invariantGroup), std::forward(ordering), std::forward(syncscope)); } void StoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } StoreOp StoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } StoreOp StoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void StoreOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 2u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 0u && "mismatched number of return types"); odsState.addTypes(resultTypes); } StoreOp StoreOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } StoreOp StoreOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult StoreOp::verifyInvariantsImpl() { { [[maybe_unused]] ::mlir::ptr::AtomicOrdering tblgen_ordering = this->getOrdering(); if (::mlir::failed(__mlir_ods_local_prop_constraint_PtrOps1(*this, tblgen_ordering, "ordering"))) return ::mlir::failure(); } auto tblgen_syncscope = getProperties().syncscope; (void)tblgen_syncscope; if (::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps2(*this, tblgen_syncscope, "syncscope"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps7(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } auto valueGroup1 = getODSOperands(1); for (auto v : valueGroup1) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult StoreOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult StoreOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand valueRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> valueOperands(&valueRawOperand, 1); ::llvm::SMLoc valueOperandsLoc; (void)valueOperandsLoc; ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::StringAttr syncscopeAttr; ::mlir::Type valueRawType{}; ::llvm::ArrayRef<::mlir::Type> valueTypes(&valueRawType, 1); ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); if (::mlir::succeeded(parser.parseOptionalKeyword("volatile"))) { result.getOrAddProperties().volatile_ = true; } valueOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(valueRawOperand)) return ::mlir::failure(); if (parser.parseComma()) return ::mlir::failure(); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); if (::mlir::succeeded(parser.parseOptionalKeyword("atomic"))) { if (::mlir::succeeded(parser.parseOptionalKeyword("syncscope"))) { if (parser.parseLParen()) return ::mlir::failure(); if (parser.parseCustomAttributeWithFallback(syncscopeAttr, parser.getBuilder().getType<::mlir::NoneType>())) { return ::mlir::failure(); } if (syncscopeAttr) result.getOrAddProperties().syncscope = syncscopeAttr; if (parser.parseRParen()) return ::mlir::failure(); } auto orderingPropLoc = parser.getCurrentLocation(); auto orderingPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { auto value = ::mlir::FieldParser<::mlir::ptr::AtomicOrdering>::parse(parser); if (::mlir::failed(value)) return ::mlir::failure(); propStorage = std::move(*value); return ::mlir::success(); }(result.getOrAddProperties().ordering); if (failed(orderingPropParseResult)) { return parser.emitError(orderingPropLoc, "invalid value for property ordering, expected Atomic ordering for LLVM's memory model"); } } bool nontemporalClause = false; bool invariant_groupClause = false; bool alignmentClause = false; while(true) { if (succeeded(parser.parseOptionalKeyword("nontemporal"))) { if (nontemporalClause) { return parser.emitError(parser.getNameLoc()) << "`nontemporal` clause can appear at most once in the expansion of the " "oilist directive"; } nontemporalClause = true; result.getOrAddProperties().nontemporal = true; } else if (succeeded(parser.parseOptionalKeyword("invariant_group"))) { if (invariant_groupClause) { return parser.emitError(parser.getNameLoc()) << "`invariant_group` clause can appear at most once in the expansion of the " "oilist directive"; } invariant_groupClause = true; result.getOrAddProperties().invariantGroup = true; } else if (succeeded(parser.parseOptionalKeyword("alignment"))) { if (alignmentClause) { return parser.emitError(parser.getNameLoc()) << "`alignment` clause can appear at most once in the expansion of the " "oilist directive"; } alignmentClause = true; if (parser.parseEqual()) return ::mlir::failure(); auto alignmentPropLoc = parser.getCurrentLocation(); auto alignmentPropParseResult = [&](auto& propStorage) -> ::mlir::ParseResult { if (::mlir::succeeded(parser.parseOptionalKeyword("none"))) { propStorage = std::nullopt; return ::mlir::success(); } int64_t presentVal; auto delegParseResult = [&](int64_t& propStorage) -> ::mlir::OptionalParseResult { return parser.parseOptionalInteger(propStorage); return ::mlir::success(); }(presentVal); if (!delegParseResult.has_value()) { return ::mlir::failure(); } if (delegParseResult.has_value() && ::mlir::failed(*delegParseResult)) return ::mlir::failure(); propStorage = std::move(presentVal); return ::mlir::success(); return ::mlir::success(); }(result.getOrAddProperties().alignment); if (failed(alignmentPropParseResult)) { return parser.emitError(alignmentPropLoc, "invalid value for property alignment, expected optional int64_t"); } } else { break; } } { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); valueRawType = type; } if (parser.parseComma()) return ::mlir::failure(); if (parser.parseType(ptrRawType)) return ::mlir::failure(); if (parser.resolveOperands(valueOperands, valueTypes, valueOperandsLoc, result.operands)) return ::mlir::failure(); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void StoreOp::print(::mlir::OpAsmPrinter &_odsPrinter) { if (getVolatile_() != false) { _odsPrinter << ' ' << "volatile"; } _odsPrinter << ' '; _odsPrinter << getValue(); _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPtr(); if (getOrdering() != AtomicOrdering::not_atomic) { _odsPrinter << ' ' << "atomic"; if (getSyncscopeAttr()) { _odsPrinter << ' ' << "syncscope"; _odsPrinter << "("; _odsPrinter.printAttributeWithoutType(getSyncscopeAttr()); _odsPrinter << ")"; } _odsPrinter << ' '; _odsPrinter << getProperties().ordering; } if (false || (getNontemporal() != false)) { _odsPrinter << ' ' << "nontemporal"; } if (false || (getInvariantGroup() != false)) { _odsPrinter << ' ' << "invariant_group"; } if (false || (getAlignment() != std::nullopt)) { _odsPrinter << ' ' << "alignment"; _odsPrinter << ' ' << "="; _odsPrinter << ' '; [&]() { if (!getProperties().alignment.has_value()) { _odsPrinter << "none"; return; } _odsPrinter.printInteger((*(getProperties().alignment))); }(); } ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("syncscope"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getValue().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ","; _odsPrinter << ' '; _odsPrinter << getPtr().getType(); } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::StoreOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::StoreOpGenericAdaptorBase::Properties) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::ToPtrOp definitions //===----------------------------------------------------------------------===// namespace detail { ToPtrOpGenericAdaptorBase::ToPtrOpGenericAdaptorBase(ToPtrOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} } // namespace detail ToPtrOpAdaptor::ToPtrOpAdaptor(ToPtrOp op) : ToPtrOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult ToPtrOpAdaptor::verify(::mlir::Location loc) { return ::mlir::success(); } ::llvm::LogicalResult ToPtrOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } return ::mlir::success(); } ::mlir::Attribute ToPtrOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code ToPtrOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine(); } std::optional ToPtrOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { return std::nullopt; } void ToPtrOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { } void ToPtrOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { } ::llvm::LogicalResult ToPtrOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { return ::mlir::success(); } void ToPtrOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Value ptr) { odsState.addOperands(ptr); odsState.addTypes(result); } ToPtrOp ToPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ToPtrOp ToPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(result), std::forward(ptr)); } void ToPtrOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { odsState.addOperands(ptr); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } ToPtrOp ToPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(ptr)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ToPtrOp ToPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Value ptr) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(ptr)); } void ToPtrOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ToPtrOp ToPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ToPtrOp ToPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void ToPtrOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 1u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } ToPtrOp ToPtrOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } ToPtrOp ToPtrOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult ToPtrOp::verifyInvariantsImpl() { { unsigned index = 0; (void)index; auto valueGroup0 = getODSOperands(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps3(*this, v.getType(), "operand", index++))) return ::mlir::failure(); } } { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps1(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult ToPtrOp::verifyInvariants() { if(::mlir::succeeded(verifyInvariantsImpl()) && ::mlir::succeeded(verify())) return ::mlir::success(); return ::mlir::failure(); } ::mlir::ParseResult ToPtrOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::OpAsmParser::UnresolvedOperand ptrRawOperand{}; ::llvm::ArrayRef<::mlir::OpAsmParser::UnresolvedOperand> ptrOperands(&ptrRawOperand, 1); ::llvm::SMLoc ptrOperandsLoc; (void)ptrOperandsLoc; ::mlir::Type ptrRawType{}; ::llvm::ArrayRef<::mlir::Type> ptrTypes(&ptrRawType, 1); ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); ptrOperandsLoc = parser.getCurrentLocation(); if (parser.parseOperand(ptrRawOperand)) return ::mlir::failure(); { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::PtrLikeTypeInterface type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); ptrRawType = type; } if (parser.parseArrow()) return ::mlir::failure(); { ::mlir::ptr::PtrType type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } result.addTypes(resultTypes); if (parser.resolveOperands(ptrOperands, ptrTypes, ptrOperandsLoc, result.operands)) return ::mlir::failure(); return ::mlir::success(); } void ToPtrOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter << getPtr(); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getPtr().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::PtrLikeTypeInterface>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } _odsPrinter << ' ' << "->"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::ptr::PtrType>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void ToPtrOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::ToPtrOp) namespace mlir::ptr { //===----------------------------------------------------------------------===// // ::mlir::ptr::TypeOffsetOp definitions //===----------------------------------------------------------------------===// namespace detail { TypeOffsetOpGenericAdaptorBase::TypeOffsetOpGenericAdaptorBase(TypeOffsetOp op) : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()), properties(op.getProperties()), odsRegions(op->getRegions()) {} ::mlir::Type TypeOffsetOpGenericAdaptorBase::getElementType() { auto attr = getElementTypeAttr(); return ::llvm::cast<::mlir::Type>(attr.getValue()); } } // namespace detail TypeOffsetOpAdaptor::TypeOffsetOpAdaptor(TypeOffsetOp op) : TypeOffsetOpGenericAdaptor(op->getOperands(), op) {} ::llvm::LogicalResult TypeOffsetOpAdaptor::verify(::mlir::Location loc) { auto tblgen_elementType = getProperties().elementType; (void)tblgen_elementType; if (!tblgen_elementType) return emitError(loc, "'ptr.type_offset' op requires attribute 'elementType'"); if (tblgen_elementType && !(((::llvm::isa<::mlir::TypeAttr>(tblgen_elementType))) && ((::llvm::isa<::mlir::Type>(::llvm::cast<::mlir::TypeAttr>(tblgen_elementType).getValue()))) && ((true)))) return emitError(loc, "'ptr.type_offset' op attribute 'elementType' failed to satisfy constraint: any type attribute"); return ::mlir::success(); } ::llvm::LogicalResult TypeOffsetOp::setPropertiesFromAttr(Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { ::mlir::DictionaryAttr dict = ::llvm::dyn_cast<::mlir::DictionaryAttr>(attr); if (!dict) { emitError() << "expected DictionaryAttr to set properties"; return ::mlir::failure(); } { auto &propStorage = prop.elementType; auto attr = dict.get("elementType"); if (attr) { auto convertedAttr = ::llvm::dyn_cast>(attr); if (convertedAttr) { propStorage = convertedAttr; } else { emitError() << "Invalid attribute `elementType` in property conversion: " << attr; return ::mlir::failure(); } } } return ::mlir::success(); } ::mlir::Attribute TypeOffsetOp::getPropertiesAsAttr(::mlir::MLIRContext *ctx, const Properties &prop) { ::mlir::SmallVector<::mlir::NamedAttribute> attrs; ::mlir::Builder odsBuilder{ctx}; { const auto &propStorage = prop.elementType; if (propStorage) attrs.push_back(odsBuilder.getNamedAttr("elementType", propStorage)); } if (!attrs.empty()) return odsBuilder.getDictionaryAttr(attrs); return {}; } llvm::hash_code TypeOffsetOp::computePropertiesHash(const Properties &prop) { using llvm::hash_value; return llvm::hash_combine( llvm::hash_value(prop.elementType.getAsOpaquePointer())); } std::optional TypeOffsetOp::getInherentAttr(::mlir::MLIRContext *ctx, const Properties &prop, llvm::StringRef name) { if (name == "elementType") return prop.elementType; return std::nullopt; } void TypeOffsetOp::setInherentAttr(Properties &prop, llvm::StringRef name, mlir::Attribute value) { if (name == "elementType") { prop.elementType = ::llvm::dyn_cast_or_null>(value); return; } } void TypeOffsetOp::populateInherentAttrs(::mlir::MLIRContext *ctx, const Properties &prop, ::mlir::NamedAttrList &attrs) { if (prop.elementType) attrs.append("elementType", prop.elementType); } ::llvm::LogicalResult TypeOffsetOp::verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError) { { ::mlir::Attribute attr = attrs.get(getElementTypeAttrName(opName)); if (attr && ::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps3(attr, "elementType", emitError))) return ::mlir::failure(); } return ::mlir::success(); } ::llvm::LogicalResult TypeOffsetOp::readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state) { auto &prop = state.getOrAddProperties(); (void)prop; if (::mlir::failed(reader.readAttribute(prop.elementType))) return ::mlir::failure(); return ::mlir::success(); } void TypeOffsetOp::writeProperties(::mlir::DialectBytecodeWriter &writer) { auto &prop = getProperties(); (void)prop; writer.writeAttribute(prop.elementType); } ::mlir::Type TypeOffsetOp::getElementType() { auto attr = getElementTypeAttr(); return ::llvm::cast<::mlir::Type>(attr.getValue()); } void TypeOffsetOp::setElementType(::mlir::Type attrValue) { getProperties().elementType = ::mlir::TypeAttr::get(attrValue); } void TypeOffsetOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::TypeAttr elementType) { odsState.getOrAddProperties().elementType = elementType; odsState.addTypes(result); } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::TypeAttr elementType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(elementType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::TypeAttr elementType) { return create(builder, builder.getLoc(), std::forward(result), std::forward(elementType)); } void TypeOffsetOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::TypeAttr elementType) { odsState.getOrAddProperties().elementType = elementType; assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::TypeAttr elementType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(elementType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::TypeAttr elementType) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(elementType)); } void TypeOffsetOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::Type elementType) { odsState.getOrAddProperties().elementType = ::mlir::TypeAttr::get(elementType); odsState.addTypes(result); } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::Type result, ::mlir::Type elementType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(result), std::forward(elementType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::Type result, ::mlir::Type elementType) { return create(builder, builder.getLoc(), std::forward(result), std::forward(elementType)); } void TypeOffsetOp::build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::Type elementType) { odsState.getOrAddProperties().elementType = ::mlir::TypeAttr::get(elementType); assert(resultTypes.size() == 1u && "mismatched number of results"); odsState.addTypes(resultTypes); } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::Type elementType) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(elementType)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::Type elementType) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(elementType)); } void TypeOffsetOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.addAttributes(attributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); if (!attributes.empty()) { (void)odsState.getOrAddProperties(); ::mlir::PropertyRef properties = odsState.getRawProperties(); std::optional<::mlir::RegisteredOperationName> info = odsState.name.getRegisteredInfo(); if (failed(info->setOpPropertiesFromAttribute(odsState.name, properties, odsState.attributes.getDictionary(odsState.getContext()), nullptr))) ::llvm::report_fatal_error("Property conversion failed."); } } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(attributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(attributes)); } void TypeOffsetOp::build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { assert(operands.size() == 0u && "mismatched number of parameters"); odsState.addOperands(operands); odsState.useProperties(const_cast(properties)); odsState.addAttributes(discardableAttributes); assert(resultTypes.size() == 1u && "mismatched number of return types"); odsState.addTypes(resultTypes); } TypeOffsetOp TypeOffsetOp::create(::mlir::OpBuilder &builder, ::mlir::Location location, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { ::mlir::OperationState __state__(location, getOperationName()); build(builder, __state__, std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); auto __res__ = ::llvm::dyn_cast(builder.create(__state__)); assert(__res__ && "builder didn't return the right type"); return __res__; } TypeOffsetOp TypeOffsetOp::create(::mlir::ImplicitLocOpBuilder &builder, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, const Properties &properties, ::llvm::ArrayRef<::mlir::NamedAttribute> discardableAttributes) { return create(builder, builder.getLoc(), std::forward(resultTypes), std::forward(operands), std::forward(properties), std::forward(discardableAttributes)); } ::llvm::LogicalResult TypeOffsetOp::verifyInvariantsImpl() { auto tblgen_elementType = getProperties().elementType; (void)tblgen_elementType; if (!tblgen_elementType) return emitOpError("requires attribute 'elementType'"); if (::mlir::failed(__mlir_ods_local_attr_constraint_PtrOps3(*this, tblgen_elementType, "elementType"))) return ::mlir::failure(); { unsigned index = 0; (void)index; auto valueGroup0 = getODSResults(0); for (auto v : valueGroup0) { if (::mlir::failed(__mlir_ods_local_type_constraint_PtrOps10(*this, v.getType(), "result", index++))) return ::mlir::failure(); } } return ::mlir::success(); } ::llvm::LogicalResult TypeOffsetOp::verifyInvariants() { return verifyInvariantsImpl(); } ::mlir::ParseResult TypeOffsetOp::parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result) { ::mlir::TypeAttr elementTypeAttr; ::mlir::Type resultRawType{}; ::llvm::ArrayRef<::mlir::Type> resultTypes(&resultRawType, 1); if (parser.parseCustomAttributeWithFallback(elementTypeAttr, parser.getBuilder().getType<::mlir::NoneType>())) { return ::mlir::failure(); } if (elementTypeAttr) result.getOrAddProperties().elementType = elementTypeAttr; { auto loc = parser.getCurrentLocation();(void)loc; if (parser.parseOptionalAttrDict(result.attributes)) return ::mlir::failure(); if (failed(verifyInherentAttrs(result.name, result.attributes, [&]() { return parser.emitError(loc) << "'" << result.name.getStringRef() << "' op "; }))) return ::mlir::failure(); } if (parser.parseColon()) return ::mlir::failure(); { ::mlir::Type type; if (parser.parseCustomTypeWithFallback(type)) return ::mlir::failure(); resultRawType = type; } result.addTypes(resultTypes); return ::mlir::success(); } void TypeOffsetOp::print(::mlir::OpAsmPrinter &_odsPrinter) { _odsPrinter << ' '; _odsPrinter.printAttributeWithoutType(getElementTypeAttr()); ::llvm::SmallVector<::llvm::StringRef, 2> elidedAttrs; elidedAttrs.push_back("elementType"); _odsPrinter.printOptionalAttrDict((*this)->getAttrs(), elidedAttrs); _odsPrinter << ' ' << ":"; _odsPrinter << ' '; { auto type = getResult().getType(); if (auto validType = ::llvm::dyn_cast<::mlir::Type>(type)) _odsPrinter.printStrippedAttrOrType(validType); else _odsPrinter << type; } } void TypeOffsetOp::getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects) { } } // namespace mlir::ptr MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::TypeOffsetOp) MLIR_DEFINE_EXPLICIT_TYPE_ID(::mlir::ptr::detail::TypeOffsetOpGenericAdaptorBase::Properties) #endif // GET_OP_CLASSES