Skip to content

Commit 40cc7b4

Browse files
[clang][AArch64] test -cc1 -print-enabled-extensions (#143570)
This adds tests that document how -cc1 and -print-enabled-extensions interact. The current behaviour looks wrong, and is caused by the fact that --print-enabled-extensions uses the MC subtarget feature API to determine the list of extensions to print, whereas the frontend uses the TargetParser API. The latter does no dependency expansion for the -target-feature flags but the MC API does. This doesn't fix anything but at least it documents the current behaviour, and will serve as a pre-commit test for any future fixes.
1 parent 79a72c4 commit 40cc7b4

File tree

1 file changed

+139
-0
lines changed

1 file changed

+139
-0
lines changed
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
// Test how -cc1 -target-feature interacts with -print-enabled-extensions.
2+
// The current behaviour does not look correct, since dependent features are
3+
// removed from the printed list when one of their dependencies are disabled,
4+
// but they are actually still enabled during compilation, and then actually
5+
// disabled for parsing assembly.
6+
7+
// REQUIRES: aarch64-registered-target
8+
9+
// Behaviour with two positive features.
10+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
11+
// RUN: -target-feature +neon -target-feature +sve \
12+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY
13+
14+
// Negative -target-feature disables the extension but keeps any dependencies of it (FEAT_FP16).
15+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
16+
// RUN: -target-feature +neon -target-feature +sve -target-feature -sve \
17+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_NEG
18+
19+
// Disabling then re-enabling a feature is the same as never disabling it.
20+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
21+
// RUN: -target-feature +neon -target-feature -sve -target-feature +sve \
22+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY
23+
24+
// Disabling then re-enabling a feature is the same as never disabling it.
25+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
26+
// RUN: -target-feature +neon -target-feature +sve -target-feature -sve -target-feature +sve \
27+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=POS_ONLY
28+
29+
// Only disabling it is the same as never having enabled it.
30+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
31+
// RUN: -target-feature +neon \
32+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=NEG_ONLY
33+
34+
// Only disabling it is the same as never having enabled it.
35+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
36+
// RUN: -target-feature +neon -target-feature -sve \
37+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=NEG_ONLY
38+
39+
// Disabling a dependency (after enabling the dependent) appears to disable the dependent feature.
40+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
41+
// RUN: -target-feature +sve2 -target-feature -sve \
42+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP
43+
44+
// Disabling a dependency before enabling the dependent appears to have no effect.
45+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
46+
// RUN: -target-feature -sve -target-feature +sve2 \
47+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP2
48+
49+
// Disabling a dependency before enabling the dependent appears to have no effect.
50+
// RUN: %clang_cc1 -triple aarch64-unknown-linux-gnu -print-enabled-extensions \
51+
// RUN: -target-feature +sve2 \
52+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_DEP2
53+
54+
// Driver --print-enabled-extensions indicates that negative -target-features disable dependent features.
55+
// RUN: %clang --target=aarch64 -march=armv8-a+sve2 --print-enabled-extensions \
56+
// RUN: -Xclang -target-feature -Xclang -sve \
57+
// RUN: | FileCheck --strict-whitespace --implicit-check-not=FEAT_ %s --check-prefix=DISABLE_VIA_XCLANG
58+
59+
// However, sve2 is actually enabled in clang but disabled for MC.
60+
// RUN: %clang --target=aarch64 -march=armv8-a+sve2 -c %s \
61+
// RUN: -Xclang -target-feature -Xclang -sve \
62+
// RUN: -Xclang -verify -Xclang -verify-ignore-unexpected=note
63+
64+
65+
// POS_ONLY: Extensions enabled for the given AArch64 target
66+
// POS_ONLY-EMPTY:
67+
// POS_ONLY-NEXT: Architecture Feature(s) Description
68+
// POS_ONLY-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
69+
// POS_ONLY-NEXT: FEAT_ETE Enable Embedded Trace Extension
70+
// POS_ONLY-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
71+
// POS_ONLY-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
72+
// POS_ONLY-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
73+
// POS_ONLY-NEXT: FEAT_TRBE Enable Trace Buffer Extension
74+
75+
// POS_NEG: Extensions enabled for the given AArch64 target
76+
// POS_NEG-EMPTY:
77+
// POS_NEG-NEXT: Architecture Feature(s) Description
78+
// POS_NEG-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
79+
// POS_NEG-NEXT: FEAT_ETE Enable Embedded Trace Extension
80+
// POS_NEG-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
81+
// POS_NEG-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
82+
// POS_NEG-NEXT: FEAT_TRBE Enable Trace Buffer Extension
83+
84+
// NEG_POS: Extensions enabled for the given AArch64 target
85+
// NEG_POS-EMPTY:
86+
// NEG_POS-NEXT: Architecture Feature(s) Description
87+
// NEG_POS-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
88+
// NEG_POS-NEXT: FEAT_ETE Enable Embedded Trace Extension
89+
// NEG_POS-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
90+
// NEG_POS-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
91+
// NEG_POS-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
92+
// NEG_POS-NEXT: FEAT_TRBE Enable Trace Buffer Extension
93+
94+
// NEG_ONLY: Extensions enabled for the given AArch64 target
95+
// NEG_ONLY-EMPTY:
96+
// NEG_ONLY-NEXT: Architecture Feature(s) Description
97+
// NEG_ONLY-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
98+
// NEG_ONLY-NEXT: FEAT_ETE Enable Embedded Trace Extension
99+
// NEG_ONLY-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
100+
// NEG_ONLY-NEXT: FEAT_TRBE Enable Trace Buffer Extension
101+
102+
// DISABLE_DEP: Extensions enabled for the given AArch64 target
103+
// DISABLE_DEP-EMPTY:
104+
// DISABLE_DEP-NEXT: Architecture Feature(s) Description
105+
// DISABLE_DEP-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
106+
// DISABLE_DEP-NEXT: FEAT_ETE Enable Embedded Trace Extension
107+
// DISABLE_DEP-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
108+
// DISABLE_DEP-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
109+
// DISABLE_DEP-NEXT: FEAT_TRBE Enable Trace Buffer Extension
110+
111+
// DISABLE_DEP2: Extensions enabled for the given AArch64 target
112+
// DISABLE_DEP2-EMPTY:
113+
// DISABLE_DEP2-NEXT: Architecture Feature(s) Description
114+
// DISABLE_DEP2-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
115+
// DISABLE_DEP2-NEXT: FEAT_ETE Enable Embedded Trace Extension
116+
// DISABLE_DEP2-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
117+
// DISABLE_DEP2-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
118+
// DISABLE_DEP2-NEXT: FEAT_SVE Enable Scalable Vector Extension (SVE) instructions
119+
// DISABLE_DEP2-NEXT: FEAT_SVE2 Enable Scalable Vector Extension 2 (SVE2) instructions
120+
// DISABLE_DEP2-NEXT: FEAT_TRBE Enable Trace Buffer Extension
121+
122+
// DISABLE_VIA_XCLANG: Extensions enabled for the given AArch64 target
123+
// DISABLE_VIA_XCLANG-EMPTY:
124+
// DISABLE_VIA_XCLANG-NEXT: Architecture Feature(s) Description
125+
// DISABLE_VIA_XCLANG-NEXT: FEAT_AdvSIMD Enable Advanced SIMD instructions
126+
// DISABLE_VIA_XCLANG-NEXT: FEAT_ETE Enable Embedded Trace Extension
127+
// DISABLE_VIA_XCLANG-NEXT: FEAT_FP Enable Armv8.0-A Floating Point Extensions
128+
// DISABLE_VIA_XCLANG-NEXT: FEAT_FP16 Enable half-precision floating-point data processing
129+
// DISABLE_VIA_XCLANG-NEXT: FEAT_TRBE Enable Trace Buffer Extension
130+
131+
#if __ARM_FEATURE_SVE2
132+
#warning "SVE2 is enabled"
133+
// expected-warning@-1 {{SVE2 is enabled}}
134+
#endif
135+
136+
void fn_that_requires_sve2() {
137+
__asm__("ldnt1sh z0.s, p0/z, [z1.s]");
138+
// expected-error@-1 {{instruction requires: sve2}}
139+
}

0 commit comments

Comments
 (0)