<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60655>60655</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang][WebAssembly] When compile with -O2, simd intrinsic wasm_i64x2_shl is optimized to wrong value.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Changqing-JING
</td>
</tr>
</table>
<pre>
## Environment
### OS
Ubuntu 22.04
```shell
$ uname -a
Linux ubuntu 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
```
### Clang version
```shell
$ clang --version
clang version 17.0.0 (https://github.com/llvm/llvm-project.git 5d10753314ed58e1f55d41118c8f082c5fc7b2d7)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/jcq/workspace/github/llvm-project/build/bin
```
## Reproduce steps
1. Compile save following code to main.c
```C
#include <wasm_simd128.h>
int main(void){
uint8_t buff[16] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
v128_t a = wasm_v128_load(buff);
v128_t r2 = wasm_i64x2_shl(a, 64);
unsigned char* p2 = (unsigned char*)&r2;
int sum = 0;
for(int i = 0;i<16;i++){
sum += p2[i];
}
return sum;
}
```
2. Build the C code with clang
```shell
clang -O2 --target=wasm32 -msimd128 -c -o main.O2.wasm main.c
```
3. Review the wasm by wasm2wat:
```shell
$ wasm2wat --enable-all -o main.O2.wat main.O2.wasm
$ cat main.O2.wat
(module
(type (;0;) (func (result i32)))
(type (;1;) (func (param i32 i32) (result i32)))
(import "env" "__linear_memory" (memory (;0;) 0))
(import "env" "__indirect_function_table" (table (;0;) 0 funcref))
(func $__original_main (type 0) (result i32)
i32.const 0)
(func $main (type 1) (param i32 i32) (result i32)
call $__original_main))
```
#### Observed behavior
After optimization of clang, the main function returns 0
#### Expected behavior
After optimization of clang, the main function returns 16. Because according to WebAssembly standard, left shift by 64 need to be truncated to left shift by 0.

https://github.com/WebAssembly/simd/blob/main/proposals/simd/SIMD.md
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVluP2zYW_jX0y4EE6uhi6cEPY7sustg0i6ZBHg1KOrLZUqRKUnZmf_2CkmbGdtJkd9GBBxJ57p_OTTgnT5pow_Ity_crMfqzsZvdWejTn1Kfon-8--XnVW3a5w3DlGEKP-mLtEb3pD3je8af5vtA-vBxvvlUj9qPgBjzbOEp-PxzZ1LqRS6DUYueIBLzzT-lHr_AOEvncZLHPMI8OpEmKxtgmGIeLco_vv8XfKYW3gsLKYckZ-lTnrH0CRE-_bYD5IjwpSyORfbw-PmXTwwPk60H5x7j2SmhT3Ah66TR3w-kmVij6I65uZWHZB3zmAPD8uz94Fj6xPDA8HCS_jzWcWN6hgelLi-PaLDmd2p8fJIe8jbh6zxNk4zavKSky_M2S5KkbMqOl9jkXbOusV0zrGbbvwl7Is_SpyXsaNR_aHPVkQqBRyc9LnxnS6KF3rSkAvdgnFxweaedF0pRu5c2kBgezqYnhoffmz8ZHq7G_uEG0dBrEA-eMzzUo1RteMpHAJfjDeTwKw3WtGND4DwNbqYlMexMP0hF4MSFoDNKmavUJ2hMS-AN9ELquHlQv3vVLHWjxpaApburcP3Ryb5NsIzPLP3p1gmp_aSKYXkxsg1Irre3DAAAo9S-PHqox65j-TYpWL4Hlu6BrbcJw93__7_es3T7Zujt7ZJgsCgmM1ME040yomVYTo5gdSe7SFh8E5FF9gWP7qwYloLhDorsVmqRHfXUDVpozsIyfIJhVsGwfCQFaSwsPqoAgACkG_tJkj_SO2MZloFFvjJIlu6SYnrB7fR7gx6mv0kdboPAgCzfSpY_wLXeP7phyY9WB9E3H1657rMQY9iGRAV_JtjNiXWV_jyX9V9X_lL1HxCiyC8Ftw94pwhRvyQaRA1ES5Z-wDiQv52y8zGN4Ve6SLpOzkzc9fP0xKsIBf39RvTCCFFEWtSKIqHUvX1_58tND7ujvHb3sjftqOgFWIalfx4oPFm6nb4vVuHUjTr06NKSG5UHmeKUI9VrS3qUTb6WHYQVfRBdxH-sT_aDsR4YIukLQwxvx6OSmoQ99tQb-zzflvPhwW_-XyqUupWWGn8Mnnpp9NEHcBfV0_ujZgislrqvLCzBZsejsfIktVDHAPsrOvybgb-VV4pxY7Tzs_Nf671TlizKfozsq4EmZMzX_t3G8Vcjc9oCakf2Qi3UdBYXaezM89R5smAGL3v5bxEgBNMtBYa7Kdknx18AXurXwTcmxcsq8mWgxv99lpIihi01YnQEommMbcOY8QY-U_3kHPW1egbnhW6FbYMqRZ0Hd5adDzVaZKCJ2iBQE3g76kb4-XzPyGN4iSYJzawXJwoN7XEzGB3ZaKK6eB6w4aYx2pP2y8KQV0XGq5QzPGBS8qzKOY-KOqsKIdqIN1RHWdeto4pyHtV5nVBbZDxL83gIcCzf8zsbyU3sDA-hp4VxrkwY9nNaHAZrBuOEcm8MH9-938d9u2o3aVullVjRJinWBUfOMVmdN2lDlKcCk3Wxzqq0qrFpSqq6CvNkzbFZyQ1yTDkmnFd8zZO4LJK07nIqKmyLouMs49QLqeKwccTGnlbSuZE2BS_yfKVETcpNWy2ipitMRIYYlly7mbaUejw5lnElnXdvWrz0alqHp-0vfJZ8e4tBvofPZ9LQLEvJNCeiDxjyIQQfxp-V2snmYfKCdC9JOSfF1ZqwHgo1Ugyr0arN_7YYMjxMUQXYp6j_EwAA__9Y6GXI">