[Mlir-commits] [mlir] e919df5 - [MLIR][Transforms] Correct block sorting utils name (NFC) (#92558)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Fri May 17 08:36:14 PDT 2024
Author: Christian Ulmann
Date: 2024-05-17T17:36:09+02:00
New Revision: e919df57770d43217cbd4d05f92de8dc7aac5035
URL: https://github.com/llvm/llvm-project/commit/e919df57770d43217cbd4d05f92de8dc7aac5035
DIFF: https://github.com/llvm/llvm-project/commit/e919df57770d43217cbd4d05f92de8dc7aac5035.diff
LOG: [MLIR][Transforms] Correct block sorting utils name (NFC) (#92558)
This commit renames the name of the block sorting utility function to
`getBlocksSortedByDominance`. A topological order is not defined on a
general directed graph, so the previous name did not make sense.
Added:
Modified:
mlir/include/mlir/Transforms/RegionUtils.h
mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
mlir/lib/Transforms/Mem2Reg.cpp
mlir/lib/Transforms/Utils/RegionUtils.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/Transforms/RegionUtils.h b/mlir/include/mlir/Transforms/RegionUtils.h
index 192ff71384059..f65d0d44eef42 100644
--- a/mlir/include/mlir/Transforms/RegionUtils.h
+++ b/mlir/include/mlir/Transforms/RegionUtils.h
@@ -87,8 +87,9 @@ LogicalResult eraseUnreachableBlocks(RewriterBase &rewriter,
LogicalResult runRegionDCE(RewriterBase &rewriter,
MutableArrayRef<Region> regions);
-/// Get a topologically sorted list of blocks of the given region.
-SetVector<Block *> getTopologicallySortedBlocks(Region ®ion);
+/// Get a list of blocks that is sorted according to dominance. This sort is
+/// stable.
+SetVector<Block *> getBlocksSortedByDominance(Region ®ion);
} // namespace mlir
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
index b964d1c082b20..eeda245ce969f 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.cpp
@@ -392,7 +392,7 @@ static LogicalResult convertDataOp(acc::DataOp &op,
llvm::BasicBlock *endDataBlock = llvm::BasicBlock::Create(
ctx, "acc.end_data", builder.GetInsertBlock()->getParent());
- SetVector<Block *> blocks = getTopologicallySortedBlocks(op.getRegion());
+ SetVector<Block *> blocks = getBlocksSortedByDominance(op.getRegion());
for (Block *bb : blocks) {
llvm::BasicBlock *llvmBB = moduleTranslation.lookupBlock(bb);
if (bb->isEntryBlock()) {
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index 50ee642b5098d..34b6903f8da07 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
@@ -199,7 +199,7 @@ static llvm::BasicBlock *convertOmpOpRegions(
// Convert blocks one by one in topological order to ensure
// defs are converted before uses.
- SetVector<Block *> blocks = getTopologicallySortedBlocks(region);
+ SetVector<Block *> blocks = getBlocksSortedByDominance(region);
for (Block *bb : blocks) {
llvm::BasicBlock *llvmBB = moduleTranslation.lookupBlock(bb);
// Retarget the branch of the entry block to the entry block of the
@@ -2153,40 +2153,38 @@ getFirstOrLastMappedMemberPtr(mlir::omp::MapInfoOp mapInfo, bool first) {
llvm::SmallVector<size_t> indices(shape[0]);
std::iota(indices.begin(), indices.end(), 0);
- llvm::sort(
- indices.begin(), indices.end(), [&](const size_t a, const size_t b) {
- auto indexValues = indexAttr.getValues<int32_t>();
- for (int i = 0;
- i < shape[1];
- ++i) {
- int aIndex = indexValues[a * shape[1] + i];
- int bIndex = indexValues[b * shape[1] + i];
+ llvm::sort(indices.begin(), indices.end(),
+ [&](const size_t a, const size_t b) {
+ auto indexValues = indexAttr.getValues<int32_t>();
+ for (int i = 0; i < shape[1]; ++i) {
+ int aIndex = indexValues[a * shape[1] + i];
+ int bIndex = indexValues[b * shape[1] + i];
- if (aIndex == bIndex)
- continue;
+ if (aIndex == bIndex)
+ continue;
- if (aIndex != -1 && bIndex == -1)
- return false;
+ if (aIndex != -1 && bIndex == -1)
+ return false;
- if (aIndex == -1 && bIndex != -1)
- return true;
+ if (aIndex == -1 && bIndex != -1)
+ return true;
- // A is earlier in the record type layout than B
- if (aIndex < bIndex)
- return first;
+ // A is earlier in the record type layout than B
+ if (aIndex < bIndex)
+ return first;
- if (bIndex < aIndex)
- return !first;
- }
+ if (bIndex < aIndex)
+ return !first;
+ }
- // Iterated the entire list and couldn't make a decision, all elements
- // were likely the same. Return false, since the sort comparator should
- // return false for equal elements.
- return false;
- });
+ // Iterated the entire list and couldn't make a decision, all
+ // elements were likely the same. Return false, since the sort
+ // comparator should return false for equal elements.
+ return false;
+ });
- return llvm::cast<mlir::omp::MapInfoOp>(
- mapInfo.getMembers()[indices.front()].getDefiningOp());
+ return llvm::cast<mlir::omp::MapInfoOp>(
+ mapInfo.getMembers()[indices.front()].getDefiningOp());
}
/// This function calculates the array/pointer offset for map data provided
diff --git a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
index 2e4b0feb19731..cf3257c8b9b87 100644
--- a/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleTranslation.cpp
@@ -1331,7 +1331,7 @@ LogicalResult ModuleTranslation::convertOneFunction(LLVMFuncOp func) {
// Then, convert blocks one by one in topological order to ensure defs are
// converted before uses.
- auto blocks = getTopologicallySortedBlocks(func.getBody());
+ auto blocks = getBlocksSortedByDominance(func.getBody());
for (Block *bb : blocks) {
CapturingIRBuilder builder(llvmContext);
if (failed(convertBlockImpl(*bb, bb->isEntryBlock(), builder,
diff --git a/mlir/lib/Transforms/Mem2Reg.cpp b/mlir/lib/Transforms/Mem2Reg.cpp
index e096747741c0a..e2e240ad865ce 100644
--- a/mlir/lib/Transforms/Mem2Reg.cpp
+++ b/mlir/lib/Transforms/Mem2Reg.cpp
@@ -517,7 +517,7 @@ getOrCreateBlockIndices(BlockIndexCache &blockIndexCache, Region *region) {
return it->second;
DenseMap<Block *, size_t> &blockIndices = it->second;
- SetVector<Block *> topologicalOrder = getTopologicallySortedBlocks(*region);
+ SetVector<Block *> topologicalOrder = getBlocksSortedByDominance(*region);
for (auto [index, block] : llvm::enumerate(topologicalOrder))
blockIndices[block] = index;
return blockIndices;
diff --git a/mlir/lib/Transforms/Utils/RegionUtils.cpp b/mlir/lib/Transforms/Utils/RegionUtils.cpp
index e25867b527b71..192f59b353295 100644
--- a/mlir/lib/Transforms/Utils/RegionUtils.cpp
+++ b/mlir/lib/Transforms/Utils/RegionUtils.cpp
@@ -837,7 +837,7 @@ LogicalResult mlir::simplifyRegions(RewriterBase &rewriter,
mergedIdenticalBlocks);
}
-SetVector<Block *> mlir::getTopologicallySortedBlocks(Region ®ion) {
+SetVector<Block *> mlir::getBlocksSortedByDominance(Region ®ion) {
// For each block that has not been visited yet (i.e. that has no
// predecessors), add it to the list as well as its successors.
SetVector<Block *> blocks;
More information about the Mlir-commits
mailing list