Skip to content

Conversation

@kazutakahirata
Copy link
Contributor

ArrayRef has a constructor that accepts std::nullopt. This
constructor dates back to the days when we still had llvm::Optional.

Since the use of std::nullopt outside the context of std::optional is
kind of abuse and not intuitive to new comers, I would like to move
away from the constructor and eventually remove it.

This patch replaces {} with std::nullopt.

ArrayRef has a constructor that accepts std::nullopt. This constructor dates back to the days when we still had llvm::Optional. Since the use of std::nullopt outside the context of std::optional is kind of abuse and not intuitive to new comers, I would like to move away from the constructor and eventually remove it. This patch replaces {} with std::nullopt.
@llvmbot
Copy link
Member

llvmbot commented Jun 26, 2025

@llvm/pr-subscribers-mlir-func
@llvm/pr-subscribers-mlir-shape
@llvm/pr-subscribers-mlir

@llvm/pr-subscribers-mlir-emitc

Author: Kazu Hirata (kazutakahirata)

Changes

ArrayRef has a constructor that accepts std::nullopt. This
constructor dates back to the days when we still had llvm::Optional.

Since the use of std::nullopt outside the context of std::optional is
kind of abuse and not intuitive to new comers, I would like to move
away from the constructor and eventually remove it.

This patch replaces {} with std::nullopt.


Full diff: https://github.com/llvm/llvm-project/pull/145842.diff

