1 // Test that different values of -mfpu pick correct ARM FPU target-feature(s).
2 
3 // RUN: %clang -target arm-linux-eabi %s -### -o %t.o 2>&1 \
4 // RUN:   | FileCheck --check-prefix=CHECK-DEFAULT %s
5 // CHECK-DEFAULT-NOT: "-target-feature" "+soft-float"
6 // CHECK-DEFAULT-DAG: "-target-feature" "+soft-float-abi"
7 // CHECK-DEFAULT-NOT: "-target-feature" "+vfp2"
8 // CHECK-DEFAULT-NOT: "-target-feature" "+vfp3"
9 // CHECK-DEFAULT-NOT: "-target-feature" "+neon"
10 
11 // RUN: %clang -target arm-linux-eabi -mfpu=fpa %s -### -o %t.o 2>&1 \
12 // RUN:   | FileCheck --check-prefix=CHECK-FPA %s
13 // RUN: %clang -target arm-linux-eabi -mfpu=fpe2 %s -### -o %t.o 2>&1 \
14 // RUN:   | FileCheck --check-prefix=CHECK-FPA %s
15 // RUN: %clang -target arm-linux-eabi -mfpu=fpe3 %s -### -o %t.o 2>&1 \
16 // RUN:   | FileCheck --check-prefix=CHECK-FPA %s
17 // RUN: %clang -target arm-linux-eabi -mfpu=maverick %s -### -o %t.o 2>&1 \
18 // RUN:   | FileCheck --check-prefix=CHECK-FPA %s
19 // CHECK-FPA: error: {{.*}} does not support '-mfpu={{fpa|fpe|fpe2|fpe3|maverick}}'
20 
21 // RUN: %clang -target arm-linux-eabi -mfpu=vfp %s -### -o %t.o 2>&1 \
22 // RUN:   | FileCheck --check-prefix=CHECK-VFP %s
23 // RUN: %clang -target arm-linux-eabi -mfpu=vfp %s -mfloat-abi=soft -### -o %t.o 2>&1 \
24 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-2 %s
25 // CHECK-VFP-NOT: "-target-feature" "+soft-float"
26 // CHECK-VFP-DAG: "-target-feature" "+soft-float-abi"
27 // CHECK-VFP-DAG: "-target-feature" "+vfp2"
28 // CHECK-VFP-DAG: "-target-feature" "-vfp3d16sp"
29 // CHECK-VFP-DAG: "-target-feature" "-vfp4d16sp"
30 // CHECK-VFP-DAG: "-target-feature" "-fp-armv8d16sp"
31 // CHECK-VFP-DAG: "-target-feature" "-neon"
32 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "+soft-float-abi"
33 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-vfp3d16sp"
34 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-vfp4d16sp"
35 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-fp-armv8d16sp"
36 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-neon"
37 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-crypto"
38 // CHECK-SOFT-ABI-FP-2-DAG: "-target-feature" "-vfp2sp"
39 
40 // RUN: %clang -target arm-linux-eabi -mfpu=vfp3 %s -### -o %t.o 2>&1 \
41 // RUN:   | FileCheck --check-prefix=CHECK-VFP3 %s
42 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3 %s -### -o %t.o 2>&1 \
43 // RUN:   | FileCheck --check-prefix=CHECK-VFP3 %s
44 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
45 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
46 // CHECK-VFP3-NOT: "-target-feature" "+soft-float"
47 // CHECK-VFP3-DAG: "-target-feature" "+soft-float-abi"
48 // CHECK-VFP3-DAG: "-target-feature" "+vfp3"
49 // CHECK-VFP3-DAG: "-target-feature" "-vfp4d16sp"
50 // CHECK-VFP3-DAG: "-target-feature" "-fp-armv8d16sp"
51 // CHECK-VFP3-DAG: "-target-feature" "-neon"
52 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "+soft-float-abi"
53 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-vfp2sp"
54 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-vfp4d16sp"
55 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-fp-armv8d16sp"
56 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-neon"
57 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-crypto"
58 // CHECK-SOFT-ABI-FP-3-DAG: "-target-feature" "-vfp3d16sp"
59 
60 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-fp16 %s -### -o %t.o 2>&1 \
61 // RUN:   | FileCheck --check-prefix=CHECK-VFP3-FP16 %s
62 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-fp16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
63 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
64 // CHECK-VFP3-FP16-NOT: "-target-feature" "+soft-float"
65 // CHECK-VFP3-FP16-DAG: "-target-feature" "+soft-float-abi"
66 // CHECK-VFP3-FP16-DAG: "-target-feature" "+vfp3"
67 // CHECK-VFP3-FP16-DAG: "-target-feature" "+fp16"
68 // CHECK-VFP3-FP16-DAG: "-target-feature" "-vfp4d16sp"
69 // CHECK-VFP3-FP16-DAG: "-target-feature" "-fp-armv8d16sp"
70 // CHECK-VFP3-FP16-DAG: "-target-feature" "+fp64"
71 // CHECK-VFP3-FP16-DAG: "-target-feature" "+d32"
72 // CHECK-VFP3-FP16-DAG: "-target-feature" "-neon"
73 // CHECK-VFP3-FP16-DAG: "-target-feature" "-crypto"
74 
75 // RUN: %clang -target arm-linux-eabi -mfpu=vfp3-d16 %s -### -o %t.o 2>&1 \
76 // RUN:   | FileCheck --check-prefix=CHECK-VFP3-D16 %s
77 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-d16 %s -### -o %t.o 2>&1 \
78 // RUN:   | FileCheck --check-prefix=CHECK-VFP3-D16 %s
79 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-d16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
80 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
81 // CHECK-VFP3-D16-NOT: "-target-feature" "+soft-float"
82 // CHECK-VFP3-D16-DAG: "-target-feature" "+soft-float-abi"
83 // CHECK-VFP3-D16-DAG: "-target-feature" "+vfp3d16"
84 // CHECK-VFP3-D16-DAG: "-target-feature" "-vfp4d16sp"
85 // CHECK-VFP3-D16-DAG: "-target-feature" "-fp-armv8d16sp"
86 // CHECK-VFP3-D16-DAG: "-target-feature" "+fp64"
87 // CHECK-VFP3-D16-DAG: "-target-feature" "-d32"
88 // CHECK-VFP3-D16-DAG: "-target-feature" "-neon"
89 
90 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-d16-fp16 %s -### -o %t.o 2>&1 \
91 // RUN:   | FileCheck --check-prefix=CHECK-VFP3-D16-FP16 %s
92 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3-d16-fp16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
93 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
94 // CHECK-VFP3-D16-FP16-NOT: "-target-feature" "+soft-float"
95 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "+soft-float-abi"
96 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "+vfp3d16"
97 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "+fp16"
98 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "-vfp4d16sp"
99 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "-fp-armv8d16sp"
100 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "+fp64"
101 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "-d32"
102 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "-neon"
103 // CHECK-VFP3-D16-FP16-DAG: "-target-feature" "-crypto"
104 
105 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3xd %s -### -o %t.o 2>&1 \
106 // RUN:   | FileCheck --check-prefix=CHECK-VFP3XD %s
107 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3xd -mfloat-abi=soft %s -### -o %t.o 2>&1 \
108 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
109 // CHECK-VFP3XD-NOT: "-target-feature" "+soft-float"
110 // CHECK-VFP3XD-DAG: "-target-feature" "+soft-float-abi"
111 // CHECK-VFP3XD-DAG: "-target-feature" "-fp64"
112 // CHECK-VFP3XD-DAG: "-target-feature" "-d32"
113 // CHECK-VFP3XD-DAG: "-target-feature" "+vfp3d16sp"
114 // CHECK-VFP3XD-DAG: "-target-feature" "-fp16"
115 // CHECK-VFP3XD-DAG: "-target-feature" "-vfp4d16sp"
116 // CHECK-VFP3XD-DAG: "-target-feature" "-fp-armv8d16sp"
117 // CHECK-VFP3XD-DAG: "-target-feature" "-neon"
118 // CHECK-VFP3XD-DAG: "-target-feature" "-crypto"
119 
120 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3xd-fp16 %s -### -o %t.o 2>&1 \
121 // RUN:   | FileCheck --check-prefix=CHECK-VFP3XD-FP16 %s
122 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv3xd-fp16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
123 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-3 %s
124 // CHECK-VFP3XD-FP16-NOT: "-target-feature" "+soft-float"
125 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "+soft-float-abi"
126 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "+vfp3d16sp"
127 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "+fp16"
128 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-vfp4d16sp"
129 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-fp-armv8d16sp"
130 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-fp64"
131 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-d32"
132 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-neon"
133 // CHECK-VFP3XD-FP16-DAG: "-target-feature" "-crypto"
134 
135 // RUN: %clang -target arm-linux-eabi -mfpu=vfp4 %s -### -o %t.o 2>&1 \
136 // RUN:   | FileCheck --check-prefix=CHECK-VFP4 %s
137 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv4 %s -### -o %t.o 2>&1 \
138 // RUN:   | FileCheck --check-prefix=CHECK-VFP4 %s
139 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv4 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
140 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-4 %s
141 // CHECK-VFP4-NOT: "-target-feature" "+soft-float"
142 // CHECK-VFP4-DAG: "-target-feature" "+soft-float-abi"
143 // CHECK-VFP4-DAG: "-target-feature" "+vfp4"
144 // CHECK-VFP4-DAG: "-target-feature" "-fp-armv8d16sp"
145 // CHECK-VFP4-DAG: "-target-feature" "-neon"
146 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "+soft-float-abi"
147 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-vfp2sp"
148 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-vfp3d16sp"
149 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-fp-armv8d16sp"
150 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-neon"
151 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-crypto"
152 // CHECK-SOFT-ABI-FP-4-DAG: "-target-feature" "-vfp4d16sp"
153 
154 // RUN: %clang -target arm-linux-eabi -mfpu=vfp4-d16 %s -### -o %t.o 2>&1 \
155 // RUN:   | FileCheck --check-prefix=CHECK-VFP4-D16 %s
156 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv4-d16 %s -### -o %t.o 2>&1 \
157 // RUN:   | FileCheck --check-prefix=CHECK-VFP4-D16 %s
158 // RUN: %clang -target arm-linux-eabi -mfpu=vfpv4-d16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
159 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-4 %s
160 // CHECK-VFP4-D16-NOT: "-target-feature" "+soft-float"
161 // CHECK-VFP4-D16-DAG: "-target-feature" "+soft-float-abi"
162 // CHECK-VFP4-D16-DAG: "-target-feature" "+vfp4d16"
163 // CHECK-VFP4-D16-DAG: "-target-feature" "-fp-armv8d16sp"
164 // CHECK-VFP4-D16-DAG: "-target-feature" "+fp64"
165 // CHECK-VFP4-D16-DAG: "-target-feature" "-d32"
166 // CHECK-VFP4-D16-DAG: "-target-feature" "-neon"
167 
168 // RUN: %clang -target arm-linux-eabi -mfpu=fp4-sp-d16 %s -### -o %t.o 2>&1 \
169 // RUN:   | FileCheck --check-prefix=CHECK-FP4-SP-D16 %s
170 // RUN: %clang -target arm-linux-eabi -mfpu=fpv4-sp-d16 %s -### -o %t.o 2>&1 \
171 // RUN:   | FileCheck --check-prefix=CHECK-FP4-SP-D16 %s
172 // RUN: %clang -target arm-linux-eabi -mfpu=fpv4-sp-d16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
173 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-4 %s
174 // CHECK-FP4-SP-D16-NOT: "-target-feature" "+soft-float"
175 // CHECK-FP4-SP-D16-DAG: "-target-feature" "+soft-float-abi"
176 // CHECK-FP4-SP-D16-DAG: "-target-feature" "+vfp4d16sp"
177 // CHECK-FP4-SP-D16-DAG: "-target-feature" "-fp-armv8d16sp"
178 // CHECK-FP4-SP-D16-DAG: "-target-feature" "-fp64"
179 // CHECK-FP4-SP-D16-DAG: "-target-feature" "-d32"
180 // CHECK-FP4-SP-D16-DAG: "-target-feature" "-neon"
181 
182 // RUN: %clang -target arm-linux-eabi -mfpu=fp5-sp-d16 %s -### -o %t.o 2>&1 \
183 // RUN:   | FileCheck --check-prefix=CHECK-FP5-SP-D16 %s
184 // RUN: %clang -target arm-linux-eabi -mfpu=fpv5-sp-d16 %s -### -o %t.o 2>&1 \
185 // RUN:   | FileCheck --check-prefix=CHECK-FP5-SP-D16 %s
186 // RUN: %clang -target arm-linux-eabi -mfpu=fp-armv8-sp-d16 -mfloat-abi=soft %s -### -o %t.o \
187 // RUN:   2>&1 | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
188 // CHECK-FP5-SP-D16-NOT: "-target-feature" "+soft-float"
189 // CHECK-FP5-SP-D16-DAG: "-target-feature" "+soft-float-abi"
190 // CHECK-FP5-SP-D16-DAG: "-target-feature" "+fp-armv8d16sp"
191 // CHECK-FP5-SP-D16-DAG: "-target-feature" "-neon"
192 // CHECK-FP5-SP-D16-DAG: "-target-feature" "-fp64"
193 // CHECK-FP5-SP-D16-DAG: "-target-feature" "-d32"
194 // CHECK-FP5-SP-D16-DAG: "-target-feature" "-crypto"
195 
196 // RUN: %clang -target arm-linux-eabi -mfpu=fp5-dp-d16 %s -### -o %t.o 2>&1 \
197 // RUN:   | FileCheck --check-prefix=CHECK-FP5-DP-D16 %s
198 // RUN: %clang -target arm-linux-eabi -mfpu=fpv5-dp-d16 %s -### -o %t.o 2>&1 \
199 // RUN:   | FileCheck --check-prefix=CHECK-FP5-DP-D16 %s
200 // RUN: %clang -target arm-linux-eabi -mfpu=fpv5-dp-d16 %s -mfloat-abi=soft -### -o %t.o 2>&1 \
201 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-5 %s
202 // CHECK-FP5-DP-D16-NOT: "-target-feature" "+soft-float"
203 // CHECK-FP5-DP-D16-DAG: "-target-feature" "+soft-float-abi"
204 // CHECK-FP5-DP-D16-DAG: "-target-feature" "+fp-armv8d16"
205 // CHECK-FP5-DP-D16-DAG: "-target-feature" "+fp64"
206 // CHECK-FP5-DP-D16-DAG: "-target-feature" "-d32"
207 // CHECK-FP5-DP-D16-DAG: "-target-feature" "-neon"
208 // CHECK-FP5-DP-D16-DAG: "-target-feature" "-crypto"
209 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "+soft-float"
210 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "+soft-float-abi"
211 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-vfp2sp"
212 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-vfp3d16sp"
213 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-vfp4d16sp"
214 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-neon"
215 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-crypto"
216 // CHECK-SOFT-ABI-FP-5-DAG: "-target-feature" "-fp-armv8d16sp"
217 
218 // RUN: %clang -target arm-linux-eabi -mfpu=neon %s -### -o %t.o 2>&1 \
219 // RUN:   | FileCheck --check-prefix=CHECK-NEON %s
220 // RUN: %clang -target arm-linux-eabi -mfpu=neon -mfloat-abi=soft %s -### -o %t.o 2>&1 \
221 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-6 %s
222 // CHECK-NEON-NOT: "-target-feature" "+soft-float"
223 // CHECK-NEON-DAG: "-target-feature" "+neon"
224 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "+soft-float-abi"
225 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-vfp2sp"
226 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-vfp4d16sp"
227 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-fp-armv8d16sp"
228 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-crypto"
229 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-vfp3d16sp"
230 // CHECK-SOFT-ABI-FP-6-DAG: "-target-feature" "-neon"
231 
232 // RUN: %clang -target arm-linux-eabi -mfpu=neon-fp16 %s -### -o %t.o 2>&1 \
233 // RUN:   | FileCheck --check-prefix=CHECK-NEON-FP16 %s
234 // RUN: %clang -target arm-linux-eabi -mfpu=neon-fp16 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
235 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-6 %s
236 // CHECK-NEON-FP16-NOT: "-target-feature" "+soft-float"
237 // CHECK-NEON-FP16-DAG: "-target-feature" "+soft-float-abi"
238 // CHECK-NEON-FP16-DAG: "-target-feature" "+vfp3"
239 // CHECK-NEON-FP16-DAG: "-target-feature" "+fp16"
240 // CHECK-NEON-FP16-DAG: "-target-feature" "-vfp4d16sp"
241 // CHECK-NEON-FP16-DAG: "-target-feature" "-fp-armv8d16sp"
242 // CHECK-NEON-FP16-DAG: "-target-feature" "+fp64"
243 // CHECK-NEON-FP16-DAG: "-target-feature" "+d32"
244 // CHECK-NEON-FP16-DAG: "-target-feature" "+neon"
245 // CHECK-NEON-FP16-DAG: "-target-feature" "-crypto"
246 
247 // RUN: %clang -target arm-linux-eabi -mfpu=neon-vfpv3 %s -### -o %t.o 2>&1 \
248 // RUN:   | FileCheck --check-prefix=CHECK-NEON-VFPV3 %s
249 // RUN: %clang -target arm-linux-eabi -mfpu=neon-vfpv3 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
250 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-6 %s
251 // CHECK-NEON-VFPV3-NOT: "-target-feature" "+soft-float"
252 // CHECK-NEON-VFPV3-DAG: "-target-feature" "+soft-float-abi"
253 // CHECK-NEON-VFPV3-DAG: "-target-feature" "+vfp3"
254 // CHECK-NEON-VFPV3-DAG: "-target-feature" "+neon"
255 
256 // RUN: %clang -target arm-linux-eabi -mfpu=neon-vfpv4 %s -### -o %t.o 2>&1 \
257 // RUN:   | FileCheck --check-prefix=CHECK-NEON-VFPV4 %s
258 // RUN: %clang -target arm-linux-eabi -mfpu=neon-vfpv4 -mfloat-abi=soft %s -### -o %t.o 2>&1 \
259 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-7 %s
260 // CHECK-NEON-VFPV4-NOT: "-target-feature" "+soft-float"
261 // CHECK-NEON-VFPV4-DAG: "-target-feature" "+soft-float-abi"
262 // CHECK-NEON-VFPV4-DAG: "-target-feature" "+vfp4"
263 // CHECK-NEON-VFPV4-DAG: "-target-feature" "+neon"
264 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "+soft-float-abi"
265 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-vfp2sp"
266 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-vfp3d16sp"
267 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-fp-armv8d16sp"
268 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-crypto"
269 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-vfp4d16sp"
270 // CHECK-SOFT-ABI-FP-7-DAG: "-target-feature" "-neon"
271 
272 // RUN: %clang -target arm-linux-eabi -msoft-float %s -### -o %t.o 2>&1 \
273 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
274 // RUN: %clang -target armv8 %s -### 2>&1 \
275 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
276 // RUN: %clang -target armv8a -mfpu=neon %s -### -c 2>&1 \
277 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP-8 %s
278 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "+soft-float-abi"
279 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-vfp2sp"
280 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-vfp4d16sp"
281 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-fp-armv8d16sp"
282 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-crypto"
283 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-vfp3d16sp"
284 // CHECK-SOFT-ABI-FP-8-DAG: "-target-feature" "-neon"
285 
286 // RUN: %clang -target armv8 -mfpu=fp-armv8 %s -### 2>&1 \
287 // RUN:   | FileCheck --check-prefix=CHECK-ARMV8-SOFT-FLOAT %s
288 // CHECK-ARMV8-SOFT-FLOAT-DAG: "-target-feature" "+soft-float"
289 // CHECK-ARMV8-SOFT-FLOAT-DAG: "-target-feature" "+soft-float-abi"
290 // NOT-CHECK-ARMV8-SOFT-FLOAT: "-target-feature" "+fp-armv8"
291 // CHECK-ARMV9-SOFT-FLOAT-DAG: "-target-feature" "-neon"
292 // CHECK-ARMV8-SOFT-FLOAT-DAG: "-target-feature" "-crypto"
293 
294 // RUN: %clang -target armv8-linux-gnueabihf -mfpu=fp-armv8 %s -### 2>&1 \
295 // RUN:   | FileCheck --check-prefix=CHECK-FP-ARMV8 %s
296 // CHECK-FP-ARMV8-NOT: "-target-feature" "+soft-float"
297 // CHECK-FP-ARMV8-NOT: "-target-feature" "+soft-float-abi"
298 // CHECK-FP-ARMV8-DAG: "-target-feature" "+fp-armv8"
299 // CHECK-FP-ARMV8-DAG: "-target-feature" "-neon"
300 // CHECK-FP-ARMV8-DAG: "-target-feature" "-crypto"
301 
302 // RUN: %clang -target armv8-linux-gnueabihf -mfpu=neon-fp-armv8 %s -### 2>&1 \
303 // RUN:   | FileCheck --check-prefix=CHECK-NEON-FP-ARMV8 %s
304 // CHECK-NEON-FP-ARMV8-NOT: "-target-feature" "+soft-float"
305 // CHECK-NEON-FP-ARMV8-NOT: "-target-feature" "+soft-float-abi"
306 // CHECK-NEON-FP-ARMV8-DAG: "-target-feature" "+fp-armv8"
307 // CHECK-NEON-FP-ARMV8-DAG: "-target-feature" "+neon"
308 // CHECK-NEON-FP-ARMV8-DAG: "-target-feature" "-crypto"
309 
310 // RUN: %clang -target armv8-linux-gnueabihf -mfpu=crypto-neon-fp-armv8 %s -### 2>&1 \
311 // RUN:   | FileCheck --check-prefix=CHECK-CRYPTO-NEON-FP-ARMV8 %s
312 // CHECK-CRYPTO-NEON-FP-ARMV8-NOT: "-target-feature" "+soft-float"
313 // CHECK-CRYPTO-NEON-FP-ARMV8-NOT: "-target-feature" "+soft-float-abi"
314 // CHECK-CRYPTO-NEON-FP-ARMV8-DAG: "-target-feature" "+fp-armv8"
315 // CHECK-CRYPTO-NEON-FP-ARMV8-DAG: "-target-feature" "+crypto"
316 
317 // RUN: %clang -target armv8-linux-gnueabi -mfpu=none %s -### 2>&1 \
318 // RUN:   | FileCheck --check-prefix=CHECK-NO-FP %s
319 // CHECK-NO-FP-NOT: "-target-feature" "+soft-float"
320 // CHECK-NO-FP-DAG: "-target-feature" "+soft-float-abi"
321 // CHECK-NO-FP-DAG: "-target-feature" "-fpregs"
322 // CHECK-NO-FP-DAG: "-target-feature" "-vfp2sp"
323 // CHECK-NO-FP-DAG: "-target-feature" "-vfp3d16sp"
324 // CHECK-NO-FP-DAG: "-target-feature" "-vfp4d16sp"
325 // CHECK-NO-FP-DAG: "-target-feature" "-fp-armv8d16sp"
326 // CHECK-NO-FP-DAG: "-target-feature" "-fp64"
327 // CHECK-NO-FP-DAG: "-target-feature" "-d32"
328 // CHECK-NO-FP-DAG: "-target-feature" "-neon"
329 // CHECK-NO-FP-DAG: "-target-feature" "-crypto"
330 
331 // RUN: %clang -target arm-linux-gnueabihf %s -### 2>&1 \
332 // RUN:   | FileCheck --check-prefix=CHECK-HF %s
333 // RUN: %clang -target arm-linux-musleabihf %s -### 2>&1 \
334 // RUN:   | FileCheck --check-prefix=CHECK-HF %s
335 // CHECK-HF-NOT: "-target-feature" "+soft-float"
336 // CHECK-HF-NOT: "-target-feature" "+soft-float-abi"
337 // CHECK-HF-DAG: "-target-cpu" "arm1176jzf-s"
338 
339 // RUN: %clang -target armv7-apple-darwin -x assembler %s -### -c 2>&1 \
340 // RUN:   | FileCheck --check-prefix=ASM %s
341 // ASM-NOT: -target-feature
342 
343 // RUN: %clang -target armv8-linux-gnueabi -mfloat-abi=soft -mfpu=none %s -### -c 2>&1 \
344 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
345 // RUN: %clang -target armv7-linux-gnueabi -mfloat-abi=soft -mfpu=none %s -### -c 2>&1 \
346 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
347 // RUN: %clang -target armv6-linux-gnueabi -mfloat-abi=soft -mfpu=none %s -### -c 2>&1 \
348 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
349 // RUN: %clang -target armv5-linux-gnueabi -mfloat-abi=soft -mfpu=none %s -### -c 2>&1 \
350 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
351 // RUN: %clang -target armv4-linux-gnueabi -mfloat-abi=soft -mfpu=none %s -### -c 2>&1 \
352 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
353 // RUN: %clang -target armv8-linux-gnueabi -msoft-float -mfpu=none %s -### -c 2>&1 \
354 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
355 // RUN: %clang -target armv8-linux-gnueabi -mfloat-abi=soft %s -### -c 2>&1 \
356 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
357 // RUN: %clang -target armv8-linux-gnueabi -msoft-float %s -### -c 2>&1 \
358 // RUN:   | FileCheck --check-prefix=CHECK-SOFT-ABI-FP %s
359 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "+soft-float"
360 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "+soft-float-abi"
361 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-vfp2sp"
362 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-vfp3d16sp"
363 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-vfp4d16sp"
364 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-fp-armv8d16sp"
365 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-neon"
366 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-crypto"
367 // CHECK-SOFT-ABI-FP-DAG: "-target-feature" "-fpregs"
368 
369 // RUN: %clang -target arm-linux-androideabi21 %s -### -c 2>&1 \
370 // RUN:   | FileCheck --check-prefix=CHECK-ARM5-ANDROID-FP-DEFAULT %s
371 // CHECK-ARM5-ANDROID-FP-DEFAULT-DAG: "-target-feature" "+soft-float"
372 // CHECK-ARM5-ANDROID-FP-DEFAULT-DAG: "-target-feature" "+soft-float-abi"
373 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+d32"
374 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+vfp3"
375 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+vfp4"
376 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+fp-armv8"
377 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+neon"
378 // CHECK-ARM5-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+crypto"
379 
380 // RUN: %clang -target armv7-linux-androideabi21 %s -### -c 2>&1 \
381 // RUN:   | FileCheck --check-prefix=CHECK-ARM7-ANDROID-FP-DEFAULT %s
382 // CHECK-ARM7-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+soft-float"
383 // CHECK-ARM7-ANDROID-FP-DEFAULT-DAG: "-target-feature" "+soft-float-abi"
384 // CHECK-ARM7-ANDROID-FP-DEFAULT-DAG: "-target-feature" "+vfp3"
385 // CHECK-ARM7-ANDROID-FP-DEFAULT-DAG: "-target-feature" "-vfp4"
386 // CHECK-ARM7-ANDROID-FP-DEFAULT-DAG: "-target-feature" "-fp-armv8"
387 // CHECK-ARM7-ANDROID-FP-DEFAULT-DAG: "-target-feature" "+neon"
388 // CHECK-ARM7-ANDROID-FP-DEFAULT-NOT: "-target-feature" "+crypto"
389 
390 // RUN: %clang -target armv7-linux-androideabi21 %s -mfpu=vfp3-d16 -### -c 2>&1 \
391 // RUN:   | FileCheck --check-prefix=CHECK-ARM7-ANDROID-FP-D16 %s
392 // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+soft-float"
393 // CHECK-ARM7-ANDROID-FP-D16-DAG: "-target-feature" "+soft-float-abi"
394 // CHECK-ARM7-ANDROID-FP-D16-DAG: "-target-feature" "-d32"
395 // CHECK-ARM7-ANDROID-FP-D16-DAG: "-target-feature" "+vfp3d16"
396 // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+vfp4"
397 // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+fp-armv8"
398 // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+neon"
399 // CHECK-ARM7-ANDROID-FP-D16-NOT: "-target-feature" "+crypto"
400 
401 // RUN: %clang -target arm-none-none-eabi %s -march=armv8.1-m.main+mve.fp+fp.dp -mfloat-abi=soft -### -c 2>&1 \
402 // RUN:   | FileCheck --check-prefix=CHECK-SOFTFLOATABI-INHIBITS-MVE %s
403 // CHECK-SOFTFLOATABI-INHIBITS-MVE-NOT: "-target-feature" "+mve"
404 // CHECK-SOFTFLOATABI-INHIBITS-MVE-DAG: "-target-feature" "-mve"
405 // CHECK-SOFTFLOATABI-INHIBITS-MVE-DAG: "-target-feature" "-mve.fp"
406 
407 // RUN: %clang -target arm-none-none-eabi %s -march=armv8.1-m.main+mve.fp -mfpu=none -### -c 2>&1 \
408 // RUN:   | FileCheck --check-prefix=CHECK-MVEFP-FPUNONE %s
409 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-vfp2sp"
410 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-vfp3d16sp"
411 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-vfp4d16sp"
412 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-fp-armv8d16sp"
413 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-fp64"
414 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-d32"
415 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-neon"
416 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-crypto"
417 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "+mve"
418 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "+dsp"
419 // CHECK-MVEFP-FPUNONE-DAG: "-target-feature" "-mve.fp"
420 // CHECK-MVEFP-FPUNONE-NOT: "-target-feature" "-fpregs"
421 
422 // RUN: %clang -target arm-none-none-eabi %s -march=armv8.1-m.main+mve.fp+nomve -mfpu=none -### -c 2>&1 \
423 // RUN:   | FileCheck --check-prefix=CHECK-MVEFP-NOMVE-FPUNONE %s
424 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-vfp2sp"
425 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-vfp3d16sp"
426 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-vfp4d16sp"
427 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-fp-armv8d16sp"
428 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-fp64"
429 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-d32"
430 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-neon"
431 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-crypto"
432 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "+dsp"
433 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-mve"
434 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-mve.fp"
435 // CHECK-MVEFP-NOMVE-FPUNONE-DAG: "-target-feature" "-fpregs"
436 
437 // RUN: %clang -target arm-none-none-eabi %s -march=armv8.1-m.main+mve -mfpu=none -### -c 2>&1 \
438 // RUN:   | FileCheck --check-prefix=CHECK-MVEI-FPUNONE %s
439 // CHECK-MVEI-FPUNONE-DAG: "-target-feature" "-mve.fp"
440 // CHECK-MVEI-FPUNONE-DAG: "-target-feature" "+mve"
441 // CHECK-MVEI-FPUNONE-DAG: "-target-feature" "+dsp"
442 // CHECK-MVEI-FPUNONE-NOT: "-target-feature" "-fpregs"
443