79 using ValueT = ::llvm::detail::ValueOfRange<RangeT>;
86 template <
typename LateInst = LitStringOp,
typename = std::enable_if_t<std::is_same_v<LateInst, LitStringOp>>>
95 return {std::next(odsOperands.begin(), valueRange.first),
96 std::next(odsOperands.begin(), valueRange.first + valueRange.second)};
113class LitStringOp :
public ::mlir::Op<LitStringOp, ::mlir::OpTrait::ZeroRegions, ::mlir::OpTrait::OneResult, ::mlir::OpTrait::OneTypedResult<::llzk::string::StringType>::Impl, ::mlir::OpTrait::ZeroSuccessors, ::mlir::OpTrait::ZeroOperands, ::mlir::OpTrait::OpInvariants, ::mlir::BytecodeOpInterface::Trait, ::mlir::ConditionallySpeculatable::Trait, ::mlir::OpTrait::AlwaysSpeculatableImplTrait, ::mlir::MemoryEffectOpInterface::Trait, ::mlir::OpTrait::ConstantLike> {
118 template <
typename RangeT>
123 static ::llvm::StringRef attrNames[] = {::llvm::StringRef(
"value")};
124 return ::llvm::ArrayRef(attrNames);
128 return getAttributeNameForIndex(0);
132 return getAttributeNameForIndex(name, 0);
136 return ::llvm::StringLiteral(
"string.new");
142 ::mlir::Operation::result_range
getODSResults(
unsigned index);
143 ::mlir::TypedValue<::llzk::string::StringType>
getResult();
144 static ::mlir::LogicalResult
setPropertiesFromAttr(
Properties &prop, ::mlir::Attribute attr, ::llvm::function_ref<::mlir::InFlightDiagnostic()> emitError);
147 static std::optional<mlir::Attribute>
getInherentAttr(::mlir::MLIRContext *ctx,
const Properties &prop, llvm::StringRef name);
150 static ::mlir::LogicalResult
verifyInherentAttrs(::mlir::OperationName opName, ::mlir::NamedAttrList &attrs, llvm::function_ref<::mlir::InFlightDiagnostic()> emitError);
151 static ::mlir::LogicalResult
readProperties(::mlir::DialectBytecodeReader &reader, ::mlir::OperationState &state);
156 void setValue(::llvm::StringRef attrValue);
157 static void build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::mlir::StringAttr value);
158 static void build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::StringAttr value);
159 static void build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::Type result, ::llvm::StringRef value);
160 static void build(::mlir::OpBuilder &odsBuilder, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::llvm::StringRef value);
161 static void build(::mlir::OpBuilder &, ::mlir::OperationState &odsState, ::mlir::TypeRange resultTypes, ::mlir::ValueRange operands, ::llvm::ArrayRef<::mlir::NamedAttribute> attributes = {});
165 static ::mlir::ParseResult
parse(::mlir::OpAsmParser &parser, ::mlir::OperationState &result);
166 void print(::mlir::OpAsmPrinter &_odsPrinter);
167 void getEffects(::llvm::SmallVectorImpl<::mlir::SideEffects::EffectInstance<::mlir::MemoryEffects::Effect>> &effects);
169 ::mlir::StringAttr getAttributeNameForIndex(
unsigned index) {
170 return getAttributeNameForIndex((*this)->getName(), index);
173 static ::mlir::StringAttr getAttributeNameForIndex(::mlir::OperationName name,
unsigned index) {
174 assert(index < 1 &&
"invalid attribute index");
175 assert(name.getStringRef() ==
getOperationName() &&
"invalid operation name");
176 assert(name.isRegistered() &&
"Operation isn't registered, missing a "
177 "dependent dialect loading?");
178 return name.getAttributeNames()[index];