typedef signed short int16_t;
typedef signed int int32_t;
typedef signed long long int64_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef __attribute__((neon_vector_type(8), __clang_arm_mve_strict_polymorphism)) int16_t int16x8_t;
typedef __attribute__((neon_vector_type(4), __clang_arm_mve_strict_polymorphism)) int32_t int32x4_t;
typedef __attribute__((neon_vector_type(2), __clang_arm_mve_strict_polymorphism)) int64_t int64x2_t;
typedef __attribute__((neon_vector_type(8), __clang_arm_mve_strict_polymorphism)) uint16_t uint16x8_t;
typedef __attribute__((neon_vector_type(4), __clang_arm_mve_strict_polymorphism)) uint32_t uint32x4_t;
typedef __attribute__((neon_vector_type(2), __clang_arm_mve_strict_polymorphism)) uint64_t uint64x2_t;
typedef int16_t [[clang::neon_vector_type(8), clang::__clang_arm_mve_strict_polymorphism]] int16x8_t;
void test_param(int16_t [[clang::neon_vector_type(8), clang::__clang_arm_mve_strict_polymorphism]] int16x8);
__attribute__((overloadable))
int overload(int16x8_t x, int16_t y); __attribute__((overloadable))
int overload(int32x4_t x, int32_t y); __attribute__((overloadable))
int overload(uint16x8_t x, uint16_t y); __attribute__((overloadable))
int overload(uint32x4_t x, uint32_t y);
int16_t s16;
int32_t s32;
uint16_t u16;
uint32_t u32;
int16x8_t vs16;
int32x4_t vs32;
uint16x8_t vu16;
uint32x4_t vu32;
int test_easy_s16(void) { return overload(vs16, s16); }
int test_easy_u16(void) { return overload(vu16, u16); }
int test_easy_s32(void) { return overload(vs32, s32); }
int test_easy_u32(void) { return overload(vu32, u32); }
int test_promote_s16(void) { return overload(vs16, s16 + 1); }
int test_promote_u16(void) { return overload(vu16, u16 + 1); }
int test_promote_s32(void) { return overload(vs32, s32 + 1); }
int test_promote_u32(void) { return overload(vu32, u32 + 1); }
int test_literal_s16(void) { return overload(vs16, 1); }
int test_literal_u16(void) { return overload(vu16, 1); }
int test_literal_s32(void) { return overload(vs32, 1); }
int test_literal_u32(void) { return overload(vu32, 1); }
int16x8_t lax_conversion(void) { return vu32; }
#ifdef ERROR_CHECK
int expect_error(uint64x2_t v) {
return overload(v, 2); }
typedef __attribute__((__clang_arm_mve_strict_polymorphism)) int i; typedef __attribute__((__clang_arm_mve_strict_polymorphism)) int f(void); typedef __attribute__((__clang_arm_mve_strict_polymorphism)) struct { uint16x8_t v; } s; #endif