================
@@ -1800,8 +1779,18 @@ OpenMPIRBuilder::InsertPointOrErrorTy
OpenMPIRBuilder::createParallel(
Instruction *PRegPreFiniTI = PRegPreFiniBB->getTerminator();
InsertPointTy PreFiniIP(PRegPreFiniBB, PRegPreFiniTI->getIterator());
- if (Error Err = FiniCB(PreFiniIP))
- return Err;
+ if (!FiniInfo.FiniBB) {
+ if (Error Err = FiniCB(PreFiniIP))
----------------
tblah wrote:
The finalisation basic block could have already been created if the body of the
parallel operation contained a cancellation point or cancel. In that case we
should just branch straight to the block created previously. I agree the
control flow with all of the callbacks and the cancellation stack are a bit
hard to follow. This is not new with this patch.
In most cases, no cancellation will have already created a finalisation block
so finalisation should be generated right here as was done before this patch.
The intention here is to only run the finalisation callback once and have all
exists branch to that one instance (and also to include the barrier in that
unique exit so that all threads block on the same barrier).
https://github.com/llvm/llvm-project/pull/164586
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits