https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118931
--- Comment #2 from Li Pan <pan2.li at intel dot com> ---
13 │ int main ()
14 │ {
15 │ vector(16) unsigned char vect__3.5;
16 │ unsigned char a_lsm.2;
17 │ long long int _5;
18 │ vector(16) unsigned char _13;
19 │ unsigned char _29;
20 │
21 │ <bb 2> [local count: 71618576]:
22 │ a_lsm.2_20 = a;
23 │ _13 = {a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20,
a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20,
a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20, a_lsm.2_20};
24 │ vect__3.5_25 = _13 * { 151, 17, 7, 33, 119, 49, 231, 65, 87, 81,
199, 97, 55, 113, 167, 129 };
25 │ _29 = .VEC_EXTRACT (vect__3.5_25, 13);
26 │ a = _29;
27 │ _5 = (long long int) _29;
28 │ __builtin_printf ("%llu\n", _5);
29 │ return 0;
30 │
31 │ }
It is correct from the tree-optimized, (unsigned char )(109 * 113) = 29 is what
we expect. Should be a backend issue.