[Mlir-commits] [mlir] [OpenMP][Flang] Add "IsolatedFromAbove" trait to omp.target (PR #67164)

Akash Banerjee llvmlistbot at llvm.org
Mon Oct 16 10:28:14 PDT 2023


================
@@ -1144,14 +1144,13 @@ def DataBoundsOp : OpenMP_Op<"bounds",
 }
 
 def MapInfoOp : OpenMP_Op<"map_info", [AttrSizedOperandSegments]> {
-  let arguments = (ins OpenMP_PointerLikeType:$var_ptr,
-                       Optional<OpenMP_PointerLikeType>:$var_ptr_ptr,
+  let arguments = (ins AnyTypeOf<[IntLikeType, Index, OpenMP_PointerLikeType]>:$var_ptr,
----------------
TIFitis wrote:

Sorry this is not resolved, please consider the following C code.

```
void foo(int n){
  int a[n][1024];
  #pragma omp target
  {
    a[11][22] = 33;
  }
  return;
}
```

For the above code Clang maps both `a` and `n`.
In C/Clang, they array is simply created with size `n x 1024`.

But in FIR/HLFIR we wrap `n` with the following guard: `n>0 ? n:0`.

This means `n` only appears as a `select` op/instruction:

```
%0 = fir.load %arg0 : !fir.ref<i32>
%1 = fir.convert %0 : (i32) -> i64
%2 = fir.convert %1 : (i64) -> index
%c0 = arith.constant 0 : index
%3 = arith.cmpi sgt, %2, %c0 : index
%4 = arith.select %3, %2, %c0 : index
```

As a result, we would like to map `%4` here instead of `%arg0` as that is what gets used inside the region.

@kiranchandramohan @agozillon @clementval @razvanlupusoru Any idea how we do so while continuing to use `OpenMP_PointerLikeType` for `map_entries`?

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


More information about the Mlir-commits mailing list