<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/129202>129202</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [MLIR][OpenMP] Translaton of `omp.target` is broken when `private` variables are cleaned up
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            bhandarkar-pranav
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          bhandarkar-pranav
      </td>
    </tr>
</table>

<pre>
    ```
$> cat reproducer.mlir
module attributes {omp.is_target_device = false, omp.requires = #omp<clause_requires none>, omp.target_triples = [], omp.version = #om\
p.version<version = 11>} {
  llvm.func @free(!llvm.ptr)
  llvm.func @malloc(i64) -> !llvm.ptr
  omp.private {type = private} @_QFtarget_allocatableEnon_alloc_var_private_box_10xi32 : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, \
array<1 x array<3 x i64>>)> init {
  ^bb0(%arg0: !llvm.ptr, %arg1: !llvm.ptr):
    omp.yield(%arg1 : !llvm.ptr)
  } dealloc {
  ^bb0(%arg0: !llvm.ptr):
    llvm.br ^bb1
 ^bb1:  // 2 preds: ^bb0, ^bb1
    omp.yield
  }
  llvm.func @target_allocatable_(%arg0: !llvm.ptr {fir.bindc_name = "lb", llvm.nocapture}, %arg1: !llvm.ptr {fir.bindc_name = "ub", ll\
vm.nocapture}) attributes {fir.internal_name = "_QPtarget_allocatable"} {
    %2 = llvm.mlir.constant(1 : i64) : i64
 %5 = llvm.alloca %2 x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)> : (i64) -> !llvm.ptr
    omp.target private(@_QFtarget_allocatableEnon_alloc_var_private_box_10xi32 %5 -> %arg2 : !llvm.ptr) {
      omp.terminator
    }
    llvm.return
 }
}
```

Command to reproduce the problem
```
mlir-translate -mlir-to-llvmir -allow-unregistered-dialect ./reproducer.mlir
Basic Block in function '__omp_offloading_10304_b734e3e_target_allocatable__l16' does not have terminator!
label %omp.region.cont1
```

This happens because after translating the `dealloc` regions of `omp.private` in the translation of `omp.target` we do not return the corret `InsertPoint`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVl2P2joT_jXmZgRy7ISPCy5YWKRKb_W2R72PnGQAnzp2ztihu__-yE5g07J7VKkSguCZeWbmmQ9Hea_PFnHLiicmRHVRtlH0XdG8I2XVlQnBisNM9eHiaPsgnlWued2yJR8_fMdEzuQz1CoAYUeu6WukRWs0Mb5rXdMbBBUC6aoP6IGtnlzbLbQvg6IzhrLBq64RmDzASRmPTOwhahD-02uKFvIATEjXdkzua6N6j-VdaJ1FJp9vRiNmIN2Zm2nxxIrDTeGK5LWzb6Cs2DO-uwuY3E9VsiyCrw4xbMZ3AMZc28WptzWwnJ8IkYk1E1k67gIxsXlUa5UxrmZirZc5ExuYR76mRtEiBteRvqqA0Vl47QZOxrMUQ87Lr8cxxYSpgqoMPltnh__lVVE5WpSVeykz_qKlACZ3d4c-UF8HJvdMrFPEe0hx7UFLkX7W738PTCki9crkPoMXuD1LeEkY8jmVYhPz01aHO2useK4qnqgqFJ35NJ4xhkGSPUg2TO4SxkDRq0bT3IEyeEc_OVwdoMHEye8HMXGVDisabLJ4OD7JCCSOTBxBQEfY-AQzQu8nBj8FPMb02BuP1Sw_jDBmctK0qLRt6tKqFsc2FqaKYyv2A7Z1tepCT7FpPqb2Y7T-DW2o-QPm5peJjjjaBiSrzE9Q5dcvjxlG9MlIRUILkSxSbHF1LGpnfVA2MLEeijzOzu0xVkQUxZvVgD9Avfx5s_9umw-k_udkw2Qz3cdZrP9gmmPio6tYWfHOFEzYHf0jtdqq4G5B3dpxbEjC0JNNvCbB-D1d9Hy3d22rbAPBve16CBeEjlxlsP3FIlZyHkhZb-Jamw__3Tw61ATzmOWPeW8Jz9oHJGzmjVYG6wALJo6P18mT8rqGJ-Pq76AtxCEKaVWLVVm6tivd6WScarQ9lxmXPC-rlcxRYvnOnJUmWzKxgsaleyTARV0RJjyJOMdGVWgi0cOddNbOxuYM2SM73y7aw0V1HVoPFdbxpgJ1CkhwI0Hbc-KLLfm4ntiSwwDrwZ2iYHITRKG2yeKO4OxEb0grqv1AaFxKY6hkMqodEYao_Ml6pPDFaRu1Z81WNhu5UTPcZqucr8Qy43J22RayqWSzLHKUK6VOuZBrxZFvRL7hS4Xrmd4KLgouxJqveJbLBRYiw6ISRb2RS7nMWM6xVdosUlc5Os-09z1uM7ERXMwSnX58-UhVHd43aBv151V_9iznRvvg3xCCDia9sHz-36e_4mVePP2_Q_v5CysO8G0k5gNetIeK3He08OOCNson3F4V6dgLHhQh1AaVxQb6btaT2V5C6OJ2H9b9WYdLXy1q1zJxjJGNP_OO3N9YByaOKVHPxHHM9boV_wYAAP__pDbj2A">