[clang] [llvm] [mlir] [OMPIRBuilder] always leave PARALLEL via the same barrier (PR #164586)
Tom Eccles via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 22 02:30:48 PDT 2025
tblah wrote:
PR stack:
- https://github.com/llvm/llvm-project/pull/164586
- https://github.com/llvm/llvm-project/pull/164587
This is all to fix the following code example provided by Themos Tsikas at AMD. (run with OMP_CANCELLATION=true in the environment)
```
Program cancel_bug
Use OMP_LIB, Only: omp_get_thread_num
Logical :: flag(0:11)
flag = .FALSE.
flag(11) = .TRUE.
! If no cancellation happens, we expect all flags to become true
!$OMP PARALLEL NUM_THREADS(12)
! one thread activates cancellation
!$OMP CANCEL PARALLEL IF(omp_get_thread_num()==11)
print '(I4,1X,12L1)',omp_get_thread_num(), flag
! this one should act as cancellation point, even though expression evaluates to false and does not activate cancellation.
!$OMP CANCEL PARALLEL IF(.FALSE.)
flag(omp_get_thread_num()) = .TRUE.
!$OMP END PARALLEL
! If all flags are true, second cancellation point was ignored, bug
print '(12L1)', flag
End Program cancel_bug
```
https://github.com/llvm/llvm-project/pull/164586
More information about the cfe-commits
mailing list