1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon -target-feature +bf16 -target-feature +faminmax -target-feature +fp8 -emit-llvm -verify %s -o /dev/null
// REQUIRES: aarch64-registered-target
#include <arm_neon.h>
void test_features(float16x4_t vd4, float16x8_t vd8, float32x4_t va4, float32x2_t va2,
mfloat8x8_t v8, mfloat8x16_t v16, fpm_t fpm) {
(void) vdot_f16_mf8_fpm(vd4, v8, v8, fpm);
// expected-error@-1 {{'vdot_f16_mf8_fpm' requires target feature 'fp8dot2'}}
(void) vdotq_f16_mf8_fpm(vd8, v16, v16, fpm);
// expected-error@-1 {{'vdotq_f16_mf8_fpm' requires target feature 'fp8dot2'}}
(void) vdot_lane_f16_mf8_fpm(vd4, v8, v8, 3, fpm);
// expected-error@-1 {{'__builtin_neon_vdot_lane_f16_mf8_fpm' needs target feature fp8dot2,neon}}
(void) vdot_laneq_f16_mf8_fpm(vd4, v8, v16, 7, fpm);
// expected-error@-1 {{'__builtin_neon_vdot_laneq_f16_mf8_fpm' needs target feature fp8dot2,neon}}
(void) vdotq_lane_f16_mf8_fpm(vd8, v16, v8, 3, fpm);
// expected-error@-1 {{'__builtin_neon_vdotq_lane_f16_mf8_fpm' needs target feature fp8dot2,neon}}
(void) vdotq_laneq_f16_mf8_fpm(vd8, v16, v16, 7, fpm);
// expected-error@-1 {{'__builtin_neon_vdotq_laneq_f16_mf8_fpm' needs target feature fp8dot2,neon}}
(void) vdot_f32_mf8_fpm(va2, v8, v8, fpm);
// expected-error@-1 {{'vdot_f32_mf8_fpm' requires target feature 'fp8dot4'}}
(void) vdotq_f32_mf8_fpm(va4, v16, v16, fpm);
// expected-error@-1 {{'vdotq_f32_mf8_fpm' requires target feature 'fp8dot4}}
(void) vdot_lane_f32_mf8_fpm(va2, v8, v8, 1, fpm);
// expected-error@-1 {{'__builtin_neon_vdot_lane_f32_mf8_fpm' needs target feature fp8dot4,neon}}
(void) vdot_laneq_f32_mf8_fpm(va2, v8, v16, 3, fpm);
// expected-error@-1 {{'__builtin_neon_vdot_laneq_f32_mf8_fpm' needs target feature fp8dot4,neon}}
(void) vdotq_lane_f32_mf8_fpm(va4, v16, v8, 1, fpm);
// expected-error@-1 {{'__builtin_neon_vdotq_lane_f32_mf8_fpm' needs target feature fp8dot4,neon}}
(void) vdotq_laneq_f32_mf8_fpm(va4, v16, v16, 3, fpm);
// expected-error@-1 {{'__builtin_neon_vdotq_laneq_f32_mf8_fpm' needs target feature fp8dot4,neon}}
}
void test_imm(float16x4_t vd4, float16x8_t vd8, float32x2_t va2, float32x4_t va4,
mfloat8x8_t v8, mfloat8x16_t v16, fpm_t fpm) {
(void) vdot_lane_f16_mf8_fpm(vd4, v8, v8, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 3]}}
(void) vdot_laneq_f16_mf8_fpm(vd4, v8, v16, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 7]}}
(void) vdotq_lane_f16_mf8_fpm(vd8, v16, v8, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 3]}}
(void) vdotq_laneq_f16_mf8_fpm(vd8, v16, v16, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 7]}}
(void) vdot_lane_f32_mf8_fpm(va2, v8, v8, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 1]}}
(void) vdot_laneq_f32_mf8_fpm(va2, v8, v16, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 3]}}
(void) vdotq_lane_f32_mf8_fpm(va4, v16, v8, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 1]}}
(void) vdotq_laneq_f32_mf8_fpm(va4, v16, v16, -1, fpm);
// expected-error@-1 {{argument value -1 is outside the valid range [0, 3]}}
}
|