Skip to content

Commit f528a80

Browse files
[Arm] Add more -mtp=cp15 tests (llvm#134098)
This patch systematically covers all -mtp=cp15 behaviour options for better code coverage.
1 parent e4f76e3 commit f528a80

File tree

1 file changed

+93
-93
lines changed

1 file changed

+93
-93
lines changed
Lines changed: 93 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,93 @@
1-
// Test of the AArch32 values of -mtp=, checking that each one maps to
2-
// the right target features.
3-
4-
// RUN: %clang --target=armv7-linux -mtp=cp15 -### -S %s 2>&1 | \
5-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER-HARD %s
6-
// ARMv7_THREAD_POINTER-HARD: "-target-feature" "+read-tp-tpidruro"
7-
8-
// RUN: %clang --target=armv7-linux -mtp=tpidruro -### -S %s 2>&1 | \
9-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER-HARD %s
10-
// RUN: %clang --target=armv7-linux -mtp=tpidrurw -### -S %s 2>&1 | \
11-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER-TPIDRURW %s
12-
// ARMv7_THREAD_POINTER-TPIDRURW: "-target-feature" "+read-tp-tpidrurw"
13-
// RUN: %clang --target=armv7-linux -mtp=tpidrprw -### -S %s 2>&1 | \
14-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER-TPIDRPRW %s
15-
// ARMv7_THREAD_POINTER-TPIDRPRW: "-target-feature" "+read-tp-tpidrprw"
16-
17-
// RUN: %clang --target=armv6k-linux -mtp=cp15 -### -S %s 2>&1 | \
18-
// RUN: FileCheck -check-prefix=ARM_THREAD_POINTER-HARD %s
19-
// ARM_THREAD_POINTER-HARD: "-target-feature" "+read-tp-tpidruro"
20-
21-
// RUN: %clang --target=armv6k-linux -mtp=auto -### -S %s 2>&1 | \
22-
// RUN: FileCheck -check-prefix=ARM_THREAD_POINTER_AUTO %s
23-
// ARM_THREAD_POINTER_AUTO-NOT: "-target-feature" "+read-tp-tpidruro"
24-
25-
// RUN: %clang --target=thumbv6k-apple-darwin -### -S %s 2>&1 | \
26-
// RUN: FileCheck -check-prefix=THUMBv6_THREAD_POINTER_NO_AUTO %s
27-
// THUMBv6_THREAD_POINTER_NO_AUTO-NOT: "-target-feature" "+read-tp-tpidruro"
28-
29-
// RUN: not %clang --target=thumbv6k-apple-darwin -mtp=cp15 -### -S %s 2>&1 | \
30-
// RUN: FileCheck -check-prefix=THUMBv6_THREAD_POINTER_NO_HARD %s
31-
// THUMBv6_THREAD_POINTER_NO_HARD: unsupported option '-mtp=' for target 'thumbv6k-apple-darwin'
32-
33-
// RUN: not %clang --target=thumbv6t2-linux -mtp=cp15 -### -S %s 2>&1 | \
34-
// RUN: FileCheck -check-prefix=ARM_THREAD_POINTER_NO_HARD %s
35-
// ARM_THREAD_POINTER_NO_HARD: hardware TLS register is not supported for the armv6t2 sub-architecture
36-
37-
// RUN: %clang --target=armv5t-linux -mtp=cp15 -x assembler -### %s 2>&1 | \
38-
// RUN: FileCheck -check-prefix=ARMv5_THREAD_POINTER_ASSEMBLER %s
39-
// ARMv5_THREAD_POINTER_ASSEMBLER-NOT: hardware TLS register is not supported for the armv5 sub-architecture
40-
41-
// RUN: not %clang --target=armv6-linux -mthumb -mtp=cp15 -### -S %s 2>&1 | \
42-
// RUN: FileCheck -check-prefix=THUMBv6_THREAD_POINTER_UNSUPP %s
43-
// RUN: not %clang --target=thumbv6-linux -mthumb -mtp=cp15 -### -S %s 2>&1 | \
44-
// RUN: FileCheck -check-prefix=THUMBv6_THREAD_POINTER_UNSUPP %s
45-
// THUMBv6_THREAD_POINTER_UNSUPP: hardware TLS register is not supported for the thumbv6 sub-architecture
46-
47-
// RUN: %clang --target=armv7-linux -mtp=soft -### -S %s 2>&1 | \
48-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER_SOFT %s
49-
// ARMv7_THREAD_POINTER_SOFT-NOT: "-target-feature" "+read-tp-tpidruro"
50-
51-
// RUN: %clang --target=armv7-linux -### -S %s 2>&1 | \
52-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER_NON %s
53-
// ARMv7_THREAD_POINTER_NON: "-target-feature" "+read-tp-tpidruro"
54-
55-
// RUN: %clang --target=armv7-linux -mtp=auto -### -S %s 2>&1 | \
56-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER_Auto %s
57-
// ARMv7_THREAD_POINTER_Auto: "-target-feature" "+read-tp-tpidruro"
58-
59-
// RUN: %clang --target=armv7-linux -mtp=cp15 -### -S %s 2>&1 | \
60-
// RUN: FileCheck -check-prefix=ARMv7_THREAD_POINTER_HARD %s
61-
// ARMv7_THREAD_POINTER_HARD: "-target-feature" "+read-tp-tpidruro"
62-
63-
// RUN: %clang --target=armv7m-linux -mtp=auto -### -S %s 2>&1 | \
64-
// RUN: FileCheck -check-prefix=ARMv7m_THREAD_POINTER_Auto %s
65-
// ARMv7m_THREAD_POINTER_Auto-NOT: "-target-feature" "+read-tp-tpidruro"
66-
67-
// RUN: not %clang --target=armv7m-linux -mtp=cp15 -### -S %s 2>&1 | \
68-
// RUN: FileCheck -check-prefix=ARMv7m_THREAD_POINTER_HARD %s
69-
// ARMv7m_THREAD_POINTER_HARD: hardware TLS register is not supported for the thumbv7m sub-architecture
70-
71-
// RUN: %clang --target=armv5t-linux -mtp=auto -### -S %s 2>&1 | \
72-
// RUN: FileCheck -check-prefix=ARMv5t_THREAD_POINTER_Auto %s
73-
// ARMv5t_THREAD_POINTER_Auto-NOT: "-target-feature" "+read-tp-tpidruro"
74-
75-
// RUN: %clang --target=armv6k-linux -mtp=cp15 -### -S %s 2>&1 | \
76-
// RUN: FileCheck -check-prefix=ARMv6k_THREAD_POINTER_Auto %s
77-
// ARMv6k_THREAD_POINTER_Auto: "-target-feature" "+read-tp-tpidruro"
78-
79-
// RUN: not %clang --target=armv6t2-linux -mtp=cp15 -### -S %s 2>&1 | \
80-
// RUN: FileCheck -check-prefix=ARMv6t2_THREAD_POINTER_HARD %s
81-
// ARMv6t2_THREAD_POINTER_HARD: hardware TLS register is not supported for the armv6t2 sub-architecture
82-
83-
// RUN: %clang --target=armv6t2-linux -mtp=auto -### -S %s 2>&1 | \
84-
// RUN: FileCheck -check-prefix=ARMV6t2_THREAD_POINTER_AUTO %s
85-
// ARMV6t2_THREAD_POINTER_AUTO-NOT: "-target-feature" "+read-tp-tpidruro"
86-
87-
// RUN: %clang --target=armv6kz-linux -mtp=cp15 -### -S %s 2>&1 | \
88-
// RUN: FileCheck -check-prefix=ARMv6kz_THREAD_POINTER_HARD %s
89-
// ARMv6kz_THREAD_POINTER_HARD: "-target-feature" "+read-tp-tpidruro"
90-
91-
// RUN: %clang --target=armv6kz-linux -mtp=auto -### -S %s 2>&1 | \
92-
// RUN: FileCheck -check-prefix=ARMV6KZ_THREAD_POINTER_AUTO %s
93-
// ARMV6KZ_THREAD_POINTER_AUTO-NOT: "-target-feature" "+read-tp-tpidruro"
1+
// This file tests the -mtp=<mode> functionality in Clang’s ARM driver.
2+
// It verifies:
3+
//
4+
// 1. ARMv7 targets: explicit hardware modes, explicit soft mode, and auto mode.
5+
// 2. M Profile variants: explicit hardware mode should fail and auto mode defaults to soft.
6+
// 3. ARMv6 variants: explicit hardware modes on ARMv6K/KZ work, but auto mode falls back to soft when Thumb2 is missing.
7+
// 4. ARMv5 variants: explicit hardware mode is rejected and auto mode defaults to soft.
8+
// 5. Miscellaneous error cases (e.g. empty -mtp value).
9+
//
10+
//===----------------------------------------------------------------------===//
11+
12+
//===----------------------------------------------------------------------===//
13+
// 1. ARMv7 Targets
14+
//===----------------------------------------------------------------------===//
15+
16+
// Test explicit hardware mode using "tpidrprw" on an ARMv7 target.
17+
// RUN: %clang --target=armv7-linux -mtp=tpidrprw -### -S %s 2>&1 | FileCheck -check-prefix=ARMv7_TPIDRPRW %s
18+
// ARMv7_TPIDRPRW: "-target-feature" "+read-tp-tpidrprw"
19+
20+
// Test explicit hardware mode using "tpidrurw" on an ARMv7 target.
21+
// RUN: %clang --target=armv7-linux -mtp=tpidrurw -### -S %s 2>&1 | FileCheck -check-prefix=ARMv7_TPIDRURW %s
22+
// ARMv7_TPIDRURW: "-target-feature" "+read-tp-tpidrurw"
23+
24+
// Test explicit hardware mode using "tpidruro" on an ARMv7 target.
25+
// RUN: %clang --target=armv7-linux -mtp=tpidruro -### -S %s 2>&1 | FileCheck -check-prefix=ARMv7_TPIDRURO %s
26+
// ARMv7_TPIDRURO: "-target-feature" "+read-tp-tpidruro"
27+
28+
// Test explicit "soft" mode on an ARMv7 target (forces software mode).
29+
// RUN: %clang --target=armv7-linux -mtp=soft -### -S %s 2>&1 | FileCheck -check-prefix=ARM_Soft %s
30+
// ARM_Soft-NOT: "-target-feature" "+read-tp-"
31+
32+
// Test auto mode on an ARMv7 target (hardware support and Thumb2 yield HW mode).
33+
// RUN: %clang --target=armv7-linux -mtp=auto -### -S %s 2>&1 | FileCheck -check-prefix=ARMv7_Auto %s
34+
// Default mode is implicitly -mtp=auto
35+
// RUN: %clang --target=armv7-linux -### -S %s 2>&1 | FileCheck -check-prefix=ARMv7_Auto %s
36+
// ARMv7_Auto: "-target-feature" "+read-tp-tpidruro"
37+
38+
//===----------------------------------------------------------------------===//
39+
// 2. M Profile Variants (e.g. thumbv6t2)
40+
//===----------------------------------------------------------------------===//
41+
42+
// Test explicit hardware mode on a M Profile target: thumbv6t2 does not support CP15.
43+
// RUN: not %clang --target=thumbv6t2-linux -mtp=cp15 -### -S %s 2>&1 | FileCheck -check-prefix=Thumbv6t2_Error %s
44+
// Thumbv6t2_Error: error: hardware TLS register is not supported for the armv6t2 sub-architecture
45+
46+
// Test auto mode on a M Profile target: should default to soft mode.
47+
// RUN: %clang --target=thumbv6t2-linux -mtp=auto -### -S %s 2>&1 | FileCheck -check-prefix=Thumbv6t2_Auto %s
48+
// Thumbv6t2_Auto-NOT: "-target-feature" "+read-tp-"
49+
50+
51+
//===----------------------------------------------------------------------===//
52+
// 3. ARMv6 Variants
53+
//===----------------------------------------------------------------------===//
54+
55+
// Test explicit hardware mode using "cp15" on an ARMv6K and ARMv6KZ targets.
56+
// RUN: %clang --target=armv6k-linux -mtp=cp15 -### -S %s 2>&1 | FileCheck -check-prefix=ARMv6k_Cp15 %s
57+
// RUN: %clang --target=armv6kz-linux -mtp=cp15 -### -S %s 2>&1 | FileCheck -check-prefix=ARMv6k_Cp15 %s
58+
// ARMv6k_Cp15: "-target-feature" "+read-tp-tpidruro"
59+
60+
61+
// Test auto mode on ARMv6K and ARMv6KZ targets: defaults to soft mode due to missing Thumb2 encoding.
62+
// RUN: %clang --target=armv6k-linux -mtp=auto -### -S %s 2>&1 | FileCheck -check-prefix=ARMv6k_Auto %s
63+
// RUN: %clang --target=armv6kz-linux -mtp=auto -### -S %s 2>&1 | FileCheck -check-prefix=ARMv6k_Auto %s
64+
// ARMv6k_Auto-NOT: "-target-feature" "+read-tp-"
65+
66+
67+
//===----------------------------------------------------------------------===//
68+
// 4. ARMv5 Variants
69+
//===----------------------------------------------------------------------===//
70+
71+
// Test explicit hardware mode on an ARMv5T target: hardware TP is not supported.
72+
// RUN: not %clang --target=armv5t-linux -mtp=cp15 -### -S %s 2>&1 | FileCheck -check-prefix=ARMv5t_Error %s
73+
// ARMv5t_Error: error: hardware TLS register is not supported for the armv5 sub-architecture
74+
75+
// Test auto mode on an ARMv5T target: should default to soft mode.
76+
// RUN: %clang --target=armv5t-linux -mtp=auto -### -S %s 2>&1 | FileCheck -check-prefix=ARMv5t_Auto %s
77+
// ARMv5t_Auto-NOT: "-target-feature" "+read-tp-"
78+
79+
//===----------------------------------------------------------------------===//
80+
// 5. Miscellaneous Tests
81+
//===----------------------------------------------------------------------===//
82+
83+
// Test empty -mtp value on an ARMv7 target: should produce a missing argument error.
84+
// RUN: not %clang --target=armv7-linux -mtp= -### -S %s 2>&1 | FileCheck -check-prefix=Empty_MTP %s
85+
// Empty_MTP: error: {{.*}}missing
86+
87+
// Test explicit hardware mode in assembler mode on an unsupporting target does not fail with error
88+
// RUN: %clang --target=thumbv6t2-linux -mtp=cp15 -x assembler -### %s 2>&1 | FileCheck -check-prefix=Thumbv6t2_Asm %s
89+
// Thumbv6t2_Asm-NOT: "-target-feature" "+read-tp-"
90+
91+
// A dummy main is provided to form a valid translation unit.
92+
int main(void) { return 0; }
93+

0 commit comments

Comments
 (0)