[flang-commits] [flang] [llvm] [mlir] [OpenMP] Honor barrier and last iteration flags in loop lowering (PR #224040)
Nicole Aschenbrenner via flang-commits
flang-commits at lists.llvm.org
Fri Sep 25 01:39:58 PDT 2026
================
@@ -6612,11 +6612,32 @@ static void workshareLoopTargetCallback(
CLI->invalidate();
}
-OpenMPIRBuilder::InsertPointTy OpenMPIRBuilder::applyWorkshareLoopTarget(
+OpenMPIRBuilder::InsertPointOrErrorTy OpenMPIRBuilder::applyWorkshareLoopTarget(
DebugLoc DL, CanonicalLoopInfo *CLI, InsertPointTy AllocaIP,
- WorksharingLoopType LoopType, bool NoLoop) {
+ bool NeedsBarrier, WorksharingLoopType LoopType, bool NoLoop,
+ bool NeedsLastIter) {
uint32_t SrcLocStrSize;
Constant *SrcLocStr = getOrCreateSrcLocStr(DL, SrcLocStrSize);
+
+ // Mirrors host runtime reporting of last iteration by in-body computation.
+ if (NeedsLastIter) {
+ Type *I32Type = Type::getInt32Ty(M.getContext());
+ Builder.restoreIP(AllocaIP);
+ AllocaInst *PLastIter =
+ Builder.CreateAlloca(I32Type, nullptr, "p.lastiter");
+ Builder.CreateStore(ConstantInt::get(I32Type, 0), PLastIter);
----------------
nicebert wrote:
You're right, I've fixed it. The store now sits at the end of the preheader, so it's reset every time.
https://github.com/llvm/llvm-project/pull/224040
More information about the flang-commits
mailing list