<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/80982>80982</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[OMPT] Ident wrong ident flags with distributed parallel for
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
mikaoP
</td>
</tr>
</table>
<pre>
```c
// t1.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
#pragma omp teams
{
#pragma omp distribute parallel for
for (volatile int i = 0; i < 100; i++);
}
}
```
```c
// tool.c
#include <omp-tools.h>
#include <stdio.h>
#include <stdlib.h>
static ompt_set_callback_t ompt_set_callback;
#define register_ompt_callback_t(name, type) \
do { \
type f_##name = &on_##name; \
if (ompt_set_callback(name, (ompt_callback_t)f_##name) == ompt_set_never) \
printf("0: Could not register callback '" #name "'\n"); \
} while (0)
#define register_ompt_callback(name) register_ompt_callback_t(name, name##_t)
static void
on_ompt_callback_work(
ompt_work_t wstype,
ompt_scope_endpoint_t endpoint,
ompt_data_t *parallel_data,
ompt_data_t *task_data,
uint64_t count,
const void *codeptr_ra)
{
switch(endpoint)
{
case ompt_scope_begin:
printf("begin ");
switch(wstype)
{
case ompt_work_loop:
printf("ompt_work_loop\n");
break;
case ompt_work_loop_static:
printf("ompt_work_loop_static\n");
break;
case ompt_work_loop_dynamic:
printf("ompt_work_loop_dynamic\n");
break;
case ompt_work_loop_guided:
printf("ompt_work_loop_guided\n");
break;
case ompt_work_loop_other:
printf("ompt_work_loop_other\n");
break;
case ompt_work_sections:
printf("ompt_work_sections\n");
break;
case ompt_work_single_executor:
printf("ompt_work_single_executor\n");
break;
case ompt_work_single_other:
printf("ompt_work_single_other\n");
break;
case ompt_work_workshare:
printf("ompt_work_workshare\n");
break;
case ompt_work_distribute:
printf("ompt_work_distribute\n");
break;
case ompt_work_taskloop:
printf("ompt_work_taskloop\n");
break;
case ompt_work_scope:
printf("ompt_work_scope\n");
break;
}
break;
case ompt_scope_end:
printf("end ");
switch(wstype)
{
case ompt_work_loop:
printf("ompt_work_loop\n");
break;
case ompt_work_loop_static:
printf("ompt_work_loop_static\n");
break;
case ompt_work_loop_dynamic:
printf("ompt_work_loop_dynamic\n");
break;
case ompt_work_loop_guided:
printf("ompt_work_loop_guided\n");
break;
case ompt_work_loop_other:
printf("ompt_work_loop_other\n");
break;
case ompt_work_sections:
printf("ompt_work_sections\n");
break;
case ompt_work_single_executor:
printf("ompt_work_single_executor\n");
break;
case ompt_work_single_other:
printf("ompt_work_single_other\n");
break;
case ompt_work_workshare:
printf("ompt_work_workshare\n");
break;
case ompt_work_distribute:
printf("ompt_work_distribute\n");
break;
case ompt_work_taskloop:
printf("ompt_work_taskloop\n");
break;
case ompt_work_scope:
printf("ompt_work_scope\n");
break;
}
break;
case ompt_scope_beginend:
printf("ompt_scope_beginend should never be passed to %s\n", __func__);
exit(-1);
}
}
void ompt_finalize(ompt_data_t *tool_data)
{
printf("0: ompt_event_runtime_shutdown\n");
}
int ompt_initialize(
ompt_function_lookup_t lookup,
int initial_device_num,
ompt_data_t *tool_data)
{
ompt_set_callback = (ompt_set_callback_t) lookup("ompt_set_callback");
register_ompt_callback(ompt_callback_work);
printf("0: NULL_POINTER=%p\n", (void*)NULL);
return 1; //success
}
ompt_start_tool_result_t *ompt_start_tool(
unsigned int omp_version,
const char *runtime_version
){
static ompt_start_tool_result_t ompt_start_tool_result = {&ompt_initialize,&ompt_finalize, 0};
return &ompt_start_tool_result;
}
```
Compile and run: `clang -fopenmp t1.c && clang -fopenmp tool.c -shared -fPIC -o libtool.so && OMP_NUM_THREADS=2 OMP_TOOL_LIBRARIES=$PWD/libtool.so ./a.out`
Gives the following output
```
begin ompt_work_distribute
begin ompt_work_loop
end ompt_work_distribute
begin ompt_work_loop
end ompt_work_distribute
end ompt_work_distribute
```
There is a mismatch between the `work_loop` and the `work_distribute` flag. The reason is that in clang's codegen it is not possible to determine which of the to worksharings are being built in the `emitForStaticFinish` function. Since `work_distribute` has preference in a combined pragma, all events show it.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWU9v4zoO_zTKhWjgyPl7yKFNprsFZqbFtA97NGSbjrWVJUOSkzf76ReSY8dx3D8zncsDWhStI5Iif6REmgwzhu8k4prMbshsO2KVzZVeF_yZqYdRrNKfazIP6t-EBFsSXBN6S-gt2Mm4XQi5TESVIpBwY2zK1Tgn4ZcXqILHHTKXFgrGJaHLveIpoauj2OKmfoDjD6FhqdmuYKCKEiyywvQY-hLDkik3VvO4sggl00wIFJApPSyaKQ3eMsEsFwjOWg4k3EJAwhv_uIFJUH8g9Mb_rkjYWEIW2wZO89B48_jxfLHnYqXEsJNVUV45qnnN0b8SBmOZ5YlzkI0M2ihhQsQseY7s5VoLr905xYxLBI07bizqyIuctiB0KVmBhG7A_iyR0BWQ2abxeKpc6Lor4NkgiwgNCQ2drPc5oXMlO4vO62diPHPRujT4pL8hd41bdRV548KtU9fuI3GPume1-yk1lzYjdEkoDUh4DRtViRSksq0roFEEhC4IpdDiodStzDbSP616WMhiC4fcHTlCl8HpVrzL4y3e1XtCUv93-L0zzs6Dv5J-QcneFgelnaLGYE90a5GFg6nD3KCpHZmoEiOUaam4tJGF5vHEVzOmzLLIAqHXzf30S73tTlyWmeceB1Rc2vk0spCo6kxDoqSxHpYTTVSKpdWRZkN5xxy4TXJClydLV6f4dJJNwgx2Qca445KE1y-dFU-HNu5dtlZn48NVm0l62e2k1HtdKFWeVHa19Xi6J66f9GKN7PlifUBTVJ-PHsY-zmGZAQPerzf9KVnRVfyKvob3zyDeVTzF9NcQH2U-hFjZHPW78NacH0ZrMLFcSfNuqK3A7-I0XO4ERvg3JpVVb4Lts38ccb3huzx9xvthze6PyZnGdzv7JPG73j69AL2FtcP5YaQuS5_nqDeAtgK_fapcLn4znJ7pV9G1b3MD1H4xQNlPGl1LUKYXheDFGnDU_VkIPgvBZyH4LASfheAfVQj8W__r1WCAG0xeN5WuB4UYoWTGYApWAaGz01XbQBRllUyi6NJ6_Ju7hu9q8tZswv_1zZG3JOOSCf4_bJrmTs-lVNOVXfRNF12xl8U9ShvpSlpeYGTyyqbqIAcc3rOGy-MEgktueWPOWcPoYLu845Lfc1VGFuqHTtvn5zb1BlGKe55gJKvi5c7zNXyXA5HjcOJy8OAb6taaU4TPZhPn6GsdL_b1Qz14N9wXzv_-19ev0cP93fenLz9IuCV0VnbOTDt1uyZ05VjPd9NoKy1h4ocTfiZlqiRBY3qhqlFZpm3kPafRVMLWruzR2uBV0k8eUzhGONqjNlzJNih1q57kTLttmpPTcB0HIatuv96dYQ0YM0yog7e4IXR-cc42zeLpJmwgcLAvfNRwXuw_cLCHRoAbVZRcIDCZgq6kCx2ZB4lgcgdXmSpRFqWfuTpNhM6hT_KzQrjyJSGFq-zhbgNXCgSPPcmoRvD-20P0_a9v0dO_f3y53j6ScEv92tP9_dfo693Nj-sfd18e_VmZPvxnS-htZ48xobdsrCrbM_9ffI8GbI6QKSHUgcsdqMqWlR3EXE9ABgvMIN3nf09xKfHPy71O7Rn_lKNG4AYYFNwUzCY5xGgPiNJ7gMyDk_J54EPaXe9sPw8gE2w3hqccQSMzSrqNbc5cvqpjTOjCQKJS3KEEbh1dKgulMobHAl0lSNGiLrhEOOQ8yUFlXqFV0LwlcLkzwDRCjC40ccWF13C0Cwtub5V-9Dfolktucm_bMbOO4ZHL5CUEOTNQasxQo2PiEhgkqoi5u9315N3dGyYE-CpgXE07ALfjUboO01W4YiNcTxbBIgwWk3k4ytcsY4v5ktIJTjFJ5jGdLpJsOp8u4xmbz6arEV_TgE4DGiwmk9mKhuMV0gVjAbKU0ixMZ2QaYMG4GAuxL8ZK70bcmArXy2C1pCPBYhTGf-lBqcQDeKJLirPtSK-dzFVc7QyZBoIba067WG6F_7bk_tvDE5lt4S5FaeGgldwB988uogYO3OadLxvSs28bRpUW69za0r9c-8y64zav4nGiCnfjxL75d1Vq9V9MLKG33khD6K0H8f8AAAD__7FBxrw">