|
3 | 3 | ; RUN: llc -mtriple=arm64-linux-gnu -verify-machineinstrs -global-isel -global-isel-abort=2 < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI
|
4 | 4 |
|
5 | 5 | ; CHECK-GI: warning: Instruction selection used fallback path for test_neg_sub
|
6 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_neg |
7 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for vec_neg |
8 | 6 |
|
9 | 7 | define fp128 @test_add(fp128 %lhs, fp128 %rhs) {
|
10 | 8 | ; CHECK-LABEL: test_add:
|
@@ -405,15 +403,23 @@ define fp128 @test_neg_sub(fp128 %in) {
|
405 | 403 | }
|
406 | 404 |
|
407 | 405 | define fp128 @test_neg(fp128 %in) {
|
408 |
| -; CHECK-LABEL: test_neg: |
409 |
| -; CHECK: // %bb.0: |
410 |
| -; CHECK-NEXT: str q0, [sp, #-16]! |
411 |
| -; CHECK-NEXT: .cfi_def_cfa_offset 16 |
412 |
| -; CHECK-NEXT: ldrb w8, [sp, #15] |
413 |
| -; CHECK-NEXT: eor w8, w8, #0x80 |
414 |
| -; CHECK-NEXT: strb w8, [sp, #15] |
415 |
| -; CHECK-NEXT: ldr q0, [sp], #16 |
416 |
| -; CHECK-NEXT: ret |
| 406 | +; CHECK-SD-LABEL: test_neg: |
| 407 | +; CHECK-SD: // %bb.0: |
| 408 | +; CHECK-SD-NEXT: str q0, [sp, #-16]! |
| 409 | +; CHECK-SD-NEXT: .cfi_def_cfa_offset 16 |
| 410 | +; CHECK-SD-NEXT: ldrb w8, [sp, #15] |
| 411 | +; CHECK-SD-NEXT: eor w8, w8, #0x80 |
| 412 | +; CHECK-SD-NEXT: strb w8, [sp, #15] |
| 413 | +; CHECK-SD-NEXT: ldr q0, [sp], #16 |
| 414 | +; CHECK-SD-NEXT: ret |
| 415 | +; |
| 416 | +; CHECK-GI-LABEL: test_neg: |
| 417 | +; CHECK-GI: // %bb.0: |
| 418 | +; CHECK-GI-NEXT: mov x8, v0.d[1] |
| 419 | +; CHECK-GI-NEXT: mov v0.d[0], v0.d[0] |
| 420 | +; CHECK-GI-NEXT: eor x8, x8, #0x8000000000000000 |
| 421 | +; CHECK-GI-NEXT: mov v0.d[1], x8 |
| 422 | +; CHECK-GI-NEXT: ret |
417 | 423 | %ret = fneg fp128 %in
|
418 | 424 | ret fp128 %ret
|
419 | 425 | }
|
@@ -1497,18 +1503,30 @@ define <2 x fp128> @vec_neg_sub(<2 x fp128> %in) {
|
1497 | 1503 | }
|
1498 | 1504 |
|
1499 | 1505 | define <2 x fp128> @vec_neg(<2 x fp128> %in) {
|
1500 |
| -; CHECK-LABEL: vec_neg: |
1501 |
| -; CHECK: // %bb.0: |
1502 |
| -; CHECK-NEXT: stp q0, q1, [sp, #-32]! |
1503 |
| -; CHECK-NEXT: .cfi_def_cfa_offset 32 |
1504 |
| -; CHECK-NEXT: ldrb w8, [sp, #15] |
1505 |
| -; CHECK-NEXT: eor w8, w8, #0x80 |
1506 |
| -; CHECK-NEXT: strb w8, [sp, #15] |
1507 |
| -; CHECK-NEXT: ldrb w8, [sp, #31] |
1508 |
| -; CHECK-NEXT: eor w8, w8, #0x80 |
1509 |
| -; CHECK-NEXT: strb w8, [sp, #31] |
1510 |
| -; CHECK-NEXT: ldp q0, q1, [sp], #32 |
1511 |
| -; CHECK-NEXT: ret |
| 1506 | +; CHECK-SD-LABEL: vec_neg: |
| 1507 | +; CHECK-SD: // %bb.0: |
| 1508 | +; CHECK-SD-NEXT: stp q0, q1, [sp, #-32]! |
| 1509 | +; CHECK-SD-NEXT: .cfi_def_cfa_offset 32 |
| 1510 | +; CHECK-SD-NEXT: ldrb w8, [sp, #15] |
| 1511 | +; CHECK-SD-NEXT: eor w8, w8, #0x80 |
| 1512 | +; CHECK-SD-NEXT: strb w8, [sp, #15] |
| 1513 | +; CHECK-SD-NEXT: ldrb w8, [sp, #31] |
| 1514 | +; CHECK-SD-NEXT: eor w8, w8, #0x80 |
| 1515 | +; CHECK-SD-NEXT: strb w8, [sp, #31] |
| 1516 | +; CHECK-SD-NEXT: ldp q0, q1, [sp], #32 |
| 1517 | +; CHECK-SD-NEXT: ret |
| 1518 | +; |
| 1519 | +; CHECK-GI-LABEL: vec_neg: |
| 1520 | +; CHECK-GI: // %bb.0: |
| 1521 | +; CHECK-GI-NEXT: mov x8, v0.d[1] |
| 1522 | +; CHECK-GI-NEXT: mov x9, v1.d[1] |
| 1523 | +; CHECK-GI-NEXT: mov v0.d[0], v0.d[0] |
| 1524 | +; CHECK-GI-NEXT: mov v1.d[0], v1.d[0] |
| 1525 | +; CHECK-GI-NEXT: eor x8, x8, #0x8000000000000000 |
| 1526 | +; CHECK-GI-NEXT: eor x9, x9, #0x8000000000000000 |
| 1527 | +; CHECK-GI-NEXT: mov v0.d[1], x8 |
| 1528 | +; CHECK-GI-NEXT: mov v1.d[1], x9 |
| 1529 | +; CHECK-GI-NEXT: ret |
1512 | 1530 | %ret = fneg <2 x fp128> %in
|
1513 | 1531 | ret <2 x fp128> %ret
|
1514 | 1532 | }
|
0 commit comments