<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/106412>106412</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Miscompiling LDS variable in openmp
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
JonChesterfield
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
JonChesterfield
</td>
</tr>
</table>
<pre>
Test case from aomp smoke (teams_nest.c) reproduced inline,
```
#include <stdio.h>
#include <omp.h>
int main(void) {
int fail = 0;
//
// Test: num_teams and omp_get_team_num()
#pragma omp target
{
printf("Num_teams=%d\n", omp_get_num_teams());
}
#pragma omp target
{
#pragma omp teams
{
if (omp_get_team_num() == 0)
printf("Num_teams=%d\n", omp_get_num_teams());
#pragma omp distribute
for (int i=0; i< 10; i++)
printf("team %d thread %d\n", omp_get_team_num(), omp_get_thread_num());
}
}
return fail;
}
```
Compile with
```
clang -O2 -fopenmp --offload-arch=gfx1010 teams_nest.c -o teams_nest -mllvm -openmp-opt-disable=true
```
Fails with
```
LLVM ERROR: Absolute address LDS variable inconsistent with variable alignment
```
Save temps suggests LDS variables have had addresses allocated before codegen. I guess that's related to the thin-lto work, though I thought that was only in rocm and this is reproducing in trunk.
The LDS lowering makes a very definite "allocating whole code object at a time" assumption which means it's not safe to run repeatedly. The thinlto work was supposed to run it on pieces and then recombine them without running the pass a second time, but it looks like the pass is running a second time and decides to increase the alignment of some already allocated variables, i.e. miscompile them.
This specific error can probably be fixed by not over-aligning any already allocated variables, but it seems the writing is on the wall for the closed world assumption LDS lowering currently relies on.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVk2P2zYQ_TX0ZSBDpvx58GFjZ4EUSQMkQa8LihpJ06VIgaTs-N8XQ8te2222KFBAkEXNm-F7nA9LhUCNRdyKxQch5W_O7loMEX1NaCohpVjsJ2qIrfPbB-OkdNVp-wNDBK0CQu1dB8p1PYTOvSIIuY6ouvBiMcSpFnIDHnvvqkFjBWQNWRRyByLfi_xpvC_z8TovZUFWm6FCEMUuxIrctBXFx3-yuq6_td3cyUboFFkh1wdHFRMRqw-3CADG1IoMiGIPuSgezEI-C_kMD0vWLoonsEP3kqSCshW4rn9pMKY3L3bohFynLa--Re9V0ykGQlS-wTjarqwAoPdkY5185e-X-KLYC7moxGJnOTVyd93sSuG8G18XDSBW-_-4-SMuBX4zXpEi31DNif6V5mJ_Pk-5eXOH_1cd_J1vRSF6KoeIt5jaeabKmSZR7DnJ_LCD2fgoP6TrHarMAZgjxNajquAXfO-P4c6S_G5t91Juc3V5vLzwGAdvU5m-FegV9NA56c5NQQbhSLF9p820UbaB7KuErHY92q6HLHN1bZyqMuV1K4p9U_-c5bMc4LanIXM3a8g6Yw4dZOcYmetjVlFQpUFR7KMf8B2qz4pMuCV6D_r8-Y8v8PHbt6_fuOGeyuDMEBFUVXkMAT7vv8NBeeK9gKx2NlCIaGOK-GZShhrboY3vMPmuDggRuz5AGJoGQ7yPH6BlRKuqy_YYQBnjtIpYQYm18wjaVdigncInaAamGFsVhVwF8GgSMDqILUJsyWYmOjg6_8qlEls3NC18Gh9i8oSjCuCsOQFZ8E53adTElgJQuM5Vsg3box_s6_RW048WkwbjjugZ1alXZg0H9CeosCZLkUe2HIUw5tg6cxYCrvwTdQQVQUGkDoWUoEIYuj6Ss3BsSbfQobIB6KzSughB1cgy_WCZIrJsc5rCj1H2RXUSF4a-d-F8LuxAEZyFnlBjGMUih9GuK8lyAOxSdt0Q2cEyZT7QXgVWFlA79kpsd1AOkUMa514DGHrFNywf4Oh_55Z2rVBThYFZkdUe-Z-OPa-VBK6G4BhtuLVPN6VwrRgmQFOcQkdBjz3J_B9yRAFCj5pq0oDeOw9aWei9K1VpTlAi1PSTS-yUjtcd0GeJR6JuT_9GYTyDgNiFJOLoKWWauLbOb5QxaVLyQpuUkKPzprpN910l6cF7tNGcuLAJOdJ0Um2LalNs1AS3s5Wcr5ez-WI9abezFWqsqkriTBX1Yj1XOeq81KvNaonLOp_QVuZynq_lerac5Yv1VK2X5UyWarPa5GqtV2KeY6fITHnUTJ1vJhTCgNtZvpzP5MSoEk0Yv2YsHiFZx-8Yv2WnrByaIOa5oRDDW5hI0eD2yyVBLO1hqsB5rk0Gb7ZtjH0QxdP5S6Ch2A7lVLtOyGeOOP5kvXfcOEI-Jx5ByOeR6GEr_woAAP__p6n8oQ">