140 lines
9.6 KiB
C
140 lines
9.6 KiB
C
// 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}}
|
|
}
|