<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">