/* { dg-do run } */ /* PR target/101529 */ typedef unsigned char __attribute__((__vector_size__ (1))) W; typedef unsigned char __attribute__((__vector_size__ (8))) V; typedef unsigned short __attribute__((__vector_size__ (16))) U; unsigned short us; /* aarch64 used to miscompile foo to just return 0. */ W foo (unsigned char uc) { V v = __builtin_convertvector ((U){ } >= us, V); return __builtin_shufflevector ((W){ }, v, 4) & uc; } int main (void) { W x = foo (5); if (x[0] != 5) __builtin_abort(); return 0; }