[Mlir-commits] [mlir] [mlir][OpenMP][NFC] Refactor fillAffinityIteratorLoop (PR #189418)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Mon Mar 30 08:54:20 PDT 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir-openmp
Author: Chi-Chun, Chen (chichunchen)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/189418.diff
1 Files Affected:
- (modified) mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp (+23-16)
``````````diff
diff --git a/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp b/mlir/lib/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.cpp
index 42fdadaba0da1..b6a96fa53716e 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));
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/189418
More information about the Mlir-commits
mailing list