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