// Test how -cc1 -target-feature interacts with -print-enabled-extensions. // The current behaviour does not look correct, since dependent features are // removed from the printed list when one of their dependencies are disabled, // but they are actually still enabled during compilation, and then actually // disabled for parsing assembly. // REQUIRES: aarch64-registered-target // Behaviour with two positive features. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon -target-feature +sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY // Negative -target-feature disables the extension but keeps any dependencies of it (FEAT_FP16). // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon -target-feature +sve -target-feature -sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_NEG // Disabling then re-enabling a feature is the same as never disabling it. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon -target-feature -sve -target-feature +sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY // Disabling then re-enabling a feature is the same as never disabling it. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon -target-feature +sve -target-feature -sve -target-feature +sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY // Only disabling it is the same as never having enabled it. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=NEG_ONLY // Only disabling it is the same as never having enabled it. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +neon -target-feature -sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=NEG_ONLY // Disabling a dependency (after enabling the dependent) appears to disable the dependent feature. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +sve2 -target-feature -sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP // Disabling a dependency before enabling the dependent appears to have no effect. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature -sve -target-feature +sve2 \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP2 // Disabling a dependency before enabling the dependent appears to have no effect. // RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \ // RUN: -target-feature +sve2 \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP2 // Driver --print-enabled-extensions indicates that negative -target-features disable dependent features. // RUN: %clang --target=aarch64 -march=armv8-a+sve2 --print-enabled-extensions \ // RUN: -Xclang -target-feature -Xclang -sve \ // RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_VIA_XCLANG // However, sve2 is actually enabled in clang but disabled for MC. // RUN: %clang --target=aarch64 -march=armv8-a+sve2 -c %s -o %t \ // RUN: -Xclang -target-feature -Xclang -sve \ // RUN: -Xclang -verify -Xclang -verify-ignore-unexpected=note // POS_ONLY: Extensions enabled for the given AArch64 target // POS_ONLY-EMPTY: // POS_ONLY-NEXT: Architecture Feature(s) Description // POS_ONLY-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // POS_ONLY-NEXT: FEAT_ETE Enable Embedded Trace Extension // POS_ONLY-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // POS_ONLY-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // POS_ONLY-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions // POS_ONLY-NEXT: FEAT_TRBE Enable Trace Buffer Extension // POS_NEG: Extensions enabled for the given AArch64 target // POS_NEG-EMPTY: // POS_NEG-NEXT: Architecture Feature(s) Description // POS_NEG-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // POS_NEG-NEXT: FEAT_ETE Enable Embedded Trace Extension // POS_NEG-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // POS_NEG-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // POS_NEG-NEXT: FEAT_TRBE Enable Trace Buffer Extension // NEG_POS: Extensions enabled for the given AArch64 target // NEG_POS-EMPTY: // NEG_POS-NEXT: Architecture Feature(s) Description // NEG_POS-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // NEG_POS-NEXT: FEAT_ETE Enable Embedded Trace Extension // NEG_POS-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // NEG_POS-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // NEG_POS-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions // NEG_POS-NEXT: FEAT_TRBE Enable Trace Buffer Extension // NEG_ONLY: Extensions enabled for the given AArch64 target // NEG_ONLY-EMPTY: // NEG_ONLY-NEXT: Architecture Feature(s) Description // NEG_ONLY-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // NEG_ONLY-NEXT: FEAT_ETE Enable Embedded Trace Extension // NEG_ONLY-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // NEG_ONLY-NEXT: FEAT_TRBE Enable Trace Buffer Extension // DISABLE_DEP: Extensions enabled for the given AArch64 target // DISABLE_DEP-EMPTY: // DISABLE_DEP-NEXT: Architecture Feature(s) Description // DISABLE_DEP-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // DISABLE_DEP-NEXT: FEAT_ETE Enable Embedded Trace Extension // DISABLE_DEP-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // DISABLE_DEP-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // DISABLE_DEP-NEXT: FEAT_TRBE Enable Trace Buffer Extension // DISABLE_DEP2: Extensions enabled for the given AArch64 target // DISABLE_DEP2-EMPTY: // DISABLE_DEP2-NEXT: Architecture Feature(s) Description // DISABLE_DEP2-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // DISABLE_DEP2-NEXT: FEAT_ETE Enable Embedded Trace Extension // DISABLE_DEP2-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // DISABLE_DEP2-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // DISABLE_DEP2-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions // DISABLE_DEP2-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions // DISABLE_DEP2-NEXT: FEAT_TRBE Enable Trace Buffer Extension // DISABLE_VIA_XCLANG: Extensions enabled for the given AArch64 target // DISABLE_VIA_XCLANG-EMPTY: // DISABLE_VIA_XCLANG-NEXT: Architecture Feature(s) Description // DISABLE_VIA_XCLANG-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions // DISABLE_VIA_XCLANG-NEXT: FEAT_ETE Enable Embedded Trace Extension // DISABLE_VIA_XCLANG-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions // DISABLE_VIA_XCLANG-NEXT: FEAT_FP16 Enable half-precision floating-point data processing // DISABLE_VIA_XCLANG-NEXT: FEAT_TRBE Enable Trace Buffer Extension #if __ARM_FEATURE_SVE2 #warning "SVE2 is enabled" // expected-warning@-1 {{SVE2 is enabled}} #endif void fn_that_requires_sve2() { __asm__("ldnt1sh z0.s, p0/z, [z1.s]"); // expected-error@-1 {{instruction requires: sve2}} }