OLD | NEW |
---|---|
1 ; This tries to be a comprehensive test of f32 and f64 compare operations. | 1 ; This tries to be a comprehensive test of f32 and f64 compare operations. |
2 ; The CHECK lines are only checking for basic instruction patterns | 2 ; The CHECK lines are only checking for basic instruction patterns |
3 ; that should be present regardless of the optimization level, so | 3 ; that should be present regardless of the optimization level, so |
4 ; there are no special OPTM1 match lines. | 4 ; there are no special OPTM1 match lines. |
Jim Stichnoth
2015/11/11 14:05:20
This intro is by now almost entirely untrue. :)
I
sehr
2015/11/13 06:00:52
I have removed the comment.
| |
5 | 5 |
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ | 6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ |
7 ; RUN: -allow-externally-defined-symbols | FileCheck %s | 7 ; RUN: -allow-externally-defined-symbols | FileCheck %s |
8 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ | 8 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ |
9 ; RUN: -allow-externally-defined-symbols | FileCheck %s | 9 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ |
10 ; RUN: --check-prefix=CHECK-OM1 | |
10 | 11 |
11 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 12 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
12 ; RUN: --target arm32 -i %s --args -O2 \ | 13 ; RUN: --target arm32 -i %s --args -O2 \ |
13 ; RUN: -allow-externally-defined-symbols \ | 14 ; RUN: -allow-externally-defined-symbols \ |
14 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ | 15 ; RUN: | %if --need=allow_dump --need=target_ARM32 --command FileCheck %s \ |
15 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 | 16 ; RUN: --check-prefix=ARM32 --check-prefix=ARM32-O2 |
16 | 17 |
17 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ | 18 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ |
18 ; RUN: --target arm32 -i %s --args -Om1 \ | 19 ; RUN: --target arm32 -i %s --args -Om1 \ |
19 ; RUN: -allow-externally-defined-symbols \ | 20 ; RUN: -allow-externally-defined-symbols \ |
(...skipping 15 matching lines...) Expand all Loading... | |
35 | 36 |
36 if.then2: ; preds = %if.end | 37 if.then2: ; preds = %if.end |
37 call void @func() | 38 call void @func() |
38 br label %if.end3 | 39 br label %if.end3 |
39 | 40 |
40 if.end3: ; preds = %if.then2, %if.end | 41 if.end3: ; preds = %if.then2, %if.end |
41 ret void | 42 ret void |
42 } | 43 } |
43 ; CHECK-LABEL: fcmpEq | 44 ; CHECK-LABEL: fcmpEq |
44 ; CHECK: ucomiss | 45 ; CHECK: ucomiss |
45 ; CHECK: jne | 46 ; CHECK-NEXT: jne |
47 ; CHECK-NEXT: jp | |
48 ; CHECK-NEXT: call {{.*}} R_{{.*}} func | |
49 ; CHECK: ucomisd | |
50 ; CHECK-NEXT: jne | |
46 ; CHECK-NEXT: jp | 51 ; CHECK-NEXT: jp |
47 ; CHECK: call {{.*}} R_{{.*}} func | 52 ; CHECK: call {{.*}} R_{{.*}} func |
48 ; CHECK: ucomisd | 53 ; CHECK-OM1-LABEL: fcmpEq |
49 ; CHECK: jne | 54 ; CHECK-OM1: ucomiss |
50 ; CHECK-NEXT: jp | 55 ; CHECK-OM1: jne |
51 ; CHECK: call {{.*}} R_{{.*}} func | 56 ; CHECK-OM1-NEXT: jp |
57 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
58 ; CHECK-OM1: ucomisd | |
59 ; CHECK-OM1: jne | |
60 ; CHECK-NEXT-OM1: jp | |
52 ; ARM32-LABEL: fcmpEq | 61 ; ARM32-LABEL: fcmpEq |
53 ; ARM32: vcmp.f32 | 62 ; ARM32: vcmp.f32 |
54 ; ARM32: vmrs | 63 ; ARM32: vmrs |
55 ; ARM32-OM1: movne [[R0:r[0-9]+]], #0 | 64 ; ARM32-OM1: movne [[R0:r[0-9]+]], #0 |
56 ; ARM32-OM1: moveq [[R0]], #1 | 65 ; ARM32-OM1: moveq [[R0]], #1 |
57 ; ARM32-O2: bne | 66 ; ARM32-O2: bne |
58 ; ARM32: bl func | 67 ; ARM32: bl func |
59 ; ARM32: vcmp.f64 | 68 ; ARM32: vcmp.f64 |
60 ; ARM32: vmrs | 69 ; ARM32: vmrs |
61 ; ARM32-OM1: movne [[R1:r[0-9]+]], #0 | 70 ; ARM32-OM1: movne [[R1:r[0-9]+]], #0 |
(...skipping 17 matching lines...) Expand all Loading... | |
79 | 88 |
80 if.then2: ; preds = %if.end | 89 if.then2: ; preds = %if.end |
81 call void @func() | 90 call void @func() |
82 br label %if.end3 | 91 br label %if.end3 |
83 | 92 |
84 if.end3: ; preds = %if.then2, %if.end | 93 if.end3: ; preds = %if.then2, %if.end |
85 ret void | 94 ret void |
86 } | 95 } |
87 ; CHECK-LABEL: fcmpNe | 96 ; CHECK-LABEL: fcmpNe |
88 ; CHECK: ucomiss | 97 ; CHECK: ucomiss |
89 ; CHECK: jne | 98 ; CHECK-NEXT: jne |
90 ; CHECK-NEXT: jp | 99 ; CHECK-NEXT: jp |
91 ; CHECK: call {{.*}} R_{{.*}} func | 100 ; CHECK-NEXT: jmp |
101 ; CHECK-NEXT: call {{.*}} R_{{.*}} func | |
92 ; CHECK: ucomisd | 102 ; CHECK: ucomisd |
93 ; CHECK: jne | 103 ; CHECK-NEXT: jne |
94 ; CHECK-NEXT: jp | 104 ; CHECK-NEXT: jp |
95 ; CHECK: call {{.*}} R_{{.*}} func | 105 ; CHECK-NEXT: jmp |
106 ; CHECK-NEXT: call {{.*}} R_{{.*}} func | |
107 ; CHECK-OM1-LABEL: fcmpNe | |
108 ; CHECK-OM1: ucomiss | |
109 ; CHECK-OM1: jne | |
110 ; CHECK-OM1: jp | |
111 ; CHECK-OM1: jmp | |
112 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
113 ; CHECK-OM1: ucomisd | |
114 ; CHECK-OM1: jne | |
115 ; CHECK-OM1: jp | |
116 ; CHECK-OM1: jmp | |
117 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
96 ; ARM32-LABEL: fcmpNe | 118 ; ARM32-LABEL: fcmpNe |
97 ; ARM32: vcmp.f32 | 119 ; ARM32: vcmp.f32 |
98 ; ARM32: vmrs | 120 ; ARM32: vmrs |
99 ; ARM32-OM1: moveq [[R0:r[0-9]+]], #0 | 121 ; ARM32-OM1: moveq [[R0:r[0-9]+]], #0 |
100 ; ARM32-OM1: movne [[R0]], #1 | 122 ; ARM32-OM1: movne [[R0]], #1 |
101 ; ARM32-O2: beq | 123 ; ARM32-O2: beq |
102 ; ARM32: vcmp.f64 | 124 ; ARM32: vcmp.f64 |
103 ; ARM32: vmrs | 125 ; ARM32: vmrs |
104 ; ARM32-OM1: moveq [[R1:r[0-9]+]], #0 | 126 ; ARM32-OM1: moveq [[R1:r[0-9]+]], #0 |
105 ; ARM32-OM1: movne [[R1]], #1 | 127 ; ARM32-OM1: movne [[R1]], #1 |
(...skipping 14 matching lines...) Expand all Loading... | |
120 | 142 |
121 if.then2: ; preds = %if.end | 143 if.then2: ; preds = %if.end |
122 call void @func() | 144 call void @func() |
123 br label %if.end3 | 145 br label %if.end3 |
124 | 146 |
125 if.end3: ; preds = %if.then2, %if.end | 147 if.end3: ; preds = %if.then2, %if.end |
126 ret void | 148 ret void |
127 } | 149 } |
128 ; CHECK-LABEL: fcmpGt | 150 ; CHECK-LABEL: fcmpGt |
129 ; CHECK: ucomiss | 151 ; CHECK: ucomiss |
130 ; CHECK: seta | 152 ; CHECK-NEXT: jbe |
131 ; CHECK: call {{.*}} R_{{.*}} func | 153 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
132 ; CHECK: ucomisd | 154 ; CHECK: ucomisd |
133 ; CHECK: seta | 155 ; CHECK-NEXT: jbe |
134 ; CHECK: call {{.*}} R_{{.*}} func | 156 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
157 ; CHECK-OM1-LABEL: fcmpGt | |
158 ; CHECK-OM1: ucomiss | |
159 ; CHECK-OM1: seta | |
160 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
161 ; CHECK-OM1: ucomisd | |
162 ; CHECK-OM1: seta | |
163 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
135 ; ARM32-LABEL: fcmpGt | 164 ; ARM32-LABEL: fcmpGt |
136 ; ARM32: vcmp.f32 | 165 ; ARM32: vcmp.f32 |
137 ; ARM32: vmrs | 166 ; ARM32: vmrs |
138 ; ARM32-OM1: movle [[R0:r[0-9]+]], #0 | 167 ; ARM32-OM1: movle [[R0:r[0-9]+]], #0 |
139 ; ARM32-OM1: movgt [[R0]], #1 | 168 ; ARM32-OM1: movgt [[R0]], #1 |
140 ; ARM32-O2: ble | 169 ; ARM32-O2: ble |
141 ; ARM32: vcmp.f64 | 170 ; ARM32: vcmp.f64 |
142 ; ARM32: vmrs | 171 ; ARM32: vmrs |
143 ; ARM32-OM1: movle [[R1:r[0-9]+]], #0 | 172 ; ARM32-OM1: movle [[R1:r[0-9]+]], #0 |
144 ; ARM32-OM1: movgt [[R1]], #1 | 173 ; ARM32-OM1: movgt [[R1]], #1 |
(...skipping 14 matching lines...) Expand all Loading... | |
159 | 188 |
160 if.then2: ; preds = %if.end | 189 if.then2: ; preds = %if.end |
161 call void @func() | 190 call void @func() |
162 br label %if.end3 | 191 br label %if.end3 |
163 | 192 |
164 if.end3: ; preds = %if.end, %if.then2 | 193 if.end3: ; preds = %if.end, %if.then2 |
165 ret void | 194 ret void |
166 } | 195 } |
167 ; CHECK-LABEL: fcmpGe | 196 ; CHECK-LABEL: fcmpGe |
168 ; CHECK: ucomiss | 197 ; CHECK: ucomiss |
169 ; CHECK: setb | 198 ; CHECK-NEXT: jb |
170 ; CHECK: call {{.*}} R_{{.*}} func | 199 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
171 ; CHECK: ucomisd | 200 ; CHECK: ucomisd |
172 ; CHECK: setb | 201 ; CHECK-NEXT: jb |
173 ; CHECK: call {{.*}} R_{{.*}} func | 202 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
203 ; CHECK-OM1-LABEL: fcmpGe | |
204 ; CHECK-OM1: ucomiss | |
205 ; CHECK-OM1-NEXT: setb | |
206 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
207 ; CHECK-OM1: ucomisd | |
208 ; CHECK-OM1-NEXT: setb | |
209 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
174 ; ARM32-LABEL: fcmpGe | 210 ; ARM32-LABEL: fcmpGe |
175 ; ARM32: vcmp.f32 | 211 ; ARM32: vcmp.f32 |
176 ; ARM32: vmrs | 212 ; ARM32: vmrs |
177 ; ARM32-OM1: movge [[R0:r[0-9]+]], #0 | 213 ; ARM32-OM1: movge [[R0:r[0-9]+]], #0 |
178 ; ARM32-OM1: movlt [[R0]], #1 | 214 ; ARM32-OM1: movlt [[R0]], #1 |
179 ; ARM32-O2: blt | 215 ; ARM32-O2: blt |
180 ; ARM32: vcmp.f64 | 216 ; ARM32: vcmp.f64 |
181 ; ARM32: vmrs | 217 ; ARM32: vmrs |
182 ; ARM32-OM1: movge [[R1:r[0-9]+]], #0 | 218 ; ARM32-OM1: movge [[R1:r[0-9]+]], #0 |
183 ; ARM32-OM1: movlt [[R1]], #1 | 219 ; ARM32-OM1: movlt [[R1]], #1 |
(...skipping 14 matching lines...) Expand all Loading... | |
198 | 234 |
199 if.then2: ; preds = %if.end | 235 if.then2: ; preds = %if.end |
200 call void @func() | 236 call void @func() |
201 br label %if.end3 | 237 br label %if.end3 |
202 | 238 |
203 if.end3: ; preds = %if.then2, %if.end | 239 if.end3: ; preds = %if.then2, %if.end |
204 ret void | 240 ret void |
205 } | 241 } |
206 ; CHECK-LABEL: fcmpLt | 242 ; CHECK-LABEL: fcmpLt |
207 ; CHECK: ucomiss | 243 ; CHECK: ucomiss |
208 ; CHECK: seta | 244 ; CHECK-NEXT: jbe |
209 ; CHECK: call {{.*}} R_{{.*}} func | 245 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
210 ; CHECK: ucomisd | 246 ; CHECK: ucomisd |
211 ; CHECK: seta | 247 ; CHECK-NEXT: jbe |
212 ; CHECK: call {{.*}} R_{{.*}} func | 248 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
249 ; CHECK-OM1-LABEL: fcmpLt | |
250 ; CHECK-OM1: ucomiss | |
251 ; CHECK-OM1-NEXT: seta | |
252 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
253 ; CHECK-OM1: ucomisd | |
254 ; CHECK-OM1-NEXT: seta | |
255 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
213 ; ARM32-LABEL: fcmpLt | 256 ; ARM32-LABEL: fcmpLt |
214 ; ARM32: vcmp.f32 | 257 ; ARM32: vcmp.f32 |
215 ; ARM32: vmrs | 258 ; ARM32: vmrs |
216 ; ARM32-OM1: movpl [[R0:r[0-9]+]], #0 | 259 ; ARM32-OM1: movpl [[R0:r[0-9]+]], #0 |
217 ; ARM32-OM1: movmi [[R0]], #1 | 260 ; ARM32-OM1: movmi [[R0]], #1 |
218 ; ARM32-O2: bpl | 261 ; ARM32-O2: bpl |
219 ; ARM32: vcmp.f64 | 262 ; ARM32: vcmp.f64 |
220 ; ARM32: vmrs | 263 ; ARM32: vmrs |
221 ; ARM32-OM1: movpl [[R1:r[0-9]+]], #0 | 264 ; ARM32-OM1: movpl [[R1:r[0-9]+]], #0 |
222 ; ARM32-OM1: movmi [[R1]], #1 | 265 ; ARM32-OM1: movmi [[R1]], #1 |
(...skipping 14 matching lines...) Expand all Loading... | |
237 | 280 |
238 if.then2: ; preds = %if.end | 281 if.then2: ; preds = %if.end |
239 call void @func() | 282 call void @func() |
240 br label %if.end3 | 283 br label %if.end3 |
241 | 284 |
242 if.end3: ; preds = %if.end, %if.then2 | 285 if.end3: ; preds = %if.end, %if.then2 |
243 ret void | 286 ret void |
244 } | 287 } |
245 ; CHECK-LABEL: fcmpLe | 288 ; CHECK-LABEL: fcmpLe |
246 ; CHECK: ucomiss | 289 ; CHECK: ucomiss |
247 ; CHECK: setb | 290 ; CHECK-NEXT: jb |
248 ; CHECK: call {{.*}} R_{{.*}} func | 291 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
249 ; CHECK: ucomisd | 292 ; CHECK: ucomisd |
250 ; CHECK: setb | 293 ; CHECK-NEXT: jb |
251 ; CHECK: call {{.*}} R_{{.*}} func | 294 ; CHECK-NEXT: call {{.*}} R_{{.*}} func |
295 ; CHECK-OM1-LABEL: fcmpLe | |
296 ; CHECK-OM1: ucomiss | |
297 ; CHECK-OM1-NEXT: setb | |
298 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
299 ; CHECK-OM1: ucomisd | |
300 ; CHECK-OM1-NEXT: setb | |
301 ; CHECK-OM1: call {{.*}} R_{{.*}} func | |
252 ; ARM32-LABEL: fcmpLe | 302 ; ARM32-LABEL: fcmpLe |
253 ; ARM32: vcmp.f32 | 303 ; ARM32: vcmp.f32 |
254 ; ARM32: vmrs | 304 ; ARM32: vmrs |
255 ; ARM32-OM1: movls [[R0:r[0-9]+]], #0 | 305 ; ARM32-OM1: movls [[R0:r[0-9]+]], #0 |
256 ; ARM32-OM1: movhi [[R0]], #1 | 306 ; ARM32-OM1: movhi [[R0]], #1 |
257 ; ARM32-O2: bhi | 307 ; ARM32-O2: bhi |
258 ; ARM32: vcmp.f64 | 308 ; ARM32: vcmp.f64 |
259 ; ARM32: vmrs | 309 ; ARM32: vmrs |
260 ; ARM32-OM1: movls [[R1:r[0-9]+]], #0 | 310 ; ARM32-OM1: movls [[R1:r[0-9]+]], #0 |
261 ; ARM32-OM1: movhi [[R1]], #1 | 311 ; ARM32-OM1: movhi [[R1]], #1 |
(...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
757 } | 807 } |
758 ; CHECK-LABEL: selectDoubleVarVar | 808 ; CHECK-LABEL: selectDoubleVarVar |
759 ; CHECK: ucomisd | 809 ; CHECK: ucomisd |
760 ; CHECK: seta | 810 ; CHECK: seta |
761 ; CHECK: fld | 811 ; CHECK: fld |
762 ; ARM32-LABEL: selectDoubleVarVar | 812 ; ARM32-LABEL: selectDoubleVarVar |
763 ; ARM32: vcmp.f64 | 813 ; ARM32: vcmp.f64 |
764 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} | 814 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} |
765 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} | 815 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} |
766 ; ARM32: bx | 816 ; ARM32: bx |
OLD | NEW |