[Mlir-commits] [mlir] [MLIR] Use make_isa_range instead of dyn_cast/continue (NFC). (PR #223974)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Wed Sep 16 03:45:54 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-affine
Author: Florian Hahn (fhahn)
<details>
<summary>Changes</summary>
Simplify loops using dyn_cast + early continue using make_isa_range, added in https://github.com/llvm/llvm-project/pull/223414.
Aided by Opus 5.
---
Full diff: https://github.com/llvm/llvm-project/pull/223974.diff
14 Files Affected:
- (modified) mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitCPass.cpp (+6-10)
- (modified) mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp (+8-12)
- (modified) mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp (+3-5)
- (modified) mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp (+2-4)
- (modified) mlir/lib/Conversion/XeVMToLLVM/XeVMToLLVM.cpp (+1-5)
- (modified) mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp (+4-5)
- (modified) mlir/lib/Dialect/Affine/Utils/Utils.cpp (+7-10)
- (modified) mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp (+2-4)
- (modified) mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp (+2-4)
- (modified) mlir/lib/Dialect/XeGPU/Transforms/XeGPULayoutImpl.cpp (+1-4)
- (modified) mlir/lib/Pass/PassStatistics.cpp (+4-6)
- (modified) mlir/lib/Target/SMTLIB/ExportSMTLIB.cpp (+2-5)
- (modified) mlir/lib/Transforms/Utils/RegionUtils.cpp (+4-8)
- (modified) mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp (+2-4)
``````````diff
diff --git a/mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitCPass.cpp b/mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitCPass.cpp
index ca66af051a4e8..23072580acd96 100644
--- a/mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitCPass.cpp
+++ b/mlir/lib/Conversion/ConvertToEmitC/ConvertToEmitCPass.cpp
@@ -80,12 +80,10 @@ class LoadDependentDialectExtension : public DialectExtensionBase {
void apply(MLIRContext *context,
MutableArrayRef<Dialect *> dialects) const final {
LLVM_DEBUG(llvm::dbgs() << "Convert to EmitC extension load\n");
- for (Dialect *dialect : dialects) {
- auto *iface = dyn_cast<ConvertToEmitCPatternInterface>(dialect);
- if (!iface)
- continue;
+ for (ConvertToEmitCPatternInterface *iface :
+ llvm::make_isa_range<ConvertToEmitCPatternInterface>(dialects)) {
LLVM_DEBUG(llvm::dbgs() << "Convert to EmitC found dialect interface for "
- << dialect->getNamespace() << "\n");
+ << iface->getDialect()->getNamespace() << "\n");
}
}
@@ -212,12 +210,10 @@ LogicalResult ConvertToEmitCPassInterface::visitInterfaces(
} else {
// Normal mode: Populate all patterns from all dialects that implement the
// interface.
- for (Dialect *dialect : context->getLoadedDialects()) {
- auto *iface = dyn_cast<ConvertToEmitCPatternInterface>(dialect);
- if (!iface)
- continue;
+ std::vector<Dialect *> dialects = context->getLoadedDialects();
+ for (ConvertToEmitCPatternInterface *iface :
+ llvm::make_isa_range<ConvertToEmitCPatternInterface>(dialects))
visitor(iface);
- }
}
return success();
}
diff --git a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp
index dbeca5736ec62..02d0f67a37703 100644
--- a/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp
+++ b/mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp
@@ -81,12 +81,10 @@ class LoadDependentDialectExtension : public DialectExtensionBase {
void apply(MLIRContext *context,
MutableArrayRef<Dialect *> dialects) const final {
LDBG() << "Convert to LLVM extension load";
- for (Dialect *dialect : dialects) {
- auto *iface = dyn_cast<ConvertToLLVMPatternInterface>(dialect);
- if (!iface)
- continue;
+ for (ConvertToLLVMPatternInterface *iface :
+ llvm::make_isa_range<ConvertToLLVMPatternInterface>(dialects)) {
LDBG() << "Convert to LLVM found dialect interface for "
- << dialect->getNamespace();
+ << iface->getDialect()->getNamespace();
iface->loadDependentDialects(context);
}
}
@@ -273,14 +271,12 @@ LogicalResult ConvertToLLVMPassInterface::visitInterfaces(
} else {
// Normal mode: Populate all patterns from all dialects that implement the
// interface.
- for (Dialect *dialect : context->getLoadedDialects()) {
- // First time we encounter this dialect: if it implements the interface,
- // let's populate patterns !
- auto *iface = dyn_cast<ConvertToLLVMPatternInterface>(dialect);
- if (!iface)
- continue;
+ // First time we encounter this dialect: if it implements the interface,
+ // let's populate patterns !
+ std::vector<Dialect *> dialects = context->getLoadedDialects();
+ for (ConvertToLLVMPatternInterface *iface :
+ llvm::make_isa_range<ConvertToLLVMPatternInterface>(dialects))
visitor(iface);
- }
}
return success();
}
diff --git a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
index 201a0bc84aeb2..6d5b10c3002e0 100644
--- a/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
+++ b/mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp
@@ -549,12 +549,10 @@ void GpuToLLVMConversionPass::runOnOperation() {
// Populate all patterns from all dialects that implement the
// `ConvertToLLVMPatternInterface` interface.
- for (Dialect *dialect : context->getLoadedDialects()) {
- auto *iface = dyn_cast<ConvertToLLVMPatternInterface>(dialect);
- if (!iface)
- continue;
+ std::vector<Dialect *> dialects = context->getLoadedDialects();
+ for (ConvertToLLVMPatternInterface *iface :
+ llvm::make_isa_range<ConvertToLLVMPatternInterface>(dialects))
iface->populateConvertToLLVMConversionPatterns(target, converter, patterns);
- }
// Preserve GPU modules and binaries. Modules are preserved as they can be
// converted later by `gpu-module-to-binary`.
diff --git a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp
index 1e83935ffa594..687a21541e4cb 100644
--- a/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp
+++ b/mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp
@@ -554,10 +554,8 @@ static const char *inferFragType(Operation *op) {
return inferFragType(userOp);
}
- for (Operation *users : op->getUsers()) {
- auto contract = dyn_cast<vector::ContractionOp>(users);
- if (!contract)
- continue;
+ for (vector::ContractionOp contract :
+ llvm::make_isa_range<vector::ContractionOp>(op->getUsers())) {
assert(op->getNumResults() == 1);
if (contract.getLhs() == op->getResult(0))
return "AOp";
diff --git a/mlir/lib/Conversion/XeVMToLLVM/XeVMToLLVM.cpp b/mlir/lib/Conversion/XeVMToLLVM/XeVMToLLVM.cpp
index d9cb0e2eed3e7..e60a498b4388c 100644
--- a/mlir/lib/Conversion/XeVMToLLVM/XeVMToLLVM.cpp
+++ b/mlir/lib/Conversion/XeVMToLLVM/XeVMToLLVM.cpp
@@ -351,11 +351,7 @@ buildCacheControlPayloads(ArrayRef<Attribute> attrs) {
SmallVector<std::string> payloads;
llvm::StringMap<bool> seen;
- for (Attribute a : attrs) {
- auto arr = dyn_cast<ArrayAttr>(a);
- if (!arr)
- continue;
-
+ for (ArrayAttr arr : llvm::make_isa_range<ArrayAttr>(attrs)) {
auto vals = arr.getValue();
assert(vals.size() == 3 &&
"Expected exactly 3 integer values (Token, CacheLevel, "
diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp
index 1ec5fbfef50c3..a7381e53d9335 100644
--- a/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp
+++ b/mlir/lib/Dialect/Affine/Transforms/LoopFusion.cpp
@@ -1395,13 +1395,12 @@ struct GreedyFusion {
// Search for siblings which load the same memref block argument.
Block *block = dstNode->op->getBlock();
for (unsigned i = 0, e = block->getNumArguments(); i != e; ++i) {
- for (Operation *user : block->getArgument(i).getUsers()) {
- auto loadOp = dyn_cast<AffineReadOpInterface>(user);
- if (!loadOp)
- continue;
+ for (AffineReadOpInterface loadOp :
+ llvm::make_isa_range<AffineReadOpInterface>(
+ block->getArgument(i).getUsers())) {
// Gather loops surrounding 'use'.
SmallVector<AffineForOp, 4> loops;
- getAffineForIVs(*user, &loops);
+ getAffineForIVs(*loadOp.getOperation(), &loops);
// Skip 'use' if it is not within a loop nest.
// Find the surrounding affine.for nested immediately within the
// block.
diff --git a/mlir/lib/Dialect/Affine/Utils/Utils.cpp b/mlir/lib/Dialect/Affine/Utils/Utils.cpp
index e2ad3151a934c..cec5cb726dcc8 100644
--- a/mlir/lib/Dialect/Affine/Utils/Utils.cpp
+++ b/mlir/lib/Dialect/Affine/Utils/Utils.cpp
@@ -842,10 +842,9 @@ static void forwardStoreToLoad(
// to replace the load, if any.
Operation *lastWriteStoreOp = nullptr;
- for (auto *user : loadOp.getMemRef().getUsers()) {
- auto storeOp = dyn_cast<AffineWriteOpInterface>(user);
- if (!storeOp)
- continue;
+ for (AffineWriteOpInterface storeOp :
+ llvm::make_isa_range<AffineWriteOpInterface>(
+ loadOp.getMemRef().getUsers())) {
MemRefAccess srcAccess(storeOp);
MemRefAccess destAccess(loadOp);
@@ -916,12 +915,10 @@ static void findUnusedStore(AffineWriteOpInterface writeA,
PostDominanceInfo &postDominanceInfo,
llvm::function_ref<bool(Value, Value)> mayAlias) {
- for (Operation *user : writeA.getMemRef().getUsers()) {
- // Only consider writing operations.
- auto writeB = dyn_cast<AffineWriteOpInterface>(user);
- if (!writeB)
- continue;
-
+ // Only consider writing operations.
+ for (AffineWriteOpInterface writeB :
+ llvm::make_isa_range<AffineWriteOpInterface>(
+ writeA.getMemRef().getUsers())) {
// The operations must be distinct.
if (writeB == writeA)
continue;
diff --git a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp
index 9409141f6e45a..12a3ff75bc33b 100644
--- a/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp
+++ b/mlir/lib/Dialect/LLVMIR/Transforms/InlinerInterfaceImpl.cpp
@@ -280,10 +280,8 @@ static void createNewAliasScopesFromNoAliasParameter(
SetVector<LLVM::SSACopyOp> ssaCopies;
SetVector<LLVM::SSACopyOp> noAliasParams;
for (Value argument : cast<LLVM::CallOp>(call).getArgOperands()) {
- for (Operation *user : argument.getUsers()) {
- auto ssaCopy = llvm::dyn_cast<LLVM::SSACopyOp>(user);
- if (!ssaCopy)
- continue;
+ for (LLVM::SSACopyOp ssaCopy :
+ llvm::make_isa_range<LLVM::SSACopyOp>(argument.getUsers())) {
ssaCopies.insert(ssaCopy);
if (!ssaCopy->hasDiscardableAttr(LLVM::LLVMDialect::getNoAliasAttrName()))
diff --git a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
index c42509540c6b5..71f6157b6ed3f 100644
--- a/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
+++ b/mlir/lib/Dialect/Linalg/TransformOps/LinalgTransformOps.cpp
@@ -1925,10 +1925,8 @@ PackGreedilyOp::apply(transform::TransformRewriter &rewriter,
transform::TransformResults &transformResults,
transform::TransformState &state) {
SmallVector<Operation *> results;
- for (Operation *op : state.getPayloadOps(getTarget())) {
- auto linalgOp = dyn_cast<LinalgOp>(op);
- if (!linalgOp)
- continue;
+ for (LinalgOp linalgOp :
+ llvm::make_isa_range<LinalgOp>(state.getPayloadOps(getTarget()))) {
// linalgOp will be replaced and the insertion point may be invalidated if
// we set it before -> set it after.
rewriter.setInsertionPointAfter(linalgOp);
diff --git a/mlir/lib/Dialect/XeGPU/Transforms/XeGPULayoutImpl.cpp b/mlir/lib/Dialect/XeGPU/Transforms/XeGPULayoutImpl.cpp
index f696020b2de12..9ec8c4c677091 100644
--- a/mlir/lib/Dialect/XeGPU/Transforms/XeGPULayoutImpl.cpp
+++ b/mlir/lib/Dialect/XeGPU/Transforms/XeGPULayoutImpl.cpp
@@ -2889,10 +2889,7 @@ static xegpu::DistributeLayoutAttr getLoopCarriedLayoutForYieldOperand(
if (it == mapping.end())
return nullptr;
xegpu::DistributeLayoutAttr iterArgLayout;
- for (Value input : it->second) {
- auto arg = dyn_cast<BlockArgument>(input);
- if (!arg)
- continue;
+ for (BlockArgument arg : llvm::make_isa_range<BlockArgument>(it->second)) {
xegpu::DistributeLayoutAttr layout = xegpu::getDistributeLayoutAttr(arg);
assert((!iterArgLayout || !layout || iterArgLayout.isEqualTo(layout)) &&
"region inputs fed by one terminator operand disagree on layout");
diff --git a/mlir/lib/Pass/PassStatistics.cpp b/mlir/lib/Pass/PassStatistics.cpp
index 01191aa824440..cedcc059fbd6b 100644
--- a/mlir/lib/Pass/PassStatistics.cpp
+++ b/mlir/lib/Pass/PassStatistics.cpp
@@ -219,15 +219,13 @@ void OpPassManager::mergeStatisticsInto(OpPassManager &other) {
/// Prepare the statistics of passes within the given pass manager for
/// consumption(e.g. dumping).
static void prepareStatistics(OpPassManager &pm) {
- for (Pass &pass : pm.getPasses()) {
- OpToOpPassAdaptor *adaptor = dyn_cast<OpToOpPassAdaptor>(&pass);
- if (!adaptor)
- continue;
- MutableArrayRef<OpPassManager> nestedPms = adaptor->getPassManagers();
+ for (OpToOpPassAdaptor &adaptor :
+ llvm::make_isa_range<OpToOpPassAdaptor>(pm.getPasses())) {
+ MutableArrayRef<OpPassManager> nestedPms = adaptor.getPassManagers();
// Merge the statistics from the async pass managers into the main nested
// pass managers. Prepare recursively before merging.
- for (auto &asyncPM : adaptor->getParallelPassManagers()) {
+ for (auto &asyncPM : adaptor.getParallelPassManagers()) {
for (unsigned i = 0, e = asyncPM.size(); i != e; ++i) {
prepareStatistics(asyncPM[i]);
asyncPM[i].mergeStatisticsInto(nestedPms[i]);
diff --git a/mlir/lib/Target/SMTLIB/ExportSMTLIB.cpp b/mlir/lib/Target/SMTLIB/ExportSMTLIB.cpp
index 2c2c9ee27c3f6..4e2a44888ab3d 100644
--- a/mlir/lib/Target/SMTLIB/ExportSMTLIB.cpp
+++ b/mlir/lib/Target/SMTLIB/ExportSMTLIB.cpp
@@ -636,11 +636,8 @@ static LogicalResult emit(SolverOp solver, const SMTEmissionOptions &options,
return op->emitError()
<< "solver must not contain any non-SMT operations";
- for (Type resTy : op->getResultTypes()) {
- auto sortTy = dyn_cast<SortType>(resTy);
- if (!sortTy)
- continue;
-
+ for (SortType sortTy :
+ llvm::make_isa_range<SortType>(op->getResultTypes())) {
unsigned arity = sortTy.getSortParams().size();
if (declaredSorts.contains(sortTy.getIdentifier())) {
if (declaredSorts[sortTy.getIdentifier()] != arity)
diff --git a/mlir/lib/Transforms/Utils/RegionUtils.cpp b/mlir/lib/Transforms/Utils/RegionUtils.cpp
index 349a03f897441..35dc5eb6c4ef4 100644
--- a/mlir/lib/Transforms/Utils/RegionUtils.cpp
+++ b/mlir/lib/Transforms/Utils/RegionUtils.cpp
@@ -1280,10 +1280,8 @@ static bool blockArgsDominateInsertionPoint(
for (Operation *op : slice) {
// Check direct operands.
- for (Value operand : op->getOperands()) {
- auto arg = dyn_cast<BlockArgument>(operand);
- if (!arg)
- continue;
+ for (BlockArgument arg :
+ llvm::make_isa_range<BlockArgument>(op->getOperands())) {
if (!argDominates(arg, op))
return false;
}
@@ -1293,10 +1291,8 @@ static bool blockArgsDominateInsertionPoint(
for (Region ®ion : op->getRegions()) {
SetVector<Value> capturedValues;
getUsedValuesDefinedAbove(region, region, capturedValues);
- for (Value val : capturedValues) {
- auto arg = dyn_cast<BlockArgument>(val);
- if (!arg)
- continue;
+ for (BlockArgument arg :
+ llvm::make_isa_range<BlockArgument>(capturedValues)) {
if (!argDominates(arg, op))
return false;
}
diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
index 2b195ce7e31cf..3990791f87f24 100644
--- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
@@ -3145,10 +3145,8 @@ void OpEmitter::buildParamList(SmallVectorImpl<MethodParameter> ¶mList,
// Check if parameters besides default valued one are enough to distinguish
// between builders with wrapped and unwrapped arguments.
bool hasBuilderAmbiguity = true;
- for (const auto &arg : op.getArgs()) {
- auto *namedAttr = dyn_cast<NamedAttribute *>(arg);
- if (!namedAttr)
- continue;
+ for (NamedAttribute *namedAttr :
+ llvm::make_isa_range<NamedAttribute *>(op.getArgs())) {
Attribute attr = namedAttr->attr;
if (attr.hasDefaultValue() || attr.isDerivedAttr())
continue;
``````````
</details>
https://github.com/llvm/llvm-project/pull/223974
More information about the Mlir-commits
mailing list