<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/145206>145206</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
program generates incorrect outputs at -O2 -ftree-vectorize -mhvx -mv60
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
androm3da
</td>
</tr>
</table>
<pre>
This C++ program below gets the wrong results when built with `-mhvx -mv60 -static -ftree-vectorize -O2`. The expected result is `checksum = FEFB7E9` but we see `checksum = 22C90031` instead.
```
$ ~/src/toolchain_for_hexagon/clang+llvm-20.1.5-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/hexagon-unknown-linux-musl-clang++ -mhvx -mv60 -static -ftree-vectorize -O2 -o prog ./cs_prog.ii -w
$ ~/src/toolchain_for_hexagon/clang+llvm-20.1.5-cross-hexagon-unknown-linux-musl/x86_64-linux-gnu/bin/qemu-hexagon ./prog
checksum = 22C90031
$ clang++ -O2 -o prog -ftree-vectorize -mavx2 -msse4 cs_prog.ii
cs_prog.ii:2:42: warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]
void platform_main_end(int crc) { printf("checksum = %X\n", crc); }
^
cs_prog.ii:4:21: warning: implicit conversion from 'long' to 'int' changes value from 4294967295 to -1 [-Wconstant-conversion]
int crc32_context = 4294967295, main_i, main_j;
~~~~~~~~~~~~~ ^~~~~~~~~~
2 warnings generated.
$ ./prog
checksum = FEFB7E9
```
```
$ cat cs_prog.ii
extern "C" int printf(char *...);
void platform_main_end(int crc) { printf("checksum = %X\n", crc); }
int crc32_tab[256];
int crc32_context = 4294967295, main_i, main_j;
void crc32_byte(char b) {
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[(crc32_context ^ b) & 255];
}
void transparent_crc(long val) {
{
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[(crc32_context ^ val) & 255];
}
crc32_byte(val >> 8);
crc32_byte(val >> 16);
crc32_byte(val >> 24);
{
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[crc32_context & 255];
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[crc32_context & 255];
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[crc32_context & 255];
crc32_context =
crc32_context >> 8 & 16777215 ^ crc32_tab[crc32_context & 255];
}
}
unsigned main_crc;
int main() {
main_i = 0;
for (; main_i < 256; main_i++) {
main_crc = main_i;
main_j = 8;
for (; main_j; main_j--)
if (main_crc & 1)
main_crc = main_crc >> 1 ^ 3988292384;
else
main_crc >>= 1;
crc32_tab[main_i] = main_crc;
}
transparent_crc(1);
transparent_crc(4172852816);
transparent_crc(65535);
transparent_crc(264466405);
platform_main_end(crc32_context ^ 4294967295);
}
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEV0uv4rgS_jVmUwpyKnECCxZwDkh31Yvb0r075CQm8enEZmwH6Fn0bx85L17ndI9a3TMogsRVrqrvq0cMt1aWSogVYRvCXme8dZU2K64Ko5uo4LNMF19Xnytp4YXghuAGjkaXhjeQiVqfoRTOgqsEnI1WJRhh29pZOFdCQdbK2sFZugpIQoOmOl0gaE4JhcA67mQOwcEZIYKTyJ028k8BwSckCZ0DfK4EiMtR5E4Ug1WQ1tvJK5F_sW0DJHqF3Xa3SbdLklDIWgdnAVaIJy3ElyWlUejVpLJO8GJO6NpfCR0uuiYYwzeCO2tygjundZ1XXKr9QZt9JS681IrgLq-5Kglu6vrUBEjn4ZwFudHWBoNO0KovSp9VUEvVXoKmtTXB3WWR7JN4WCtVS3CXSW_v413B6Mqz_nfZg0B3GYK5j9Xu_f1cSgjOA-B_BeQfomnHrV1kPixC1-9naQr0joAbbM_AG366IASNtSKGK2zv4voQrZFE69h_wZkbJVXpb__z309jcYchFFpYUNoBr31951qdhLFSKzgY3YB1RqoSaumE4TU4DQTTvOIGCK4JpkDYJvjf2UjHs1oEvbol7JXQ9UnLAo41dwdtmn3jaReqILiQykHuE7IEkvoOk8odCC4I4h1DBNn_CXtRBJHgy7CFRBsgqbcPhG0fEccedfiAWDbHWubSPaEjmNbaU54OyKRy_iGvuCqFhROvW9GrxriMl0mKS-ZVg7AHnmtlHVcuuFrusQ8QI9znWjlxcR2gqxGPp2NETndvJNp4VN9uPwAe5fRI6BpHZBZKoYThTkzdjfGH1TZOjqcxAO-MhZy7-6oSFyeMAoL4QhDBo5uyNlbDfD7v0_MPpP5Kr-MZYRtkiee98_3z1HdR91uzr06M2LIhWk_Ws-Vu1X8eJVsSbWEBBBMIkzRNMWQ-l3dxexf329h28IcJIGMTqh53F6EzXNkjN0K5fUfMwhexL9bbQMff74X8C4MevT-EDWOv3vN64vXkbCqaD1XC5KrzoRLGN0o_AP8zqB_2POL81ST_wN1vSOtPevwNrvqS6b9b1Z3Yir5RfblPTe5XutFxLfq-r7uGp2PcB-3H08IPj0n8An5iTCv92_DWEEz-OmODWnQnfOtEi-vqo6e3610Q-OocEyQPXu_qwXN1K3_Pe__Q90NHaLRcLHCJ0SK-RgAgaivet7PtrlcIHxPa52SAyF7vXD528fPsCW_a7lkahykuGC5uW_hZK2EsYt-1g0kcJ0lMb7Tee708z6Xbub-8HaWPrz26nhWrqFhGSz4TqzBllCVJytisWqV5XEQJj2mac5HQJabhMoyjxSHM0kLkbCZXSJHRBJHGEUbxPBVenkaMYhqyOCExFQ2X9dyfMOfalDNpbStWYcyQJrOaZ6K23Z8SRCXO0En9u4-9zsyqO5ZmbWlJTGtpnb2acdLVYjX-RxkPBBakyrUxInegW3dsnQXu-jPl81lyOmnPWlOvKueOlkRrgjuCu1K6qs3muW4I7rzX4Sc4Gv0mckdw18VqCe4GMKcV_hUAAP__JT_zUw">