================
@@ -2590,13 +2590,27 @@ convertOmpWsloop(Operation &opInst, llvm::IRBuilderBase 
&builder,
   }
 
   builder.SetInsertPoint(*regionBlock, (*regionBlock)->begin());
+
+  bool noLoopMode = false;
+  omp::TargetOp targetOp = wsloopOp->getParentOfType<mlir::omp::TargetOp>();
+  if (targetOp) {
+    Operation *targetCapturedOp = targetOp.getInnermostCapturedOmpOp();
----------------
DominikAdamski wrote:

Hi Sergio,
thanks for your feedback:

> Should we check here that the captured op is the omp.loop_nest wrapped by 
> this omp.wsloop?

Yes. There is  assumption in `TargetRegionFlags TargetOp::getKernelExecFlags` 
which checks if the argument is is the result of calling 
`getInnermostCapturedOmpOp()`.

>I'm not actually sure about what is the expected behavior of this, but I 
>imagine that no-loop would just refer to the outer loop, as it's the one for 
>which the trip count can be evaluated in the host.

There are 2 issues:

1. Yes, your guess is right. The no-loop should refer only to the outer loop. I 
modified the OMPIRBuilder code to generate no-loop code only for distribute for 
static loop: 
https://github.com/llvm/llvm-project/pull/155818/commits/564410d9930b9b838d4dadfbea566c222c265e87#diff-a6c8db9d350ec59f4eb93f27f29468b01c9590426a11c9cb79e499bc96b28adc
 
2. Currently Flang does not generate valid code for OpenMP kernel:
```
!$omp target teams distribute parallel do
do i = 0,15
 !$omp parallel do
    do j = 1, 64
      array(i* 64 + j) = i *64 + j
    end do
 !$omp end parallel do
end do
```

https://github.com/llvm/llvm-project/pull/155818
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to