1*207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64 -target-feature +v8a -verify -DHAS8 -S %s -o - 2*207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64 -target-feature +v8.1a -verify -DHAS81 -S %s -o - 3*207e5cccSFangrui Song // RUN: %clang_cc1 -triple aarch64 -target-feature +v9a -verify -DHAS9 -S %s -o - 4*207e5cccSFangrui Song // REQUIRES: aarch64-registered-target 5*207e5cccSFangrui Song 6*207e5cccSFangrui Song #ifdef HAS9 7*207e5cccSFangrui Song // expected-no-diagnostics 8*207e5cccSFangrui Song #endif 9*207e5cccSFangrui Song 10*207e5cccSFangrui Song #include <arm_acle.h> 11*207e5cccSFangrui Song #include <arm_fp16.h> 12*207e5cccSFangrui Song #include <arm_sve.h> 13*207e5cccSFangrui Song 14*207e5cccSFangrui Song __attribute__((target("arch=armv8.1-a"))) 15*207e5cccSFangrui Song int test_crc_attr() 16*207e5cccSFangrui Song { 17*207e5cccSFangrui Song return __crc32cd(1, 1); 18*207e5cccSFangrui Song } 19*207e5cccSFangrui Song 20*207e5cccSFangrui Song __attribute__((target("arch=armv9-a"))) 21*207e5cccSFangrui Song svint8_t test_svadd_attr(svbool_t pg, svint8_t op1, svint8_t op2) 22*207e5cccSFangrui Song { 23*207e5cccSFangrui Song return svadd_s8_z(pg, op1, op2); 24*207e5cccSFangrui Song } 25*207e5cccSFangrui Song 26*207e5cccSFangrui Song __attribute__((target("arch=armv9-a"))) 27*207e5cccSFangrui Song float16_t test_fp16_on_v9(float16_t x, float16_t y) 28*207e5cccSFangrui Song { 29*207e5cccSFangrui Song return vabdh_f16(x, y); 30*207e5cccSFangrui Song } 31*207e5cccSFangrui Song 32*207e5cccSFangrui Song void test_error1() 33*207e5cccSFangrui Song { 34*207e5cccSFangrui Song #ifdef HAS8 35*207e5cccSFangrui Song // expected-error@+2{{always_inline function '__crc32cd' requires target feature 'crc'}} 36*207e5cccSFangrui Song #endif 37*207e5cccSFangrui Song __crc32cd(1, 1); 38*207e5cccSFangrui Song } 39*207e5cccSFangrui Song 40*207e5cccSFangrui Song void test_error2() 41*207e5cccSFangrui Song { 42*207e5cccSFangrui Song #if defined(HAS8) || defined(HAS81) 43*207e5cccSFangrui Song // expected-error@+2{{SVE vector type 'svint8_t' (aka '__SVInt8_t') cannot be used in a target without sve}} 44*207e5cccSFangrui Song #endif 45*207e5cccSFangrui Song svundef_s8(); 46*207e5cccSFangrui Song } 47