| OLD | NEW |
| 1 ; This tries to be a comprehensive test of i64 operations, in | 1 ; This tries to be a comprehensive test of i64 operations, in |
| 2 ; particular the patterns for lowering i64 operations into constituent | 2 ; particular the patterns for lowering i64 operations into constituent |
| 3 ; i32 operations on x86-32. | 3 ; i32 operations on x86-32. |
| 4 | 4 |
| 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 5 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ | 6 ; RUN: --target x8632 -i %s --args -O2 -allow-externally-defined-symbols \ |
| 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s | 7 ; RUN: | %if --need=target_X8632 --command FileCheck %s |
| 8 | 8 |
| 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ | 9 ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ |
| 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ | 10 ; RUN: --target x8632 -i %s --args -Om1 -allow-externally-defined-symbols \ |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 ; Bundle padding might be added (so not using -NEXT). | 118 ; Bundle padding might be added (so not using -NEXT). |
| 119 ; CHECK: mov DWORD PTR [esp+0x10],0xdeadbeef | 119 ; CHECK: mov DWORD PTR [esp+0x10],0xdeadbeef |
| 120 ; CHECK-NEXT: mov DWORD PTR [esp+0xc],0x12345678 | 120 ; CHECK-NEXT: mov DWORD PTR [esp+0xc],0x12345678 |
| 121 ; Bundle padding will push the call down. | 121 ; Bundle padding will push the call down. |
| 122 ; CHECK-NOT: mov | 122 ; CHECK-NOT: mov |
| 123 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 123 ; CHECK: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 124 ; | 124 ; |
| 125 ; OPTM1-LABEL: pass64BitConstArg | 125 ; OPTM1-LABEL: pass64BitConstArg |
| 126 ; OPTM1: sub esp | 126 ; OPTM1: sub esp |
| 127 ; OPTM1: mov DWORD PTR [esp+0x4] | 127 ; OPTM1: mov DWORD PTR [esp+0x4] |
| 128 ; OPTM1-NEXT: mov DWORD PTR [esp] | 128 ; OPTM1: mov DWORD PTR [esp] |
| 129 ; OPTM1-NEXT: mov DWORD PTR [esp+0x8],0x7b | 129 ; OPTM1-NEXT: mov DWORD PTR [esp+0x8],0x7b |
| 130 ; Bundle padding might be added (so not using -NEXT). | 130 ; Bundle padding might be added (so not using -NEXT). |
| 131 ; OPTM1: mov DWORD PTR [esp+0x10],0xdeadbeef | 131 ; OPTM1: mov DWORD PTR [esp+0x10],0xdeadbeef |
| 132 ; OPTM1-NEXT: mov DWORD PTR [esp+0xc],0x12345678 | 132 ; OPTM1-NEXT: mov DWORD PTR [esp+0xc],0x12345678 |
| 133 ; OPTM1-NOT: mov | 133 ; OPTM1-NOT: mov |
| 134 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline | 134 ; OPTM1: call {{.*}} R_{{.*}} ignore64BitArgNoInline |
| 135 | 135 |
| 136 ; ARM32-LABEL: pass64BitConstArg | 136 ; ARM32-LABEL: pass64BitConstArg |
| 137 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef | 137 ; ARM32: movw [[REG1:r.*]], {{.*}} ; 0xbeef |
| 138 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead | 138 ; ARM32: movt [[REG1]], {{.*}} ; 0xdead |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 ; ARM32: subs | 270 ; ARM32: subs |
| 271 ; ARM32: sbc | 271 ; ARM32: sbc |
| 272 | 272 |
| 273 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { | 273 define internal i64 @mul64BitSigned(i64 %a, i64 %b) { |
| 274 entry: | 274 entry: |
| 275 %mul = mul i64 %b, %a | 275 %mul = mul i64 %b, %a |
| 276 ret i64 %mul | 276 ret i64 %mul |
| 277 } | 277 } |
| 278 ; CHECK-LABEL: mul64BitSigned | 278 ; CHECK-LABEL: mul64BitSigned |
| 279 ; CHECK: imul | 279 ; CHECK: imul |
| 280 ; CHECK: imul | |
| 281 ; CHECK: mul | 280 ; CHECK: mul |
| 282 ; CHECK: add | 281 ; CHECK: add |
| 282 ; CHECK: imul |
| 283 ; CHECK: add | 283 ; CHECK: add |
| 284 ; | 284 ; |
| 285 ; OPTM1-LABEL: mul64BitSigned | 285 ; OPTM1-LABEL: mul64BitSigned |
| 286 ; OPTM1: imul | 286 ; OPTM1: imul |
| 287 ; OPTM1: imul | |
| 288 ; OPTM1: mul | 287 ; OPTM1: mul |
| 289 ; OPTM1: add | 288 ; OPTM1: add |
| 289 ; OPTM1: imul |
| 290 ; OPTM1: add | 290 ; OPTM1: add |
| 291 | 291 |
| 292 ; ARM32-LABEL: mul64BitSigned | 292 ; ARM32-LABEL: mul64BitSigned |
| 293 ; ARM32: mul | 293 ; ARM32: mul |
| 294 ; ARM32: mla | 294 ; ARM32: mla |
| 295 ; ARM32: umull | 295 ; ARM32: umull |
| 296 ; ARM32: add | 296 ; ARM32: add |
| 297 | 297 |
| 298 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { | 298 define internal i64 @mul64BitUnsigned(i64 %a, i64 %b) { |
| 299 entry: | 299 entry: |
| 300 %mul = mul i64 %b, %a | 300 %mul = mul i64 %b, %a |
| 301 ret i64 %mul | 301 ret i64 %mul |
| 302 } | 302 } |
| 303 ; CHECK-LABEL: mul64BitUnsigned | 303 ; CHECK-LABEL: mul64BitUnsigned |
| 304 ; CHECK: imul | 304 ; CHECK: imul |
| 305 ; CHECK: imul | |
| 306 ; CHECK: mul | 305 ; CHECK: mul |
| 307 ; CHECK: add | 306 ; CHECK: add |
| 307 ; CHECK: imul |
| 308 ; CHECK: add | 308 ; CHECK: add |
| 309 ; | 309 ; |
| 310 ; OPTM1-LABEL: mul64BitUnsigned | 310 ; OPTM1-LABEL: mul64BitUnsigned |
| 311 ; OPTM1: imul | 311 ; OPTM1: imul |
| 312 ; OPTM1: imul | |
| 313 ; OPTM1: mul | 312 ; OPTM1: mul |
| 314 ; OPTM1: add | 313 ; OPTM1: add |
| 314 ; OPTM1: imul |
| 315 ; OPTM1: add | 315 ; OPTM1: add |
| 316 | 316 |
| 317 ; ARM32-LABEL: mul64BitUnsigned | 317 ; ARM32-LABEL: mul64BitUnsigned |
| 318 ; ARM32: mul | 318 ; ARM32: mul |
| 319 ; ARM32: mla | 319 ; ARM32: mla |
| 320 ; ARM32: umull | 320 ; ARM32: umull |
| 321 ; ARM32: add | 321 ; ARM32: add |
| 322 | 322 |
| 323 define internal i64 @div64BitSigned(i64 %a, i64 %b) { | 323 define internal i64 @div64BitSigned(i64 %a, i64 %b) { |
| 324 entry: | 324 entry: |
| (...skipping 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1852 ; CHECK-LABEL: phi64Undef | 1852 ; CHECK-LABEL: phi64Undef |
| 1853 ; CHECK: mov {{.*}},0x0 | 1853 ; CHECK: mov {{.*}},0x0 |
| 1854 ; CHECK: mov {{.*}},0x0 | 1854 ; CHECK: mov {{.*}},0x0 |
| 1855 ; OPTM1-LABEL: phi64Undef | 1855 ; OPTM1-LABEL: phi64Undef |
| 1856 ; OPTM1: mov {{.*}},0x0 | 1856 ; OPTM1: mov {{.*}},0x0 |
| 1857 ; OPTM1: mov {{.*}},0x0 | 1857 ; OPTM1: mov {{.*}},0x0 |
| 1858 ; ARM32-LABEL: phi64Undef | 1858 ; ARM32-LABEL: phi64Undef |
| 1859 ; ARM32: mov {{.*}} #0 | 1859 ; ARM32: mov {{.*}} #0 |
| 1860 ; ARM32: mov {{.*}} #0 | 1860 ; ARM32: mov {{.*}} #0 |
| 1861 | 1861 |
| OLD | NEW |