<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/76556>76556</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang][ARM] -O1 vectorize will get wrong result
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
CoTinker
</td>
</tr>
</table>
<pre>
demo.c
```
#include<stdio.h>
#include<arm_neon.h>
typedef unsigned int __uint32_t;
typedef float float32_t;
typedef __attribute__((neon_vector_type(2))) uint32_t uint32x2_t;
typedef __attribute__((neon_vector_type(2))) float32_t float32x2_t;
uint32x2_t vector_res_uint32x2;
float32x2_t vector_float32x2;
static uint32_t result_uint32x2[2];
uint32_t expected_uint32x2 [] = { 0x0, 0x5 };
float32_t buffer_float32x2 [] = { (float32_t)-16, (float32_t)-15, };
int main()
{
vector_float32x2 = __extension__ ({
float32x2_t __ret;
__ret = (float32x2_t) __builtin_neon_vld1_v(buffer_float32x2, 9);
__ret;
});
vector_float32x2 = __extension__ ({
float32x2_t __ret;
float32_t __s0 = -15.3f;
float32x2_t __s1 = vector_float32x2;
__ret = (float32x2_t) __builtin_neon_vset_lane_f32(__s0, (float32x2_t)__s1, 0);
__ret;
});
vector_float32x2 = __extension__ ({
float32x2_t __ret;
float32_t __s0 = 5.3f;
float32x2_t __s1 = vector_float32x2;
__ret = (float32x2_t) __builtin_neon_vset_lane_f32(__s0, (float32x2_t)__s1, 1);
__ret;
});
// printf("%f %f\n", vector_float32x2[0], vector_float32x2[1]);
vector_res_uint32x2 = vcvt_u32_f32(vector_float32x2);
__extension__ ({
uint32x2_t __s1 = vector_res_uint32x2;
__builtin_neon_vst1_v(result_uint32x2, (int8x8_t)__s1, 18);
});
{
int i;
for(i=0; i<2 ; i++) {
if (result_uint32x2[i] != expected_uint32x2[i]) {
fprintf(stderr, "ERROR\n");
fprintf(stderr, "%d : %d\n",i,result_uint32x2[i]);
}
}
}
}
```
compile command:
```
% clang demo.c -static -lm -o test -O1 -march=armv8-a
% ./test
ERROR
0 : 5
```
```
% clang demo.c -static -lm -o test -O0 -march=armv8-a
% ./test
```
I find the optimize pass that cause this problem is `InlinerPass`
https://godbolt.org/z/hfr9sPhvr
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VkGP4jgT_TXmUgI5NoHkwKGBQZrDpx61vrvlJA7xruMg22GY-fUrOyGQQE_PtFbbityJq1z16vm5MLdWHrUQGxRvUbyf8dZVjdnsmv9L_bcws6wpfmwKUTeLHOE9wi-jcYX7p_skVOpctYVAdGddIZtFheiXJ0ZuaqZFo-_tYXQ_TqIQJbQ6wCpAageMtVI7SphDdDv2K1XDXTc-tTPGnTMya51gDJEEkcTnZWeRu8Yw74ZIQhBJuweumfqXy78SdMB3fRuFvWWCPoIRll1nB7e7pVe_YWpw6kbruJP5rRYjbKvcLWS8JSjeTwAwB-JyErkTxeAJnSoA0T2g9RbwBSOyA3yJAa33U2jMQdaWpbgDNg2ASHLbLJLOo5WP9zAbh9m7DPejl0TNpQ7Mp71l3TsCwAM7ITtj4uKEtrLRjPmMAU63BuH0nl3GjPDbA9esKcJpmOzqGNBeOrzAWNZK5aRmnQ5UEbEzIsmUDV9V0MQQG7q_ScZQenAbEPxpTR3oD6u67RxjFoeg8yhe0PIdxz6SjYLrExl-mjMrHFNcC1ZSgkji4Yyl0S_0yYMGRzze5RtPjon8I3V8ROQHPPYsfobE_4rDaCKy36HwRiQiB0QOcDJSuzIcRoJIXIIfULzT4Xv3WF-8xb77PDdFwfRM-vdNsSMuPzvWUtJX-xBsHOVX598Xg9O7PjzdnKcN-UrYZA9cd_anPbfbB6ldcknGm5A8KPnKOIybX-ohB6j3AHw7lA_HtTE-G6J77E0S0Z0nzb-RbXhSmDYLH8vv3gP0eCtDDyeRp-ThR6K3vxPSgxkkYl0hjOm4IF_e3l7fBqFMhfjLpYjEBSD64rVW3LQmEdk9B_-kWXREj6eG7yCJm3W9f3rhyZv6JJWAvKlrrgtE37sXxZArro_QXaRg3v9Az1UN8wacsA7mrxHMa27yCtE9N_U5mfPb8gUiB-_WzXTMhVccaIif5_0EDJi_4t_GMU0Qxq9QSl2AqwQ0Jydr-VPAiVsLruIOct5aAa6SFk6myZSoQVpAK_xVK6mF-catHQJWzp2sZzV0mmNTZI1yi8YcETn8RORQlSa136qzmRUbWqQ05TOxidaYJjRJk-Ws2sQFL5MyKssix0uCeYqzJMvXuKRFKUq6nMkNwYRGhKQ4oSuyXJR-ZbbK0mSV8kxQtMSi5lItlDrXPvdMWtuKzXoVx6uZ4plQNlyeCQnkeiXG-5nZeP951h4tWmIlrbO3CE46FW7c3Yp4j-Lty9v__CHzMuiajuftu1QKjsLBd9PoY3-Pm7VGbSbUSFe12SJvakQOPk3_b34yzV8id4gcAmqLyCEA_ycAAP__-wJomQ">