|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown \
|
3 | 3 | ; RUN: -mcpu=pwr8 -ppc-asm-full-reg-names -ppc-track-subreg-liveness \
|
4 |
| -; RUN: -ppc-quadword-atomics < %s | FileCheck --check-prefix=P8 %s |
| 4 | +; RUN: < %s | FileCheck --check-prefix=P8 %s |
5 | 5 | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown -mcpu=pwr7 \
|
6 |
| -; RUN: -ppc-asm-full-reg-names -ppc-quadword-atomics \ |
| 6 | +; RUN: -ppc-asm-full-reg-names \ |
7 | 7 | ; RUN: -ppc-track-subreg-liveness < %s | FileCheck --check-prefix=PWR7 %s
|
8 | 8 | ; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 \
|
9 | 9 | ; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s | FileCheck \
|
|
15 | 15 | ; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s | FileCheck \
|
16 | 16 | ; RUN: --check-prefix=AIX64-PWR8 %s
|
17 | 17 | ; RUN: llc -verify-machineinstrs -mtriple=powerpc-unknown-unknown -mcpu=pwr8 \
|
18 |
| -; RUN: -ppc-quadword-atomics -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s \ |
| 18 | +; RUN: -ppc-asm-full-reg-names -ppc-track-subreg-liveness < %s \ |
19 | 19 | ; RUN: | FileCheck --check-prefix=PPC-PWR8 %s
|
20 | 20 |
|
21 | 21 | define dso_local i128 @lq_unordered(ptr %src) {
|
@@ -49,15 +49,9 @@ define dso_local i128 @lq_unordered(ptr %src) {
|
49 | 49 | ;
|
50 | 50 | ; AIX64-PWR8-LABEL: lq_unordered:
|
51 | 51 | ; AIX64-PWR8: # %bb.0: # %entry
|
52 |
| -; AIX64-PWR8-NEXT: mflr r0 |
53 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
54 |
| -; AIX64-PWR8-NEXT: li r4, 0 |
55 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
56 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
57 |
| -; AIX64-PWR8-NEXT: nop |
58 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
59 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
60 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 52 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 53 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 54 | +; AIX64-PWR8-NEXT: mr r4, r5 |
61 | 55 | ; AIX64-PWR8-NEXT: blr
|
62 | 56 | ;
|
63 | 57 | ; PPC-PWR8-LABEL: lq_unordered:
|
@@ -124,17 +118,11 @@ define dso_local i128 @lqx_unordered(ptr %src, i64 %idx) {
|
124 | 118 | ;
|
125 | 119 | ; AIX64-PWR8-LABEL: lqx_unordered:
|
126 | 120 | ; AIX64-PWR8: # %bb.0: # %entry
|
127 |
| -; AIX64-PWR8-NEXT: mflr r0 |
128 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
129 | 121 | ; AIX64-PWR8-NEXT: sldi r4, r4, 4
|
130 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
131 | 122 | ; AIX64-PWR8-NEXT: add r3, r3, r4
|
132 |
| -; AIX64-PWR8-NEXT: li r4, 0 |
133 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
134 |
| -; AIX64-PWR8-NEXT: nop |
135 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
136 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
137 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 123 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 124 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 125 | +; AIX64-PWR8-NEXT: mr r4, r5 |
138 | 126 | ; AIX64-PWR8-NEXT: blr
|
139 | 127 | ;
|
140 | 128 | ; PPC-PWR8-LABEL: lqx_unordered:
|
@@ -202,16 +190,11 @@ define dso_local i128 @lq_big_offset_unordered(ptr %src) {
|
202 | 190 | ;
|
203 | 191 | ; AIX64-PWR8-LABEL: lq_big_offset_unordered:
|
204 | 192 | ; AIX64-PWR8: # %bb.0: # %entry
|
205 |
| -; AIX64-PWR8-NEXT: mflr r0 |
206 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
207 |
| -; AIX64-PWR8-NEXT: addis r3, r3, 32 |
208 |
| -; AIX64-PWR8-NEXT: li r4, 0 |
209 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
210 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
211 |
| -; AIX64-PWR8-NEXT: nop |
212 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
213 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
214 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 193 | +; AIX64-PWR8-NEXT: lis r4, 32 |
| 194 | +; AIX64-PWR8-NEXT: add r3, r3, r4 |
| 195 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 196 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 197 | +; AIX64-PWR8-NEXT: mr r4, r5 |
215 | 198 | ; AIX64-PWR8-NEXT: blr
|
216 | 199 | ;
|
217 | 200 | ; PPC-PWR8-LABEL: lq_big_offset_unordered:
|
@@ -271,15 +254,9 @@ define dso_local i128 @lq_monotonic(ptr %src) {
|
271 | 254 | ;
|
272 | 255 | ; AIX64-PWR8-LABEL: lq_monotonic:
|
273 | 256 | ; AIX64-PWR8: # %bb.0: # %entry
|
274 |
| -; AIX64-PWR8-NEXT: mflr r0 |
275 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
276 |
| -; AIX64-PWR8-NEXT: li r4, 0 |
277 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
278 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
279 |
| -; AIX64-PWR8-NEXT: nop |
280 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
281 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
282 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 257 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 258 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 259 | +; AIX64-PWR8-NEXT: mr r4, r5 |
283 | 260 | ; AIX64-PWR8-NEXT: blr
|
284 | 261 | ;
|
285 | 262 | ; PPC-PWR8-LABEL: lq_monotonic:
|
@@ -344,15 +321,12 @@ define dso_local i128 @lq_acquire(ptr %src) {
|
344 | 321 | ;
|
345 | 322 | ; AIX64-PWR8-LABEL: lq_acquire:
|
346 | 323 | ; AIX64-PWR8: # %bb.0: # %entry
|
347 |
| -; AIX64-PWR8-NEXT: mflr r0 |
348 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
349 |
| -; AIX64-PWR8-NEXT: li r4, 2 |
350 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
351 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
352 |
| -; AIX64-PWR8-NEXT: nop |
353 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
354 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
355 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 324 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 325 | +; AIX64-PWR8-NEXT: cmpd cr7, r5, r5 |
| 326 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 327 | +; AIX64-PWR8-NEXT: mr r4, r5 |
| 328 | +; AIX64-PWR8-NEXT: bne- cr7, $+4 |
| 329 | +; AIX64-PWR8-NEXT: isync |
356 | 330 | ; AIX64-PWR8-NEXT: blr
|
357 | 331 | ;
|
358 | 332 | ; PPC-PWR8-LABEL: lq_acquire:
|
@@ -419,15 +393,13 @@ define dso_local i128 @lq_seqcst(ptr %src) {
|
419 | 393 | ;
|
420 | 394 | ; AIX64-PWR8-LABEL: lq_seqcst:
|
421 | 395 | ; AIX64-PWR8: # %bb.0: # %entry
|
422 |
| -; AIX64-PWR8-NEXT: mflr r0 |
423 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
424 |
| -; AIX64-PWR8-NEXT: li r4, 5 |
425 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
426 |
| -; AIX64-PWR8-NEXT: bl .__atomic_load_16[PR] |
427 |
| -; AIX64-PWR8-NEXT: nop |
428 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
429 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
430 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 396 | +; AIX64-PWR8-NEXT: sync |
| 397 | +; AIX64-PWR8-NEXT: lq r4, 0(r3) |
| 398 | +; AIX64-PWR8-NEXT: cmpd cr7, r5, r5 |
| 399 | +; AIX64-PWR8-NEXT: mr r3, r4 |
| 400 | +; AIX64-PWR8-NEXT: mr r4, r5 |
| 401 | +; AIX64-PWR8-NEXT: bne- cr7, $+4 |
| 402 | +; AIX64-PWR8-NEXT: isync |
431 | 403 | ; AIX64-PWR8-NEXT: blr
|
432 | 404 | ;
|
433 | 405 | ; PPC-PWR8-LABEL: lq_seqcst:
|
@@ -491,19 +463,9 @@ define dso_local void @stq_unordered(i128 %val, ptr %dst) {
|
491 | 463 | ;
|
492 | 464 | ; AIX64-PWR8-LABEL: stq_unordered:
|
493 | 465 | ; AIX64-PWR8: # %bb.0: # %entry
|
494 |
| -; AIX64-PWR8-NEXT: mflr r0 |
495 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
496 |
| -; AIX64-PWR8-NEXT: mr r6, r4 |
497 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
498 |
| -; AIX64-PWR8-NEXT: mr r3, r5 |
499 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
500 |
| -; AIX64-PWR8-NEXT: mr r5, r6 |
501 |
| -; AIX64-PWR8-NEXT: li r6, 0 |
502 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
503 |
| -; AIX64-PWR8-NEXT: nop |
504 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
505 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
506 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 466 | +; AIX64-PWR8-NEXT: mr r7, r4 |
| 467 | +; AIX64-PWR8-NEXT: mr r6, r3 |
| 468 | +; AIX64-PWR8-NEXT: stq r6, 0(r5) |
507 | 469 | ; AIX64-PWR8-NEXT: blr
|
508 | 470 | ;
|
509 | 471 | ; PPC-PWR8-LABEL: stq_unordered:
|
@@ -572,20 +534,11 @@ define dso_local void @stqx_unordered(i128 %val, ptr %dst, i64 %idx) {
|
572 | 534 | ;
|
573 | 535 | ; AIX64-PWR8-LABEL: stqx_unordered:
|
574 | 536 | ; AIX64-PWR8: # %bb.0: # %entry
|
575 |
| -; AIX64-PWR8-NEXT: mflr r0 |
576 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
577 |
| -; AIX64-PWR8-NEXT: mr r7, r4 |
578 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
579 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
580 |
| -; AIX64-PWR8-NEXT: sldi r3, r6, 4 |
581 |
| -; AIX64-PWR8-NEXT: li r6, 0 |
582 |
| -; AIX64-PWR8-NEXT: add r3, r5, r3 |
583 |
| -; AIX64-PWR8-NEXT: mr r5, r7 |
584 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
585 |
| -; AIX64-PWR8-NEXT: nop |
586 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
587 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
588 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 537 | +; AIX64-PWR8-NEXT: sldi r6, r6, 4 |
| 538 | +; AIX64-PWR8-NEXT: mr r9, r4 |
| 539 | +; AIX64-PWR8-NEXT: mr r8, r3 |
| 540 | +; AIX64-PWR8-NEXT: add r3, r5, r6 |
| 541 | +; AIX64-PWR8-NEXT: stq r8, 0(r3) |
589 | 542 | ; AIX64-PWR8-NEXT: blr
|
590 | 543 | ;
|
591 | 544 | ; PPC-PWR8-LABEL: stqx_unordered:
|
@@ -656,19 +609,11 @@ define dso_local void @stq_big_offset_unordered(i128 %val, ptr %dst) {
|
656 | 609 | ;
|
657 | 610 | ; AIX64-PWR8-LABEL: stq_big_offset_unordered:
|
658 | 611 | ; AIX64-PWR8: # %bb.0: # %entry
|
659 |
| -; AIX64-PWR8-NEXT: mflr r0 |
660 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
661 |
| -; AIX64-PWR8-NEXT: mr r6, r4 |
662 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
663 |
| -; AIX64-PWR8-NEXT: addis r3, r5, 32 |
664 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
665 |
| -; AIX64-PWR8-NEXT: mr r5, r6 |
666 |
| -; AIX64-PWR8-NEXT: li r6, 0 |
667 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
668 |
| -; AIX64-PWR8-NEXT: nop |
669 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
670 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
671 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 612 | +; AIX64-PWR8-NEXT: lis r6, 32 |
| 613 | +; AIX64-PWR8-NEXT: mr r9, r4 |
| 614 | +; AIX64-PWR8-NEXT: mr r8, r3 |
| 615 | +; AIX64-PWR8-NEXT: add r3, r5, r6 |
| 616 | +; AIX64-PWR8-NEXT: stq r8, 0(r3) |
672 | 617 | ; AIX64-PWR8-NEXT: blr
|
673 | 618 | ;
|
674 | 619 | ; PPC-PWR8-LABEL: stq_big_offset_unordered:
|
@@ -734,19 +679,9 @@ define dso_local void @stq_monotonic(i128 %val, ptr %dst) {
|
734 | 679 | ;
|
735 | 680 | ; AIX64-PWR8-LABEL: stq_monotonic:
|
736 | 681 | ; AIX64-PWR8: # %bb.0: # %entry
|
737 |
| -; AIX64-PWR8-NEXT: mflr r0 |
738 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
739 |
| -; AIX64-PWR8-NEXT: mr r6, r4 |
740 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
741 |
| -; AIX64-PWR8-NEXT: mr r3, r5 |
742 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
743 |
| -; AIX64-PWR8-NEXT: mr r5, r6 |
744 |
| -; AIX64-PWR8-NEXT: li r6, 0 |
745 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
746 |
| -; AIX64-PWR8-NEXT: nop |
747 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
748 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
749 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 682 | +; AIX64-PWR8-NEXT: mr r7, r4 |
| 683 | +; AIX64-PWR8-NEXT: mr r6, r3 |
| 684 | +; AIX64-PWR8-NEXT: stq r6, 0(r5) |
750 | 685 | ; AIX64-PWR8-NEXT: blr
|
751 | 686 | ;
|
752 | 687 | ; PPC-PWR8-LABEL: stq_monotonic:
|
@@ -812,19 +747,10 @@ define dso_local void @stq_release(i128 %val, ptr %dst) {
|
812 | 747 | ;
|
813 | 748 | ; AIX64-PWR8-LABEL: stq_release:
|
814 | 749 | ; AIX64-PWR8: # %bb.0: # %entry
|
815 |
| -; AIX64-PWR8-NEXT: mflr r0 |
816 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
817 |
| -; AIX64-PWR8-NEXT: mr r6, r4 |
818 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
819 |
| -; AIX64-PWR8-NEXT: mr r3, r5 |
820 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
821 |
| -; AIX64-PWR8-NEXT: mr r5, r6 |
822 |
| -; AIX64-PWR8-NEXT: li r6, 3 |
823 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
824 |
| -; AIX64-PWR8-NEXT: nop |
825 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
826 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
827 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 750 | +; AIX64-PWR8-NEXT: lwsync |
| 751 | +; AIX64-PWR8-NEXT: mr r7, r4 |
| 752 | +; AIX64-PWR8-NEXT: mr r6, r3 |
| 753 | +; AIX64-PWR8-NEXT: stq r6, 0(r5) |
828 | 754 | ; AIX64-PWR8-NEXT: blr
|
829 | 755 | ;
|
830 | 756 | ; PPC-PWR8-LABEL: stq_release:
|
@@ -890,19 +816,10 @@ define dso_local void @stq_seqcst(i128 %val, ptr %dst) {
|
890 | 816 | ;
|
891 | 817 | ; AIX64-PWR8-LABEL: stq_seqcst:
|
892 | 818 | ; AIX64-PWR8: # %bb.0: # %entry
|
893 |
| -; AIX64-PWR8-NEXT: mflr r0 |
894 |
| -; AIX64-PWR8-NEXT: stdu r1, -112(r1) |
895 |
| -; AIX64-PWR8-NEXT: mr r6, r4 |
896 |
| -; AIX64-PWR8-NEXT: mr r4, r3 |
897 |
| -; AIX64-PWR8-NEXT: mr r3, r5 |
898 |
| -; AIX64-PWR8-NEXT: std r0, 128(r1) |
899 |
| -; AIX64-PWR8-NEXT: mr r5, r6 |
900 |
| -; AIX64-PWR8-NEXT: li r6, 5 |
901 |
| -; AIX64-PWR8-NEXT: bl .__atomic_store_16[PR] |
902 |
| -; AIX64-PWR8-NEXT: nop |
903 |
| -; AIX64-PWR8-NEXT: addi r1, r1, 112 |
904 |
| -; AIX64-PWR8-NEXT: ld r0, 16(r1) |
905 |
| -; AIX64-PWR8-NEXT: mtlr r0 |
| 819 | +; AIX64-PWR8-NEXT: sync |
| 820 | +; AIX64-PWR8-NEXT: mr r7, r4 |
| 821 | +; AIX64-PWR8-NEXT: mr r6, r3 |
| 822 | +; AIX64-PWR8-NEXT: stq r6, 0(r5) |
906 | 823 | ; AIX64-PWR8-NEXT: blr
|
907 | 824 | ;
|
908 | 825 | ; PPC-PWR8-LABEL: stq_seqcst:
|
|
0 commit comments