Chromium Code Reviews| 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 |