[Mlir-commits] [mlir] [mlir][OpenMP][NFC] Refactor fillAffinityIteratorLoop (PR #189418)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Mar 30 08:54:35 PDT 2026
https://github.com/chichunchen updated https://github.com/llvm/llvm-project/pull/189418
>From 8c0d8b8d9730708380f284eed95c9ee75397ef68 Mon Sep 17 00:00:00 2001
From: "Chi Chun, Chen" <chichun.chen at hpe.com>
Date: Sat, 28 Mar 2026 01:22:32 -0500
Subject: [PATCH] [mlir][OpenMP][NFC] Refactor fillAffinityIteratorLoop
Extract affinity-specific logic from fillAffinityIteratorLoop into a
callback so that the iterator loop codegen logic can be shared with
other clauses such as depend clause and target clause.
---
.../OpenMP/OpenMPToLLVMIRTranslation.cpp | 39 +++++++++++--------
1 file changed, 23 insertions(+), 16 deletions(-)
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index 42fdadaba0da1..51173d136845d 100644
--- a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
+++ b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
@@ -2442,11 +2442,14 @@ convertIteratorRegion(llvm::Value *linearIV, IteratorInfo &iterInfo,
return mlir::success();
}
+using IteratorStoreEntryTy =
+ llvm::function_ref<void(llvm::Value *linearIV, mlir::omp::YieldOp yield)>;
+
static mlir::LogicalResult
-fillAffinityIteratorLoop(mlir::omp::IteratorOp itersOp,
- llvm::IRBuilderBase &builder,
- mlir::LLVM::ModuleTranslation &moduleTranslation,
- llvm::Value *affinityList, IteratorInfo &iterInfo) {
+fillIteratorLoop(mlir::omp::IteratorOp itersOp, llvm::IRBuilderBase &builder,
+ mlir::LLVM::ModuleTranslation &moduleTranslation,
+ IteratorInfo &iterInfo, llvm::StringRef loopName,
+ IteratorStoreEntryTy genStoreEntry) {
mlir::Region &itersRegion = itersOp.getRegion();
mlir::Block &iteratorRegionBlock = itersRegion.front();
@@ -2463,19 +2466,12 @@ fillAffinityIteratorLoop(mlir::omp::IteratorOp itersOp,
"failed to convert iterator region", llvm::inconvertibleErrorCode());
}
- // Extract affinity entry from omp.yield and store into list[linearIV].
auto yield =
mlir::dyn_cast<mlir::omp::YieldOp>(iteratorRegionBlock.getTerminator());
assert(yield && yield.getResults().size() == 1 &&
"expect omp.yield in iterator region to have one result");
- auto entryOp =
- yield.getResults()[0].getDefiningOp<mlir::omp::AffinityEntryOp>();
- assert(entryOp && "expect yield generate an affinity entry");
- llvm::Value *addr = moduleTranslation.lookupValue(entryOp.getAddr());
- llvm::Value *len = moduleTranslation.lookupValue(entryOp.getLen());
- storeAffinityEntry(builder, *moduleTranslation.getOpenMPBuilder(),
- affinityList, linearIV, addr, len);
+ genStoreEntry(linearIV, yield);
// Iterator-region block/value mappings are temporary for this conversion,
// clear them to avoid stale entries in ModuleTranslation.
@@ -2486,8 +2482,7 @@ fillAffinityIteratorLoop(mlir::omp::IteratorOp itersOp,
llvm::OpenMPIRBuilder::InsertPointOrErrorTy afterIP =
moduleTranslation.getOpenMPBuilder()->createIteratorLoop(
- loc, iterInfo.getTotalTrips(), bodyGen,
- /*Name=*/"iterator");
+ loc, iterInfo.getTotalTrips(), bodyGen, loopName);
if (failed(handleError(afterIP, *itersOp)))
return failure();
@@ -2544,8 +2539,20 @@ buildAffinityData(mlir::omp::TaskOp &taskOp, llvm::IRBuilderBase &builder,
assert(itersOp && "iterated value must be defined by omp.iterator");
IteratorInfo iterInfo(itersOp, moduleTranslation, builder);
llvm::Value *affList = allocateAffinityList(iterInfo.getTotalTrips());
- if (failed(fillAffinityIteratorLoop(itersOp, builder, moduleTranslation,
- affList, iterInfo)))
+ if (failed(fillIteratorLoop(
+ itersOp, builder, moduleTranslation, iterInfo, "iterator",
+ [&](llvm::Value *linearIV, mlir::omp::YieldOp yield) {
+ auto entryOp = yield.getResults()[0]
+ .getDefiningOp<mlir::omp::AffinityEntryOp>();
+ assert(entryOp && "expect yield produce an affinity entry");
+ llvm::Value *addr =
+ moduleTranslation.lookupValue(entryOp.getAddr());
+ llvm::Value *len =
+ moduleTranslation.lookupValue(entryOp.getLen());
+ storeAffinityEntry(builder,
+ *moduleTranslation.getOpenMPBuilder(),
+ affList, linearIV, addr, len);
+ })))
return llvm::failure();
ads.emplace_back(createAffinity(iterInfo.getTotalTrips(), affList));
}
More information about the Mlir-commits
mailing list