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