Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / Driver / fp-contract.c
blob660f67fad3ccbedbf7c564295ecb3620cf106724
1 // Test that -ffp-contract is set to the right value when combined with
2 // the options -ffast-math, -fno-fast-math, funsafe-math-optimizations,
3 // fno-unsafe-math-optimizations.
5 // ffast-math, fno-fast-math
6 // RUN: %clang -### -ffast-math -c %s 2>&1 \
7 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
8 // CHECK-FPC-FAST: "-ffp-contract=fast"
10 // RUN: %clang -### -fno-fast-math -c %s 2>&1 \
11 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
13 // RUN: %clang -### -ffast-math -ffp-contract=on -c %s 2>&1 \
14 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
15 // CHECK-FPC-ON: "-ffp-contract=on"
17 // RUN: %clang -### -ffast-math -ffp-contract=off -c %s 2>&1 \
18 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
19 // CHECK-FPC-OFF: "-ffp-contract=off"
21 // RUN: %clang -### -ffast-math -ffp-contract=fast -c %s 2>&1 \
22 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
24 // RUN: %clang -### -ffast-math -ffp-contract=fast-honor-pragmas -c %s 2>&1 \
25 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST-HONOR %s
26 // CHECK-FPC-FAST-HONOR: "-ffp-contract=fast-honor-pragmas"
28 // RUN: %clang -### -ffp-contract=fast -ffast-math -c %s 2>&1 \
29 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
30 // RUN: %clang -### -ffp-contract=on -ffast-math -c %s 2>&1 \
31 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
32 // RUN: %clang -### -ffp-contract=off -ffast-math -c %s 2>&1 \
33 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
35 // RUN: %clang -### -ffp-contract=fast -fno-fast-math -c %s 2>&1 \
36 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
37 // RUN: %clang -### -ffp-contract=on -fno-fast-math -c %s 2>&1 \
38 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
39 // RUN: %clang -### -ffp-contract=off -fno-fast-math -c %s 2>&1 \
40 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
43 // RUN: %clang -### -ffast-math -ffp-contract=fast -ffp-contract=on -c %s 2>&1 \
44 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
46 // RUN: %clang -### -ffast-math -ffp-contract=on -ffp-contract=off -c %s 2>&1 \
47 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
49 // RUN: %clang -### -ffast-math -ffp-contract=on -ffp-contract=fast -c %s 2>&1 \
50 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
52 // RUN: %clang -### -ffast-math -ffp-contract=off -ffp-contract=on -c %s 2>&1 \
53 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
55 // RUN: %clang -### -ffast-math -ffp-contract=off -ffp-contract=fast \
56 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
58 // RUN: %clang -### -ffast-math -ffp-contract=on -fno-fast-math -c %s 2>&1 \
59 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
61 // RUN: %clang -### -ffast-math -ffp-contract=off -fno-fast-math -c %s 2>&1 \
62 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
64 // RUN: %clang -### -ffast-math -ffp-contract=fast -fno-fast-math -c %s 2>&1 \
65 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
67 // RUN: %clang -### -ffast-math -fno-fast-math -c %s 2>&1 \
68 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
70 // RUN: %clang -### -fno-fast-math -ffast-math -c %s 2>&1 \
71 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
73 // RUN: %clang -### -fno-fast-math -ffp-contract=on -c %s 2>&1 \
74 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
76 // RUN: %clang -### -fno-fast-math -ffp-contract=off -c %s 2>&1 \
77 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
79 // RUN: %clang -### -fno-fast-math -ffp-contract=fast -c %s 2>&1 \
80 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
82 // RUN: %clang -### -ffp-contract=fast -fno-fast-math -ffp-contract=on \
83 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
85 // RUN: %clang -### -ffp-contract=fast -fno-fast-math -ffp-contract=off \
86 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-OFF %s
88 // RUN: %clang -### -ffp-contract=off -fno-fast-math -ffp-contract=fast \
89 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
91 // RUN: %clang -### -ffp-contract=off -fno-fast-math -ffp-contract=on \
92 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
94 // RUN: %clang -### -ffp-contract=on -ffast-math -c %s 2>&1 \
95 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
97 // RUN: %clang -### -ffp-contract=off -ffast-math -c %s 2>&1 \
98 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
100 // RUN: %clang -### -ffp-contract=fast -ffast-math -c %s 2>&1 \
101 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
103 // RUN: %clang -### -ffp-contract=on -ffast-math -fno-fast-math -c %s 2>&1 \
104 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
106 // RUN: %clang -### -ffp-contract=off -ffast-math -fno-fast-math -c %s 2>&1 \
107 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
109 // RUN: %clang -### -ffp-contract=fast -ffast-math -fno-fast-math -c %s 2>&1 \
110 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
112 // RUN: %clang -### -fno-fast-math -ffast-math -ffp-contract=fast \
113 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
115 // RUN: %clang -### -fno-fast-math -ffast-math -ffp-contract=on \
116 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
118 // RUN: %clang -### -fno-fast-math -ffast-math -ffp-contract=off \
119 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-OFF %s
121 // funsafe-math-optimizations, fno-unsafe-math-optimizations
122 // RUN: %clang -### -funsafe-math-optimizations -c %s 2>&1 \
123 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
125 // RUN: %clang -### -fno-unsafe-math-optimizations -c %s 2>&1 \
126 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
128 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=on -c %s 2>&1 \
129 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
131 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=off -c %s 2>&1 \
132 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
134 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=fast -c %s 2>&1 \
135 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
137 // RUN: %clang -### -ffp-contract=fast -funsafe-math-optimizations -c %s 2>&1 \
138 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
139 // RUN: %clang -### -ffp-contract=on -funsafe-math-optimizations -c %s 2>&1 \
140 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
141 // RUN: %clang -### -ffp-contract=off -funsafe-math-optimizations -c %s 2>&1 \
142 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
144 // RUN: %clang -### -ffp-contract=fast -fno-unsafe-math-optimizations -c \
145 // RUN: %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
146 // RUN: %clang -### -ffp-contract=on -fno-unsafe-math-optimizations -c %s 2>&1 \
147 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
148 // RUN: %clang -### -ffp-contract=off -fno-unsafe-math-optimizations -c %s 2>&1 \
149 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
151 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=fast \
152 // RUN: -ffp-contract=on -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
154 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=on \
155 // RUN: -ffp-contract=off -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-OFF %s
157 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=on \
158 // RUN: -ffp-contract=fast -c %s 2>&1 \
159 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
161 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=off \
162 // RUN: -ffp-contract=on -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
164 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=off \
165 // RUN: -ffp-contract=fast \
166 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
168 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=on \
169 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
170 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
172 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=off \
173 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
174 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
176 // RUN: %clang -### -funsafe-math-optimizations -ffp-contract=fast \
177 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
178 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
180 // RUN: %clang -### -funsafe-math-optimizations -fno-unsafe-math-optimizations \
181 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
183 // RUN: %clang -### -fno-unsafe-math-optimizations -funsafe-math-optimizations \
184 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
186 // RUN: %clang -### -fno-unsafe-math-optimizations -ffp-contract=on -c %s 2>&1 \
187 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
189 // RUN: %clang -### -fno-unsafe-math-optimizations -ffp-contract=off -c %s 2>&1 \
190 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
192 // RUN: %clang -### -fno-unsafe-math-optimizations -ffp-contract=fast -c %s 2>&1 \
193 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
195 // RUN: %clang -### -ffp-contract=fast -fno-unsafe-math-optimizations \
196 // RUN: -ffp-contract=on \
197 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
199 // RUN: %clang -### -ffp-contract=fast -fno-unsafe-math-optimizations \
200 // RUN: -ffp-contract=off \
201 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-OFF %s
203 // RUN: %clang -### -ffp-contract=off -fno-unsafe-math-optimizations \
204 // RUN: -ffp-contract=fast \
205 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
207 // RUN: %clang -### -ffp-contract=off -fno-unsafe-math-optimizations \
208 // RUN: -ffp-contract=on -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
210 // RUN: %clang -### -ffp-contract=on -funsafe-math-optimizations -c %s 2>&1 \
211 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
213 // RUN: %clang -### -ffp-contract=off -funsafe-math-optimizations -c %s 2>&1 \
214 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
216 // RUN: %clang -### -ffp-contract=fast -funsafe-math-optimizations -c %s 2>&1 \
217 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
219 // RUN: %clang -### -ffp-contract=on -funsafe-math-optimizations \
220 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
221 // RUN: | FileCheck --check-prefix=CHECK-FPC-ON %s
223 // RUN: %clang -### -ffp-contract=off -funsafe-math-optimizations \
224 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
225 // RUN: | FileCheck --check-prefix=CHECK-FPC-OFF %s
227 // RUN: %clang -### -ffp-contract=fast -funsafe-math-optimizations \
228 // RUN: -fno-unsafe-math-optimizations -c %s 2>&1 \
229 // RUN: | FileCheck --check-prefix=CHECK-FPC-FAST %s
231 // RUN: %clang -### -fno-unsafe-math-optimizations -funsafe-math-optimizations \
232 // RUN: -ffp-contract=fast \
233 // RUN: -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-FAST %s
235 // RUN: %clang -### -fno-unsafe-math-optimizations -funsafe-math-optimizations \
236 // RUN: -ffp-contract=on -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-ON %s
238 // RUN: %clang -### -fno-unsafe-math-optimizations -funsafe-math-optimizations \
239 // RUN: -ffp-contract=off -c %s 2>&1 | FileCheck --check-prefix=CHECK-FPC-OFF %s