18 Files Affected:

  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td (+1-2)
  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td (+1-1)
  • (modified) mlir/include/mlir/IR/Matchers.h (+1-1)
  • (modified) mlir/include/mlir/IR/PatternMatch.h (+2-3)
  • (modified) mlir/include/mlir/Tools/PDLL/AST/Nodes.h (+2-2)
  • (modified) mlir/lib/Dialect/Async/IR/Async.cpp (+1-1)
  • (modified) mlir/lib/Dialect/EmitC/IR/EmitC.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Func/IR/FuncOps.cpp (+1-1)
  • (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Shape/IR/Shape.cpp (+1-1)
  • (modified) mlir/lib/Reducer/Tester.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/ModuleTranslation.cpp (+1-1)
  • (modified) mlir/lib/Tools/PDLL/Parser/Parser.cpp (+4-5)
  • (modified) mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp (+3-3)
  • (modified) mlir/unittests/IR/OperationSupportTest.cpp (+9-10)
  • (modified) mlir/unittests/IR/ValueTest.cpp (+6-6)
  • (modified) mlir/unittests/Transforms/DialectConversion.cpp (+3-3)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td index b97b5ac932c97..e08c7b7969330 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td @@ -235,8 +235,7 @@ class LLVM_MemOpPatterns { }]; code setInvariantGroupCode = [{ if ($invariantGroup) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), - std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_group, metadata); } }]; diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 939e7a09a73ad..f4c1640098320 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -425,7 +425,7 @@ def LLVM_LoadOp : LLVM_MemAccessOpBase<"load", auto *inst = builder.CreateLoad($_resultType, $addr, $volatile_); $res = inst; if ($invariant) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_load, metadata); } if ($dereferenceable) diff --git a/mlir/include/mlir/IR/Matchers.h b/mlir/include/mlir/IR/Matchers.h index 1dce055db1b4a..e577909621cb8 100644 --- a/mlir/include/mlir/IR/Matchers.h +++ b/mlir/include/mlir/IR/Matchers.h @@ -88,7 +88,7 @@ struct constant_op_binder { // Fold the constant to an attribute. SmallVector<OpFoldResult, 1> foldedOp; - LogicalResult result = op->fold(/*operands=*/std::nullopt, foldedOp); + LogicalResult result = op->fold(/*operands=*/{}, foldedOp); (void)result; assert(succeeded(result) && "expected ConstantLike op to be foldable"); diff --git a/mlir/include/mlir/IR/PatternMatch.h b/mlir/include/mlir/IR/PatternMatch.h index b6659a7f915ce..afeb784b85a12 100644 --- a/mlir/include/mlir/IR/PatternMatch.h +++ b/mlir/include/mlir/IR/PatternMatch.h @@ -810,8 +810,7 @@ class RewritePatternSet { RewritePatternSet &add(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, - std::forward<ConstructorArg>(arg), + (addImpl<Ts>(/*debugLabels=*/{}, std::forward<ConstructorArg>(arg), std::forward<ConstructorArgs>(args)...), ...); return *this; @@ -894,7 +893,7 @@ class RewritePatternSet { RewritePatternSet &insert(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, arg, args...), ...); + (addImpl<Ts>(/*debugLabels=*/{}, arg, args...), ...); return *this; } diff --git a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h index 9ad94839890b7..07e265582e96b 100644 --- a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h +++ b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h @@ -903,8 +903,8 @@ class UserConstraintDecl final ArrayRef<VariableDecl *> results, const CompoundStmt *body, Type resultType) { - return createImpl(ctx, name, inputs, /*nativeInputTypes=*/std::nullopt, - results, /*codeBlock=*/std::nullopt, body, resultType); + return createImpl(ctx, name, inputs, /*nativeInputTypes=*/{}, results, + /*codeBlock=*/std::nullopt, body, resultType); } /// Return the name of the constraint. diff --git a/mlir/lib/Dialect/Async/IR/Async.cpp b/mlir/lib/Dialect/Async/IR/Async.cpp index d3bb250bb8ab9..b834afef7da79 100644 --- a/mlir/lib/Dialect/Async/IR/Async.cpp +++ b/mlir/lib/Dialect/Async/IR/Async.cpp @@ -309,7 +309,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index d17c4afab016c..27298e892e599 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -601,7 +601,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/Func/IR/FuncOps.cpp b/mlir/lib/Dialect/Func/IR/FuncOps.cpp index aa068966ba607..9d317f20521fb 100644 --- a/mlir/lib/Dialect/Func/IR/FuncOps.cpp +++ b/mlir/lib/Dialect/Func/IR/FuncOps.cpp @@ -193,7 +193,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index a12aef0dfad38..7276464389559 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -2774,7 +2774,7 @@ void LLVMFuncOp::build(OpBuilder &builder, OperationState &result, assert(llvm::cast<LLVMFunctionType>(type).getNumParams() == argAttrs.size() && "expected as many argument attribute lists as arguments"); call_interface_impl::addArgAndResultAttrs( - builder, result, argAttrs, /*resultAttrs=*/std::nullopt, + builder, result, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(result.name), getResAttrsAttrName(result.name)); } diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp index 31fecf61c5e46..5f395eef9d601 100644 --- a/mlir/lib/Dialect/Shape/IR/Shape.cpp +++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp @@ -1303,7 +1303,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Reducer/Tester.cpp b/mlir/lib/Reducer/Tester.cpp index 14760c0be70df..03f12af174839 100644 --- a/mlir/lib/Reducer/Tester.cpp +++ b/mlir/lib/Reducer/Tester.cpp @@ -68,7 +68,7 @@ Tester::Interestingness Tester::isInteresting(StringRef testCase) const { std::string errMsg; int result = llvm::sys::ExecuteAndWait( - testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/std::nullopt, + testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/{}, /*SecondsToWait=*/0, /*MemoryLimit=*/0, &errMsg); if (result < 0) diff --git a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp index 54ae01c77c445..f3ec18c9074e4 100644 --- a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp @@ -206,7 +206,7 @@ void LoopAnnotationConversion::convertLocation(FusedLoc location) { llvm::MDNode *LoopAnnotationConversion::convert() { // Reserve operand 0 for loop id self reference. - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); metadataNodes.push_back(dummy.get()); if (FusedLoc startLoc = attr.getStartLoc()) diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index baf7a82b1c24a..1253c2f83b07b 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -1922,7 +1922,7 @@ ModuleTranslation::getOrCreateAliasScope(AliasScopeAttr aliasScopeAttr) { if (!scopeInserted) return scopeIt->second; llvm::LLVMContext &ctx = llvmModule->getContext(); - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); // Convert the domain metadata node if necessary. auto [domainIt, insertedDomain] = aliasDomainMetadataMapping.try_emplace( aliasScopeAttr.getDomain(), nullptr); diff --git a/mlir/lib/Tools/PDLL/Parser/Parser.cpp b/mlir/lib/Tools/PDLL/Parser/Parser.cpp index ad7d71b0bdd2f..50e10447ee468 100644 --- a/mlir/lib/Tools/PDLL/Parser/Parser.cpp +++ b/mlir/lib/Tools/PDLL/Parser/Parser.cpp @@ -985,8 +985,7 @@ ast::Decl *Parser::createODSNativePDLLConstraintDecl( // Build the native constraint. auto *constraintDecl = ast::UserConstraintDecl::createNative( ctx, ast::Name::create(ctx, name, loc), paramVar, - /*results=*/std::nullopt, codeBlock, ast::TupleType::get(ctx), - nativeType); + /*results=*/{}, codeBlock, ast::TupleType::get(ctx), nativeType); constraintDecl->setDocComment(ctx, docString); curDeclScope->add(constraintDecl); return constraintDecl; @@ -1782,7 +1781,7 @@ Parser::parseConstraint(std::optional<SMRange> &typeConstraint, FailureOr<ast::ConstraintRef> Parser::parseArgOrResultConstraint() { std::optional<SMRange> typeConstraint; - return parseConstraint(typeConstraint, /*existingConstraints=*/std::nullopt, + return parseConstraint(typeConstraint, /*existingConstraints=*/{}, /*allowInlineTypeConstraints=*/false); } @@ -2995,8 +2994,8 @@ LogicalResult Parser::validateOperationOperandsOrResults( // Otherwise, create dummy values for each of the entries so that we // adhere to the ODS signature. for (unsigned i = 0, e = odsValues.size(); i < e; ++i) { - values.push_back(ast::RangeExpr::create( - ctx, loc, /*elements=*/std::nullopt, rangeTy)); + values.push_back( + ast::RangeExpr::create(ctx, loc, /*elements=*/{}, rangeTy)); } return success(); } diff --git a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp index d0b8624d8de23..18e0301ffeae3 100644 --- a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp +++ b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp @@ -23,9 +23,9 @@ static Operation *createOp(MLIRContext *context, Location loc, StringRef operationName, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create(loc, OperationName(operationName, context), {}, {}, - std::nullopt, OpaqueProperties(nullptr), - std::nullopt, numRegions); + return Operation::create(loc, OperationName(operationName, context), + TypeRange(), ValueRange(), std::nullopt, + OpaqueProperties(nullptr), BlockRange(), numRegions); } namespace { diff --git a/mlir/unittests/IR/OperationSupportTest.cpp b/mlir/unittests/IR/OperationSupportTest.cpp index 0dd46fbd3f104..6ab8d558aee84 100644 --- a/mlir/unittests/IR/OperationSupportTest.cpp +++ b/mlir/unittests/IR/OperationSupportTest.cpp @@ -24,7 +24,7 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, context->allowUnregisteredDialects(); return Operation::create( UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + operands, std::nullopt, nullptr, BlockRange(), numRegions); } namespace { @@ -33,7 +33,7 @@ TEST(OperandStorageTest, NonResizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a non-resizable operation with one operand. @@ -57,7 +57,7 @@ TEST(OperandStorageTest, Resizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -85,7 +85,7 @@ TEST(OperandStorageTest, RangeReplace) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -121,7 +121,7 @@ TEST(OperandStorageTest, MutableRange) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -158,8 +158,7 @@ TEST(OperandStorageTest, RangeErase) { Builder builder(&context); Type type = builder.getNoneType(); - Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, {type, type}); + Operation *useOp = createOp(&context, /*operands=*/{}, {type, type}); Value operand1 = useOp->getResult(0); Value operand2 = useOp->getResult(1); @@ -189,8 +188,8 @@ TEST(OperationOrderTest, OrderIsAlwaysValid) { MLIRContext context; Builder builder(&context); - Operation *containerOp = createOp(&context, /*operands=*/std::nullopt, - /*resultTypes=*/std::nullopt, + Operation *containerOp = createOp(&context, /*operands=*/{}, + /*resultTypes=*/{}, /*numRegions=*/1); Region &region = containerOp->getRegion(0); Block *block = new Block(); @@ -237,7 +236,7 @@ TEST(OperationFormatPrintTest, CanPrintNameAsPrefix) { Operation *op = Operation::create( NameLoc::get(StringAttr::get(&context, "my_named_loc")), OperationName("t.op", &context), builder.getIntegerType(16), {}, - std::nullopt, nullptr, std::nullopt, 0); + std::nullopt, nullptr, {}, 0); std::string str; OpPrintingFlags flags; diff --git a/mlir/unittests/IR/ValueTest.cpp b/mlir/unittests/IR/ValueTest.cpp index 58678224780be..fc671be39f1eb 100644 --- a/mlir/unittests/IR/ValueTest.cpp +++ b/mlir/unittests/IR/ValueTest.cpp @@ -20,9 +20,9 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, ArrayRef<Type> resultTypes = {}, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), resultTypes, + operands, std::nullopt, nullptr, {}, numRegions); } namespace { @@ -32,7 +32,7 @@ TEST(ValueTest, getNumUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_EQ(v0.getNumUses(), (unsigned)0); @@ -53,7 +53,7 @@ TEST(ValueTest, hasNUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUses(0)); EXPECT_FALSE(v0.hasNUses(1)); @@ -77,7 +77,7 @@ TEST(ValueTest, hasNUsesOrMore) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUsesOrMore(0)); EXPECT_FALSE(v0.hasNUsesOrMore(1)); diff --git a/mlir/unittests/Transforms/DialectConversion.cpp b/mlir/unittests/Transforms/DialectConversion.cpp index 1d4a4f7292088..7bb27f721414c 100644 --- a/mlir/unittests/Transforms/DialectConversion.cpp +++ b/mlir/unittests/Transforms/DialectConversion.cpp @@ -13,9 +13,9 @@ using namespace mlir; static Operation *createOp(MLIRContext *context) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), {}, {}, - std::nullopt, /*properties=*/nullptr, std::nullopt, 0); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), {}, {}, + std::nullopt, /*properties=*/nullptr, {}, 0); } namespace { 
@llvmbot
Copy link
Member

llvmbot commented Jun 26, 2025

@llvm/pr-subscribers-mlir-llvm

Author: Kazu Hirata (kazutakahirata)

Changes

ArrayRef has a constructor that accepts std::nullopt. This
constructor dates back to the days when we still had llvm::Optional.

Since the use of std::nullopt outside the context of std::optional is
kind of abuse and not intuitive to new comers, I would like to move
away from the constructor and eventually remove it.

This patch replaces {} with std::nullopt.


Full diff: https://github.com/llvm/llvm-project/pull/145842.diff

18 Files Affected:

  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td (+1-2)
  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td (+1-1)
  • (modified) mlir/include/mlir/IR/Matchers.h (+1-1)
  • (modified) mlir/include/mlir/IR/PatternMatch.h (+2-3)
  • (modified) mlir/include/mlir/Tools/PDLL/AST/Nodes.h (+2-2)
  • (modified) mlir/lib/Dialect/Async/IR/Async.cpp (+1-1)
  • (modified) mlir/lib/Dialect/EmitC/IR/EmitC.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Func/IR/FuncOps.cpp (+1-1)
  • (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Shape/IR/Shape.cpp (+1-1)
  • (modified) mlir/lib/Reducer/Tester.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/ModuleTranslation.cpp (+1-1)
  • (modified) mlir/lib/Tools/PDLL/Parser/Parser.cpp (+4-5)
  • (modified) mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp (+3-3)
  • (modified) mlir/unittests/IR/OperationSupportTest.cpp (+9-10)
  • (modified) mlir/unittests/IR/ValueTest.cpp (+6-6)
  • (modified) mlir/unittests/Transforms/DialectConversion.cpp (+3-3)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td index b97b5ac932c97..e08c7b7969330 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td @@ -235,8 +235,7 @@ class LLVM_MemOpPatterns { }]; code setInvariantGroupCode = [{ if ($invariantGroup) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), - std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_group, metadata); } }]; diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 939e7a09a73ad..f4c1640098320 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -425,7 +425,7 @@ def LLVM_LoadOp : LLVM_MemAccessOpBase<"load", auto *inst = builder.CreateLoad($_resultType, $addr, $volatile_); $res = inst; if ($invariant) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_load, metadata); } if ($dereferenceable) diff --git a/mlir/include/mlir/IR/Matchers.h b/mlir/include/mlir/IR/Matchers.h index 1dce055db1b4a..e577909621cb8 100644 --- a/mlir/include/mlir/IR/Matchers.h +++ b/mlir/include/mlir/IR/Matchers.h @@ -88,7 +88,7 @@ struct constant_op_binder { // Fold the constant to an attribute. SmallVector<OpFoldResult, 1> foldedOp; - LogicalResult result = op->fold(/*operands=*/std::nullopt, foldedOp); + LogicalResult result = op->fold(/*operands=*/{}, foldedOp); (void)result; assert(succeeded(result) && "expected ConstantLike op to be foldable"); diff --git a/mlir/include/mlir/IR/PatternMatch.h b/mlir/include/mlir/IR/PatternMatch.h index b6659a7f915ce..afeb784b85a12 100644 --- a/mlir/include/mlir/IR/PatternMatch.h +++ b/mlir/include/mlir/IR/PatternMatch.h @@ -810,8 +810,7 @@ class RewritePatternSet { RewritePatternSet &add(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, - std::forward<ConstructorArg>(arg), + (addImpl<Ts>(/*debugLabels=*/{}, std::forward<ConstructorArg>(arg), std::forward<ConstructorArgs>(args)...), ...); return *this; @@ -894,7 +893,7 @@ class RewritePatternSet { RewritePatternSet &insert(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, arg, args...), ...); + (addImpl<Ts>(/*debugLabels=*/{}, arg, args...), ...); return *this; } diff --git a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h index 9ad94839890b7..07e265582e96b 100644 --- a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h +++ b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h @@ -903,8 +903,8 @@ class UserConstraintDecl final ArrayRef<VariableDecl *> results, const CompoundStmt *body, Type resultType) { - return createImpl(ctx, name, inputs, /*nativeInputTypes=*/std::nullopt, - results, /*codeBlock=*/std::nullopt, body, resultType); + return createImpl(ctx, name, inputs, /*nativeInputTypes=*/{}, results, + /*codeBlock=*/std::nullopt, body, resultType); } /// Return the name of the constraint. diff --git a/mlir/lib/Dialect/Async/IR/Async.cpp b/mlir/lib/Dialect/Async/IR/Async.cpp index d3bb250bb8ab9..b834afef7da79 100644 --- a/mlir/lib/Dialect/Async/IR/Async.cpp +++ b/mlir/lib/Dialect/Async/IR/Async.cpp @@ -309,7 +309,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index d17c4afab016c..27298e892e599 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -601,7 +601,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/Func/IR/FuncOps.cpp b/mlir/lib/Dialect/Func/IR/FuncOps.cpp index aa068966ba607..9d317f20521fb 100644 --- a/mlir/lib/Dialect/Func/IR/FuncOps.cpp +++ b/mlir/lib/Dialect/Func/IR/FuncOps.cpp @@ -193,7 +193,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index a12aef0dfad38..7276464389559 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -2774,7 +2774,7 @@ void LLVMFuncOp::build(OpBuilder &builder, OperationState &result, assert(llvm::cast<LLVMFunctionType>(type).getNumParams() == argAttrs.size() && "expected as many argument attribute lists as arguments"); call_interface_impl::addArgAndResultAttrs( - builder, result, argAttrs, /*resultAttrs=*/std::nullopt, + builder, result, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(result.name), getResAttrsAttrName(result.name)); } diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp index 31fecf61c5e46..5f395eef9d601 100644 --- a/mlir/lib/Dialect/Shape/IR/Shape.cpp +++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp @@ -1303,7 +1303,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Reducer/Tester.cpp b/mlir/lib/Reducer/Tester.cpp index 14760c0be70df..03f12af174839 100644 --- a/mlir/lib/Reducer/Tester.cpp +++ b/mlir/lib/Reducer/Tester.cpp @@ -68,7 +68,7 @@ Tester::Interestingness Tester::isInteresting(StringRef testCase) const { std::string errMsg; int result = llvm::sys::ExecuteAndWait( - testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/std::nullopt, + testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/{}, /*SecondsToWait=*/0, /*MemoryLimit=*/0, &errMsg); if (result < 0) diff --git a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp index 54ae01c77c445..f3ec18c9074e4 100644 --- a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp @@ -206,7 +206,7 @@ void LoopAnnotationConversion::convertLocation(FusedLoc location) { llvm::MDNode *LoopAnnotationConversion::convert() { // Reserve operand 0 for loop id self reference. - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); metadataNodes.push_back(dummy.get()); if (FusedLoc startLoc = attr.getStartLoc()) diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index baf7a82b1c24a..1253c2f83b07b 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -1922,7 +1922,7 @@ ModuleTranslation::getOrCreateAliasScope(AliasScopeAttr aliasScopeAttr) { if (!scopeInserted) return scopeIt->second; llvm::LLVMContext &ctx = llvmModule->getContext(); - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); // Convert the domain metadata node if necessary. auto [domainIt, insertedDomain] = aliasDomainMetadataMapping.try_emplace( aliasScopeAttr.getDomain(), nullptr); diff --git a/mlir/lib/Tools/PDLL/Parser/Parser.cpp b/mlir/lib/Tools/PDLL/Parser/Parser.cpp index ad7d71b0bdd2f..50e10447ee468 100644 --- a/mlir/lib/Tools/PDLL/Parser/Parser.cpp +++ b/mlir/lib/Tools/PDLL/Parser/Parser.cpp @@ -985,8 +985,7 @@ ast::Decl *Parser::createODSNativePDLLConstraintDecl( // Build the native constraint. auto *constraintDecl = ast::UserConstraintDecl::createNative( ctx, ast::Name::create(ctx, name, loc), paramVar, - /*results=*/std::nullopt, codeBlock, ast::TupleType::get(ctx), - nativeType); + /*results=*/{}, codeBlock, ast::TupleType::get(ctx), nativeType); constraintDecl->setDocComment(ctx, docString); curDeclScope->add(constraintDecl); return constraintDecl; @@ -1782,7 +1781,7 @@ Parser::parseConstraint(std::optional<SMRange> &typeConstraint, FailureOr<ast::ConstraintRef> Parser::parseArgOrResultConstraint() { std::optional<SMRange> typeConstraint; - return parseConstraint(typeConstraint, /*existingConstraints=*/std::nullopt, + return parseConstraint(typeConstraint, /*existingConstraints=*/{}, /*allowInlineTypeConstraints=*/false); } @@ -2995,8 +2994,8 @@ LogicalResult Parser::validateOperationOperandsOrResults( // Otherwise, create dummy values for each of the entries so that we // adhere to the ODS signature. for (unsigned i = 0, e = odsValues.size(); i < e; ++i) { - values.push_back(ast::RangeExpr::create( - ctx, loc, /*elements=*/std::nullopt, rangeTy)); + values.push_back( + ast::RangeExpr::create(ctx, loc, /*elements=*/{}, rangeTy)); } return success(); } diff --git a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp index d0b8624d8de23..18e0301ffeae3 100644 --- a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp +++ b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp @@ -23,9 +23,9 @@ static Operation *createOp(MLIRContext *context, Location loc, StringRef operationName, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create(loc, OperationName(operationName, context), {}, {}, - std::nullopt, OpaqueProperties(nullptr), - std::nullopt, numRegions); + return Operation::create(loc, OperationName(operationName, context), + TypeRange(), ValueRange(), std::nullopt, + OpaqueProperties(nullptr), BlockRange(), numRegions); } namespace { diff --git a/mlir/unittests/IR/OperationSupportTest.cpp b/mlir/unittests/IR/OperationSupportTest.cpp index 0dd46fbd3f104..6ab8d558aee84 100644 --- a/mlir/unittests/IR/OperationSupportTest.cpp +++ b/mlir/unittests/IR/OperationSupportTest.cpp @@ -24,7 +24,7 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, context->allowUnregisteredDialects(); return Operation::create( UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + operands, std::nullopt, nullptr, BlockRange(), numRegions); } namespace { @@ -33,7 +33,7 @@ TEST(OperandStorageTest, NonResizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a non-resizable operation with one operand. @@ -57,7 +57,7 @@ TEST(OperandStorageTest, Resizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -85,7 +85,7 @@ TEST(OperandStorageTest, RangeReplace) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -121,7 +121,7 @@ TEST(OperandStorageTest, MutableRange) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -158,8 +158,7 @@ TEST(OperandStorageTest, RangeErase) { Builder builder(&context); Type type = builder.getNoneType(); - Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, {type, type}); + Operation *useOp = createOp(&context, /*operands=*/{}, {type, type}); Value operand1 = useOp->getResult(0); Value operand2 = useOp->getResult(1); @@ -189,8 +188,8 @@ TEST(OperationOrderTest, OrderIsAlwaysValid) { MLIRContext context; Builder builder(&context); - Operation *containerOp = createOp(&context, /*operands=*/std::nullopt, - /*resultTypes=*/std::nullopt, + Operation *containerOp = createOp(&context, /*operands=*/{}, + /*resultTypes=*/{}, /*numRegions=*/1); Region &region = containerOp->getRegion(0); Block *block = new Block(); @@ -237,7 +236,7 @@ TEST(OperationFormatPrintTest, CanPrintNameAsPrefix) { Operation *op = Operation::create( NameLoc::get(StringAttr::get(&context, "my_named_loc")), OperationName("t.op", &context), builder.getIntegerType(16), {}, - std::nullopt, nullptr, std::nullopt, 0); + std::nullopt, nullptr, {}, 0); std::string str; OpPrintingFlags flags; diff --git a/mlir/unittests/IR/ValueTest.cpp b/mlir/unittests/IR/ValueTest.cpp index 58678224780be..fc671be39f1eb 100644 --- a/mlir/unittests/IR/ValueTest.cpp +++ b/mlir/unittests/IR/ValueTest.cpp @@ -20,9 +20,9 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, ArrayRef<Type> resultTypes = {}, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), resultTypes, + operands, std::nullopt, nullptr, {}, numRegions); } namespace { @@ -32,7 +32,7 @@ TEST(ValueTest, getNumUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_EQ(v0.getNumUses(), (unsigned)0); @@ -53,7 +53,7 @@ TEST(ValueTest, hasNUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUses(0)); EXPECT_FALSE(v0.hasNUses(1)); @@ -77,7 +77,7 @@ TEST(ValueTest, hasNUsesOrMore) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUsesOrMore(0)); EXPECT_FALSE(v0.hasNUsesOrMore(1)); diff --git a/mlir/unittests/Transforms/DialectConversion.cpp b/mlir/unittests/Transforms/DialectConversion.cpp index 1d4a4f7292088..7bb27f721414c 100644 --- a/mlir/unittests/Transforms/DialectConversion.cpp +++ b/mlir/unittests/Transforms/DialectConversion.cpp @@ -13,9 +13,9 @@ using namespace mlir; static Operation *createOp(MLIRContext *context) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), {}, {}, - std::nullopt, /*properties=*/nullptr, std::nullopt, 0); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), {}, {}, + std::nullopt, /*properties=*/nullptr, {}, 0); } namespace { 
@llvmbot
Copy link
Member

llvmbot commented Jun 26, 2025

@llvm/pr-subscribers-mlir-async

Author: Kazu Hirata (kazutakahirata)

Changes

ArrayRef has a constructor that accepts std::nullopt. This
constructor dates back to the days when we still had llvm::Optional.

Since the use of std::nullopt outside the context of std::optional is
kind of abuse and not intuitive to new comers, I would like to move
away from the constructor and eventually remove it.

This patch replaces {} with std::nullopt.


Full diff: https://github.com/llvm/llvm-project/pull/145842.diff

18 Files Affected:

  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td (+1-2)
  • (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td (+1-1)
  • (modified) mlir/include/mlir/IR/Matchers.h (+1-1)
  • (modified) mlir/include/mlir/IR/PatternMatch.h (+2-3)
  • (modified) mlir/include/mlir/Tools/PDLL/AST/Nodes.h (+2-2)
  • (modified) mlir/lib/Dialect/Async/IR/Async.cpp (+1-1)
  • (modified) mlir/lib/Dialect/EmitC/IR/EmitC.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Func/IR/FuncOps.cpp (+1-1)
  • (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+1-1)
  • (modified) mlir/lib/Dialect/Shape/IR/Shape.cpp (+1-1)
  • (modified) mlir/lib/Reducer/Tester.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp (+1-1)
  • (modified) mlir/lib/Target/LLVMIR/ModuleTranslation.cpp (+1-1)
  • (modified) mlir/lib/Tools/PDLL/Parser/Parser.cpp (+4-5)
  • (modified) mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp (+3-3)
  • (modified) mlir/unittests/IR/OperationSupportTest.cpp (+9-10)
  • (modified) mlir/unittests/IR/ValueTest.cpp (+6-6)
  • (modified) mlir/unittests/Transforms/DialectConversion.cpp (+3-3)
diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td index b97b5ac932c97..e08c7b7969330 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOpBase.td @@ -235,8 +235,7 @@ class LLVM_MemOpPatterns { }]; code setInvariantGroupCode = [{ if ($invariantGroup) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), - std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_group, metadata); } }]; diff --git a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td index 939e7a09a73ad..f4c1640098320 100644 --- a/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td +++ b/mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td @@ -425,7 +425,7 @@ def LLVM_LoadOp : LLVM_MemAccessOpBase<"load", auto *inst = builder.CreateLoad($_resultType, $addr, $volatile_); $res = inst; if ($invariant) { - llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), std::nullopt); + llvm::MDNode *metadata = llvm::MDNode::get(inst->getContext(), {}); inst->setMetadata(llvm::LLVMContext::MD_invariant_load, metadata); } if ($dereferenceable) diff --git a/mlir/include/mlir/IR/Matchers.h b/mlir/include/mlir/IR/Matchers.h index 1dce055db1b4a..e577909621cb8 100644 --- a/mlir/include/mlir/IR/Matchers.h +++ b/mlir/include/mlir/IR/Matchers.h @@ -88,7 +88,7 @@ struct constant_op_binder { // Fold the constant to an attribute. SmallVector<OpFoldResult, 1> foldedOp; - LogicalResult result = op->fold(/*operands=*/std::nullopt, foldedOp); + LogicalResult result = op->fold(/*operands=*/{}, foldedOp); (void)result; assert(succeeded(result) && "expected ConstantLike op to be foldable"); diff --git a/mlir/include/mlir/IR/PatternMatch.h b/mlir/include/mlir/IR/PatternMatch.h index b6659a7f915ce..afeb784b85a12 100644 --- a/mlir/include/mlir/IR/PatternMatch.h +++ b/mlir/include/mlir/IR/PatternMatch.h @@ -810,8 +810,7 @@ class RewritePatternSet { RewritePatternSet &add(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, - std::forward<ConstructorArg>(arg), + (addImpl<Ts>(/*debugLabels=*/{}, std::forward<ConstructorArg>(arg), std::forward<ConstructorArgs>(args)...), ...); return *this; @@ -894,7 +893,7 @@ class RewritePatternSet { RewritePatternSet &insert(ConstructorArg &&arg, ConstructorArgs &&...args) { // The following expands a call to emplace_back for each of the pattern // types 'Ts'. - (addImpl<Ts>(/*debugLabels=*/std::nullopt, arg, args...), ...); + (addImpl<Ts>(/*debugLabels=*/{}, arg, args...), ...); return *this; } diff --git a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h index 9ad94839890b7..07e265582e96b 100644 --- a/mlir/include/mlir/Tools/PDLL/AST/Nodes.h +++ b/mlir/include/mlir/Tools/PDLL/AST/Nodes.h @@ -903,8 +903,8 @@ class UserConstraintDecl final ArrayRef<VariableDecl *> results, const CompoundStmt *body, Type resultType) { - return createImpl(ctx, name, inputs, /*nativeInputTypes=*/std::nullopt, - results, /*codeBlock=*/std::nullopt, body, resultType); + return createImpl(ctx, name, inputs, /*nativeInputTypes=*/{}, results, + /*codeBlock=*/std::nullopt, body, resultType); } /// Return the name of the constraint. diff --git a/mlir/lib/Dialect/Async/IR/Async.cpp b/mlir/lib/Dialect/Async/IR/Async.cpp index d3bb250bb8ab9..b834afef7da79 100644 --- a/mlir/lib/Dialect/Async/IR/Async.cpp +++ b/mlir/lib/Dialect/Async/IR/Async.cpp @@ -309,7 +309,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp index d17c4afab016c..27298e892e599 100644 --- a/mlir/lib/Dialect/EmitC/IR/EmitC.cpp +++ b/mlir/lib/Dialect/EmitC/IR/EmitC.cpp @@ -601,7 +601,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/Func/IR/FuncOps.cpp b/mlir/lib/Dialect/Func/IR/FuncOps.cpp index aa068966ba607..9d317f20521fb 100644 --- a/mlir/lib/Dialect/Func/IR/FuncOps.cpp +++ b/mlir/lib/Dialect/Func/IR/FuncOps.cpp @@ -193,7 +193,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp index a12aef0dfad38..7276464389559 100644 --- a/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp +++ b/mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp @@ -2774,7 +2774,7 @@ void LLVMFuncOp::build(OpBuilder &builder, OperationState &result, assert(llvm::cast<LLVMFunctionType>(type).getNumParams() == argAttrs.size() && "expected as many argument attribute lists as arguments"); call_interface_impl::addArgAndResultAttrs( - builder, result, argAttrs, /*resultAttrs=*/std::nullopt, + builder, result, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(result.name), getResAttrsAttrName(result.name)); } diff --git a/mlir/lib/Dialect/Shape/IR/Shape.cpp b/mlir/lib/Dialect/Shape/IR/Shape.cpp index 31fecf61c5e46..5f395eef9d601 100644 --- a/mlir/lib/Dialect/Shape/IR/Shape.cpp +++ b/mlir/lib/Dialect/Shape/IR/Shape.cpp @@ -1303,7 +1303,7 @@ void FuncOp::build(OpBuilder &builder, OperationState &state, StringRef name, return; assert(type.getNumInputs() == argAttrs.size()); call_interface_impl::addArgAndResultAttrs( - builder, state, argAttrs, /*resultAttrs=*/std::nullopt, + builder, state, argAttrs, /*resultAttrs=*/{}, getArgAttrsAttrName(state.name), getResAttrsAttrName(state.name)); } diff --git a/mlir/lib/Reducer/Tester.cpp b/mlir/lib/Reducer/Tester.cpp index 14760c0be70df..03f12af174839 100644 --- a/mlir/lib/Reducer/Tester.cpp +++ b/mlir/lib/Reducer/Tester.cpp @@ -68,7 +68,7 @@ Tester::Interestingness Tester::isInteresting(StringRef testCase) const { std::string errMsg; int result = llvm::sys::ExecuteAndWait( - testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/std::nullopt, + testScript, testerArgs, /*Env=*/std::nullopt, /*Redirects=*/{}, /*SecondsToWait=*/0, /*MemoryLimit=*/0, &errMsg); if (result < 0) diff --git a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp index 54ae01c77c445..f3ec18c9074e4 100644 --- a/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/LoopAnnotationTranslation.cpp @@ -206,7 +206,7 @@ void LoopAnnotationConversion::convertLocation(FusedLoc location) { llvm::MDNode *LoopAnnotationConversion::convert() { // Reserve operand 0 for loop id self reference. - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); metadataNodes.push_back(dummy.get()); if (FusedLoc startLoc = attr.getStartLoc()) diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp index baf7a82b1c24a..1253c2f83b07b 100644 --- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp +++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp @@ -1922,7 +1922,7 @@ ModuleTranslation::getOrCreateAliasScope(AliasScopeAttr aliasScopeAttr) { if (!scopeInserted) return scopeIt->second; llvm::LLVMContext &ctx = llvmModule->getContext(); - auto dummy = llvm::MDNode::getTemporary(ctx, std::nullopt); + auto dummy = llvm::MDNode::getTemporary(ctx, {}); // Convert the domain metadata node if necessary. auto [domainIt, insertedDomain] = aliasDomainMetadataMapping.try_emplace( aliasScopeAttr.getDomain(), nullptr); diff --git a/mlir/lib/Tools/PDLL/Parser/Parser.cpp b/mlir/lib/Tools/PDLL/Parser/Parser.cpp index ad7d71b0bdd2f..50e10447ee468 100644 --- a/mlir/lib/Tools/PDLL/Parser/Parser.cpp +++ b/mlir/lib/Tools/PDLL/Parser/Parser.cpp @@ -985,8 +985,7 @@ ast::Decl *Parser::createODSNativePDLLConstraintDecl( // Build the native constraint. auto *constraintDecl = ast::UserConstraintDecl::createNative( ctx, ast::Name::create(ctx, name, loc), paramVar, - /*results=*/std::nullopt, codeBlock, ast::TupleType::get(ctx), - nativeType); + /*results=*/{}, codeBlock, ast::TupleType::get(ctx), nativeType); constraintDecl->setDocComment(ctx, docString); curDeclScope->add(constraintDecl); return constraintDecl; @@ -1782,7 +1781,7 @@ Parser::parseConstraint(std::optional<SMRange> &typeConstraint, FailureOr<ast::ConstraintRef> Parser::parseArgOrResultConstraint() { std::optional<SMRange> typeConstraint; - return parseConstraint(typeConstraint, /*existingConstraints=*/std::nullopt, + return parseConstraint(typeConstraint, /*existingConstraints=*/{}, /*allowInlineTypeConstraints=*/false); } @@ -2995,8 +2994,8 @@ LogicalResult Parser::validateOperationOperandsOrResults( // Otherwise, create dummy values for each of the entries so that we // adhere to the ODS signature. for (unsigned i = 0, e = odsValues.size(); i < e; ++i) { - values.push_back(ast::RangeExpr::create( - ctx, loc, /*elements=*/std::nullopt, rangeTy)); + values.push_back( + ast::RangeExpr::create(ctx, loc, /*elements=*/{}, rangeTy)); } return success(); } diff --git a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp index d0b8624d8de23..18e0301ffeae3 100644 --- a/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp +++ b/mlir/unittests/Debug/FileLineColLocBreakpointManagerTest.cpp @@ -23,9 +23,9 @@ static Operation *createOp(MLIRContext *context, Location loc, StringRef operationName, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create(loc, OperationName(operationName, context), {}, {}, - std::nullopt, OpaqueProperties(nullptr), - std::nullopt, numRegions); + return Operation::create(loc, OperationName(operationName, context), + TypeRange(), ValueRange(), std::nullopt, + OpaqueProperties(nullptr), BlockRange(), numRegions); } namespace { diff --git a/mlir/unittests/IR/OperationSupportTest.cpp b/mlir/unittests/IR/OperationSupportTest.cpp index 0dd46fbd3f104..6ab8d558aee84 100644 --- a/mlir/unittests/IR/OperationSupportTest.cpp +++ b/mlir/unittests/IR/OperationSupportTest.cpp @@ -24,7 +24,7 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, context->allowUnregisteredDialects(); return Operation::create( UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + operands, std::nullopt, nullptr, BlockRange(), numRegions); } namespace { @@ -33,7 +33,7 @@ TEST(OperandStorageTest, NonResizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a non-resizable operation with one operand. @@ -57,7 +57,7 @@ TEST(OperandStorageTest, Resizable) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -85,7 +85,7 @@ TEST(OperandStorageTest, RangeReplace) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -121,7 +121,7 @@ TEST(OperandStorageTest, MutableRange) { Builder builder(&context); Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value operand = useOp->getResult(0); // Create a resizable operation with one operand. @@ -158,8 +158,7 @@ TEST(OperandStorageTest, RangeErase) { Builder builder(&context); Type type = builder.getNoneType(); - Operation *useOp = - createOp(&context, /*operands=*/std::nullopt, {type, type}); + Operation *useOp = createOp(&context, /*operands=*/{}, {type, type}); Value operand1 = useOp->getResult(0); Value operand2 = useOp->getResult(1); @@ -189,8 +188,8 @@ TEST(OperationOrderTest, OrderIsAlwaysValid) { MLIRContext context; Builder builder(&context); - Operation *containerOp = createOp(&context, /*operands=*/std::nullopt, - /*resultTypes=*/std::nullopt, + Operation *containerOp = createOp(&context, /*operands=*/{}, + /*resultTypes=*/{}, /*numRegions=*/1); Region &region = containerOp->getRegion(0); Block *block = new Block(); @@ -237,7 +236,7 @@ TEST(OperationFormatPrintTest, CanPrintNameAsPrefix) { Operation *op = Operation::create( NameLoc::get(StringAttr::get(&context, "my_named_loc")), OperationName("t.op", &context), builder.getIntegerType(16), {}, - std::nullopt, nullptr, std::nullopt, 0); + std::nullopt, nullptr, {}, 0); std::string str; OpPrintingFlags flags; diff --git a/mlir/unittests/IR/ValueTest.cpp b/mlir/unittests/IR/ValueTest.cpp index 58678224780be..fc671be39f1eb 100644 --- a/mlir/unittests/IR/ValueTest.cpp +++ b/mlir/unittests/IR/ValueTest.cpp @@ -20,9 +20,9 @@ static Operation *createOp(MLIRContext *context, ArrayRef<Value> operands = {}, ArrayRef<Type> resultTypes = {}, unsigned int numRegions = 0) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), resultTypes, - operands, std::nullopt, nullptr, std::nullopt, numRegions); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), resultTypes, + operands, std::nullopt, nullptr, {}, numRegions); } namespace { @@ -32,7 +32,7 @@ TEST(ValueTest, getNumUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_EQ(v0.getNumUses(), (unsigned)0); @@ -53,7 +53,7 @@ TEST(ValueTest, hasNUses) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUses(0)); EXPECT_FALSE(v0.hasNUses(1)); @@ -77,7 +77,7 @@ TEST(ValueTest, hasNUsesOrMore) { Builder builder(&context); Operation *op0 = - createOp(&context, /*operands=*/std::nullopt, builder.getIntegerType(16)); + createOp(&context, /*operands=*/{}, builder.getIntegerType(16)); Value v0 = op0->getResult(0); EXPECT_TRUE(v0.hasNUsesOrMore(0)); EXPECT_FALSE(v0.hasNUsesOrMore(1)); diff --git a/mlir/unittests/Transforms/DialectConversion.cpp b/mlir/unittests/Transforms/DialectConversion.cpp index 1d4a4f7292088..7bb27f721414c 100644 --- a/mlir/unittests/Transforms/DialectConversion.cpp +++ b/mlir/unittests/Transforms/DialectConversion.cpp @@ -13,9 +13,9 @@ using namespace mlir; static Operation *createOp(MLIRContext *context) { context->allowUnregisteredDialects(); - return Operation::create( - UnknownLoc::get(context), OperationName("foo.bar", context), {}, {}, - std::nullopt, /*properties=*/nullptr, std::nullopt, 0); + return Operation::create(UnknownLoc::get(context), + OperationName("foo.bar", context), {}, {}, + std::nullopt, /*properties=*/nullptr, {}, 0); } namespace { 
@kazutakahirata kazutakahirata merged commit 70dce3d into llvm:main Jun 26, 2025
6 of 7 checks passed
@kazutakahirata kazutakahirata deleted the cleanup_20250625_nullopt_mlir branch June 26, 2025 15:41
anthonyhatran pushed a commit to anthonyhatran/llvm-project that referenced this pull request Jun 26, 2025
ArrayRef has a constructor that accepts std::nullopt. This constructor dates back to the days when we still had llvm::Optional. Since the use of std::nullopt outside the context of std::optional is kind of abuse and not intuitive to new comers, I would like to move away from the constructor and eventually remove it. This patch replaces {} with std::nullopt.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment