[flang] [llvm] [flang][OpenMP] Try to unify induction var privatization for OMP regions. (PR #91116)

Kareem Ergawy via llvm-commits llvm-commits at lists.llvm.org
Mon May 13 20:18:31 PDT 2024


================
@@ -289,12 +290,34 @@ void DataSharingProcessor::collectSymbolsInNestedRegions(
        eval.getNestedEvaluations()) {
     if (nestedEval.hasNestedEvaluations()) {
       if (nestedEval.isConstruct())
-        // Recursively look for OpenMP constructs within `nestedEval`'s region
         collectSymbolsInNestedRegions(nestedEval, flag, symbolsInNestedRegions);
-      else
-        converter.collectSymbolSet(nestedEval, symbolsInNestedRegions, flag,
-                                   /*collectSymbols=*/true,
-                                   /*collectHostAssociatedSymbols=*/false);
+      else {
+        bool isOrderedConstruct = [&]() {
----------------
ergawy wrote:

@kiranchandramohan @luporl just to clarify this change:
Since `omp ordered` does not have its own data-sharing environment, I think we should consider symbols referenced by an `omp ordered` construct to be separate from the symbols referenced by the parent region.

The changes here make sure that for the following input, `i` to be collected as of the symbols to be privatized for the `omp do ordered` construct:
```fortran
  !$omp do ordered
  do i = 2, 10
    !$omp ordered
    a(i) = a(i-1) + 1
    !$omp end ordered
  end do
  !$omp end do
```

https://github.com/llvm/llvm-project/pull/91116


More information about the llvm-commits mailing list