<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/97783>97783</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[TBAA] "long long" type causes incorrect optimization in GVN
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
huhu233
</td>
</tr>
</table>
<pre>
There is a simple case, I get total different results with `long` type and `long long` type, as shown,
**long type**
```
#include <cstdio>
#include <arm_sve.h>
const int SIZE = 16;
int main()
{
int datas[SIZE];
#pragma clang loop vectorize(disable)
for (int i = 0; i < SIZE; i++) {
datas[i] = -i - i - 1;
}
long res2[SIZE];
svbool_t pa = svptrue_b32();
svint32_t v1 = svld1(pa, &datas[0]);
svint64_t v2 = svunpklo(v1);
svst1(pa, (long *)&res2[0], v2);
printf("--%dth-- %lld\n", 0, res2[0]);
printf("--%dth-- %lld\n", 1, res2[1]);
printf("\n");
return 0;
}
```
**output**
run with opensource `qemu`
```
--0th-- -1
--1th-- -3
```
```
#include <cstdio>
#include <arm_sve.h>
const int SIZE = 16;
int main()
{
int datas[SIZE];
#pragma clang loop vectorize(disable)
for (int i = 0; i < SIZE; i++) {
datas[i] = -i - i - 1;
}
long long res2[SIZE];
svbool_t pa = svptrue_b32();
svint32_t v1 = svld1(pa, &datas[0]);
svint64_t v2 = svunpklo(v1);
svst1(pa, (long *)&res2[0], v2);
printf("--%dth-- %lld\n", 0, res2[0]);
printf("--%dth-- %lld\n", 1, res2[1]);
printf("\n");
return 0;
}
```
**output**
run with opensource `qemu`
```
--0th-- -1
--1th-- -6484229677715469824
```
I did some preliminary analysis and found that the main difference was in the tbaa results。IR diverged after GVN pass and different tbaa caused different results,
**long type IR**
https://godbolt.org/
**long long type IR**
https://godbolt.org/
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk1vGzcQ_TWjy0DG7nA_D3uwJDvwJYc0yKEXg1pSWrZccktyZTi_viAl2VLipEWL3GzQlMjhe_NBPmG492pvpOygXEG5WfA5DNZ1wzzMxNhia8Vz93mQTqLyyNGrcdISe-4l0BofcC8DBhu4RqF2O-mkCeikn3Xw-KTCgFBl2po9VBmG50kiN-K8h5eGSMc9-sE-GaA1ZBvIbk8zxZEQx5Np52iqstM4nWTK9HoWEoGtex-EssDu3jJyNz76g7wZXuy9NT6gMgF_e_j9DoFtMK-ArY7WuD9yZYAaoPbEWJ-MiJiAggfuoVxFAig3L-BoB2KT4_uRY695St5OeJB9sE59lUCNUJ5vtXxhj6CddQjURG6VIsqArdLXdYoyrYBWabR4FVD8OwekoNwk_FLhEuN_fh1cvXldpEo76ekHmfjD1lr9GHDiidMfpuBm-bhldKrO9WllAqPHgIf8dFyLHKiZeLxzoOocZBYdXaC_4aiKyEEnjtlMf2oL1Bzy7z36cOmgSQmlZ9MCVafMjt7WeKC3fU5OmbBLCdFyCVSKMCyXCFRqLaBcGyCK-CxOV5zX0fxbnvyCJ_8HnhfY9REnw-xMeiPnB7r5gU7isHOY5nApJzebo2rtJI23s-tlFOtfcpxfsddUy2WW8lnm53V-XLO3PV_O7-L9ReJ9V_C7gv-_gquiKYjaqq7rvCyqtqHiJ5p-QKEEejtKnJzUalSGu2fkhutnH5sHI3BnZyMwDDxgGGSS5Evf0Et84h6VSaaw5fzcSMAdgyaDhh4-oVAH6fZSIN8F6fDDl484cX9kf-1AErrns5fi-77k590FPny6rOcQwuSB3QLdA93vrdhaHW6s28eNt1n-O9VCdEy0rOUL2eU1ZXnRFE2-GLqmasq6YkK01NdCNEUpsybPGmLU9qyVC9VRRkVWZ2XGspzym76lupG8aouc7wRjUGRy5ErfaH0Yo9OF8n6WXVvXDVtovpXapx6QyMgnTMb0TDcL10XMcjvvPRSZVj74V5aggk7N4-fV7W36nSJ67e2IjoVIVxHvtrfOyT6gnYIa1VcelDXxyj98-biYne6-qZEKw7y96e0IdB9dnj6Wk7N_yD4A3adAPdD9MZFDR38HAAD__1ye8pg">