|
2 | 2 | ; RUN: llc -mtriple=sparc %s -o - | FileCheck %s -check-prefix=V8
|
3 | 3 | ; RUN: llc -mtriple=sparc -mattr=v9 %s -o - | FileCheck %s -check-prefix=V9
|
4 | 4 | ; RUN: llc -mtriple=sparc64-unknown-linux %s -o - | FileCheck %s -check-prefix=SPARC64
|
| 5 | +; RUN: llc -mtriple=sparc64-unknown-linux -mattr=vis3 %s -o - | FileCheck %s -check-prefix=SPARC64-VIS3 |
5 | 6 |
|
6 | 7 | define i32 @test_addx(i64 %a, i64 %b, i64 %c) nounwind {
|
7 | 8 | ; V8-LABEL: test_addx:
|
@@ -60,6 +61,15 @@ define i32 @test_addx(i64 %a, i64 %b, i64 %c) nounwind {
|
60 | 61 | ; SPARC64-NEXT: movgu %xcc, 1, %o3
|
61 | 62 | ; SPARC64-NEXT: retl
|
62 | 63 | ; SPARC64-NEXT: srl %o3, 0, %o0
|
| 64 | +; |
| 65 | +; SPARC64-VIS3-LABEL: test_addx: |
| 66 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 67 | +; SPARC64-VIS3-NEXT: mov %g0, %o3 |
| 68 | +; SPARC64-VIS3-NEXT: add %o0, %o1, %o0 |
| 69 | +; SPARC64-VIS3-NEXT: cmp %o0, %o2 |
| 70 | +; SPARC64-VIS3-NEXT: movgu %xcc, 1, %o3 |
| 71 | +; SPARC64-VIS3-NEXT: retl |
| 72 | +; SPARC64-VIS3-NEXT: srl %o3, 0, %o0 |
63 | 73 | entry:
|
64 | 74 | %0 = add i64 %a, %b
|
65 | 75 | %1 = icmp ugt i64 %0, %c
|
@@ -92,6 +102,13 @@ define i32 @test_select_int_icc(i32 %a, i32 %b, i32 %c) nounwind {
|
92 | 102 | ; SPARC64-NEXT: move %icc, %o1, %o2
|
93 | 103 | ; SPARC64-NEXT: retl
|
94 | 104 | ; SPARC64-NEXT: mov %o2, %o0
|
| 105 | +; |
| 106 | +; SPARC64-VIS3-LABEL: test_select_int_icc: |
| 107 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 108 | +; SPARC64-VIS3-NEXT: cmp %o0, 0 |
| 109 | +; SPARC64-VIS3-NEXT: move %icc, %o1, %o2 |
| 110 | +; SPARC64-VIS3-NEXT: retl |
| 111 | +; SPARC64-VIS3-NEXT: mov %o2, %o0 |
95 | 112 | entry:
|
96 | 113 | %0 = icmp eq i32 %a, 0
|
97 | 114 | %1 = select i1 %0, i32 %b, i32 %c
|
@@ -133,6 +150,13 @@ define float @test_select_fp_icc(i32 %a, float %f1, float %f2) nounwind {
|
133 | 150 | ; SPARC64-NEXT: cmp %o0, 0
|
134 | 151 | ; SPARC64-NEXT: retl
|
135 | 152 | ; SPARC64-NEXT: fmovse %icc, %f3, %f0
|
| 153 | +; |
| 154 | +; SPARC64-VIS3-LABEL: test_select_fp_icc: |
| 155 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 156 | +; SPARC64-VIS3-NEXT: fmovs %f5, %f0 |
| 157 | +; SPARC64-VIS3-NEXT: cmp %o0, 0 |
| 158 | +; SPARC64-VIS3-NEXT: retl |
| 159 | +; SPARC64-VIS3-NEXT: fmovse %icc, %f3, %f0 |
136 | 160 | entry:
|
137 | 161 | %0 = icmp eq i32 %a, 0
|
138 | 162 | %1 = select i1 %0, float %f1, float %f2
|
@@ -182,6 +206,13 @@ define double @test_select_dfp_icc(i32 %a, double %f1, double %f2) nounwind {
|
182 | 206 | ; SPARC64-NEXT: cmp %o0, 0
|
183 | 207 | ; SPARC64-NEXT: retl
|
184 | 208 | ; SPARC64-NEXT: fmovde %icc, %f2, %f0
|
| 209 | +; |
| 210 | +; SPARC64-VIS3-LABEL: test_select_dfp_icc: |
| 211 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 212 | +; SPARC64-VIS3-NEXT: fmovd %f4, %f0 |
| 213 | +; SPARC64-VIS3-NEXT: cmp %o0, 0 |
| 214 | +; SPARC64-VIS3-NEXT: retl |
| 215 | +; SPARC64-VIS3-NEXT: fmovde %icc, %f2, %f0 |
185 | 216 | entry:
|
186 | 217 | %0 = icmp eq i32 %a, 0
|
187 | 218 | %1 = select i1 %0, double %f1, double %f2
|
@@ -229,6 +260,17 @@ define i32 @test_select_int_fcc(float %f, i32 %a, i32 %b) nounwind {
|
229 | 260 | ; SPARC64-NEXT: fcmps %fcc0, %f1, %f0
|
230 | 261 | ; SPARC64-NEXT: retl
|
231 | 262 | ; SPARC64-NEXT: movne %fcc0, %o1, %o0
|
| 263 | +; |
| 264 | +; SPARC64-VIS3-LABEL: test_select_int_fcc: |
| 265 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 266 | +; SPARC64-VIS3-NEXT: sethi %h44(.LCPI4_0), %o0 |
| 267 | +; SPARC64-VIS3-NEXT: add %o0, %m44(.LCPI4_0), %o0 |
| 268 | +; SPARC64-VIS3-NEXT: sllx %o0, 12, %o0 |
| 269 | +; SPARC64-VIS3-NEXT: ld [%o0+%l44(.LCPI4_0)], %f0 |
| 270 | +; SPARC64-VIS3-NEXT: mov %o2, %o0 |
| 271 | +; SPARC64-VIS3-NEXT: fcmps %fcc0, %f1, %f0 |
| 272 | +; SPARC64-VIS3-NEXT: retl |
| 273 | +; SPARC64-VIS3-NEXT: movne %fcc0, %o1, %o0 |
232 | 274 | entry:
|
233 | 275 | %0 = fcmp une float %f, 0.000000e+00
|
234 | 276 | %a.b = select i1 %0, i32 %a, i32 %b
|
@@ -284,6 +326,17 @@ define float @test_select_fp_fcc(float %f, float %f1, float %f2) nounwind {
|
284 | 326 | ; SPARC64-NEXT: fcmps %fcc0, %f1, %f2
|
285 | 327 | ; SPARC64-NEXT: retl
|
286 | 328 | ; SPARC64-NEXT: fmovsne %fcc0, %f3, %f0
|
| 329 | +; |
| 330 | +; SPARC64-VIS3-LABEL: test_select_fp_fcc: |
| 331 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 332 | +; SPARC64-VIS3-NEXT: sethi %h44(.LCPI5_0), %o0 |
| 333 | +; SPARC64-VIS3-NEXT: add %o0, %m44(.LCPI5_0), %o0 |
| 334 | +; SPARC64-VIS3-NEXT: sllx %o0, 12, %o0 |
| 335 | +; SPARC64-VIS3-NEXT: ld [%o0+%l44(.LCPI5_0)], %f2 |
| 336 | +; SPARC64-VIS3-NEXT: fmovs %f5, %f0 |
| 337 | +; SPARC64-VIS3-NEXT: fcmps %fcc0, %f1, %f2 |
| 338 | +; SPARC64-VIS3-NEXT: retl |
| 339 | +; SPARC64-VIS3-NEXT: fmovsne %fcc0, %f3, %f0 |
287 | 340 | entry:
|
288 | 341 | %0 = fcmp une float %f, 0.000000e+00
|
289 | 342 | %1 = select i1 %0, float %f1, float %f2
|
@@ -352,6 +405,18 @@ define double @test_select_dfp_fcc(double %f, double %f1, double %f2) nounwind {
|
352 | 405 | ; SPARC64-NEXT: fmovd %f4, %f0
|
353 | 406 | ; SPARC64-NEXT: retl
|
354 | 407 | ; SPARC64-NEXT: nop
|
| 408 | +; |
| 409 | +; SPARC64-VIS3-LABEL: test_select_dfp_fcc: |
| 410 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 411 | +; SPARC64-VIS3-NEXT: sethi %h44(.LCPI6_0), %o0 |
| 412 | +; SPARC64-VIS3-NEXT: add %o0, %m44(.LCPI6_0), %o0 |
| 413 | +; SPARC64-VIS3-NEXT: sllx %o0, 12, %o0 |
| 414 | +; SPARC64-VIS3-NEXT: ldd [%o0+%l44(.LCPI6_0)], %f6 |
| 415 | +; SPARC64-VIS3-NEXT: fcmpd %fcc0, %f0, %f6 |
| 416 | +; SPARC64-VIS3-NEXT: fmovdne %fcc0, %f2, %f4 |
| 417 | +; SPARC64-VIS3-NEXT: fmovd %f4, %f0 |
| 418 | +; SPARC64-VIS3-NEXT: retl |
| 419 | +; SPARC64-VIS3-NEXT: nop |
355 | 420 | entry:
|
356 | 421 | %0 = fcmp une double %f, 0.000000e+00
|
357 | 422 | %1 = select i1 %0, double %f1, double %f2
|
@@ -453,6 +518,31 @@ define i32 @test_float_cc(double %a, double %b, i32 %c, i32 %d) nounwind {
|
453 | 518 | ; SPARC64-NEXT: ! %bb.4: ! %exit.0
|
454 | 519 | ; SPARC64-NEXT: retl
|
455 | 520 | ; SPARC64-NEXT: mov %g0, %o0
|
| 521 | +; |
| 522 | +; SPARC64-VIS3-LABEL: test_float_cc: |
| 523 | +; SPARC64-VIS3: ! %bb.0: ! %entry |
| 524 | +; SPARC64-VIS3-NEXT: sethi %h44(.LCPI7_0), %o0 |
| 525 | +; SPARC64-VIS3-NEXT: add %o0, %m44(.LCPI7_0), %o0 |
| 526 | +; SPARC64-VIS3-NEXT: sllx %o0, 12, %o0 |
| 527 | +; SPARC64-VIS3-NEXT: ldd [%o0+%l44(.LCPI7_0)], %f4 |
| 528 | +; SPARC64-VIS3-NEXT: fcmpd %fcc0, %f0, %f4 |
| 529 | +; SPARC64-VIS3-NEXT: fbuge %fcc0, .LBB7_3 |
| 530 | +; SPARC64-VIS3-NEXT: nop |
| 531 | +; SPARC64-VIS3-NEXT: ! %bb.1: ! %loop.2 |
| 532 | +; SPARC64-VIS3-NEXT: fcmpd %fcc0, %f2, %f4 |
| 533 | +; SPARC64-VIS3-NEXT: fbule %fcc0, .LBB7_3 |
| 534 | +; SPARC64-VIS3-NEXT: nop |
| 535 | +; SPARC64-VIS3-NEXT: ! %bb.2: ! %exit.1 |
| 536 | +; SPARC64-VIS3-NEXT: retl |
| 537 | +; SPARC64-VIS3-NEXT: mov 1, %o0 |
| 538 | +; SPARC64-VIS3-NEXT: .LBB7_3: ! %loop |
| 539 | +; SPARC64-VIS3-NEXT: ! =>This Inner Loop Header: Depth=1 |
| 540 | +; SPARC64-VIS3-NEXT: cmp %o2, 10 |
| 541 | +; SPARC64-VIS3-NEXT: be %icc, .LBB7_3 |
| 542 | +; SPARC64-VIS3-NEXT: nop |
| 543 | +; SPARC64-VIS3-NEXT: ! %bb.4: ! %exit.0 |
| 544 | +; SPARC64-VIS3-NEXT: retl |
| 545 | +; SPARC64-VIS3-NEXT: mov %g0, %o0 |
456 | 546 | entry:
|
457 | 547 | %0 = fcmp uge double %a, 0.000000e+00
|
458 | 548 | br i1 %0, label %loop, label %loop.2
|
@@ -558,6 +648,34 @@ define void @test_adde_sube(ptr %a, ptr %b, ptr %sum, ptr %diff) nounwind {
|
558 | 648 | ; SPARC64-NEXT: stx %i0, [%i3]
|
559 | 649 | ; SPARC64-NEXT: ret
|
560 | 650 | ; SPARC64-NEXT: restore
|
| 651 | +; |
| 652 | +; SPARC64-VIS3-LABEL: test_adde_sube: |
| 653 | +; SPARC64-VIS3: .register %g2, #scratch |
| 654 | +; SPARC64-VIS3-NEXT: ! %bb.0: ! %entry |
| 655 | +; SPARC64-VIS3-NEXT: save %sp, -128, %sp |
| 656 | +; SPARC64-VIS3-NEXT: ldx [%i0+8], %i4 |
| 657 | +; SPARC64-VIS3-NEXT: ldx [%i0], %i5 |
| 658 | +; SPARC64-VIS3-NEXT: ldx [%i1+8], %g2 |
| 659 | +; SPARC64-VIS3-NEXT: ldx [%i1], %i1 |
| 660 | +; SPARC64-VIS3-NEXT: addcc %i4, %g2, %g2 |
| 661 | +; SPARC64-VIS3-NEXT: addxccc %i5, %i1, %i1 |
| 662 | +; SPARC64-VIS3-NEXT: stx %i1, [%i2] |
| 663 | +; SPARC64-VIS3-NEXT: stx %g2, [%i2+8] |
| 664 | +; SPARC64-VIS3-NEXT: !APP |
| 665 | +; SPARC64-VIS3-NEXT: !NO_APP |
| 666 | +; SPARC64-VIS3-NEXT: ldx [%i0+8], %i1 |
| 667 | +; SPARC64-VIS3-NEXT: mov %g0, %i2 |
| 668 | +; SPARC64-VIS3-NEXT: ldx [%i0], %i0 |
| 669 | +; SPARC64-VIS3-NEXT: cmp %i4, %i1 |
| 670 | +; SPARC64-VIS3-NEXT: movcs %xcc, 1, %i2 |
| 671 | +; SPARC64-VIS3-NEXT: srl %i2, 0, %i2 |
| 672 | +; SPARC64-VIS3-NEXT: sub %i5, %i0, %i0 |
| 673 | +; SPARC64-VIS3-NEXT: sub %i0, %i2, %i0 |
| 674 | +; SPARC64-VIS3-NEXT: sub %i4, %i1, %i1 |
| 675 | +; SPARC64-VIS3-NEXT: stx %i1, [%i3+8] |
| 676 | +; SPARC64-VIS3-NEXT: stx %i0, [%i3] |
| 677 | +; SPARC64-VIS3-NEXT: ret |
| 678 | +; SPARC64-VIS3-NEXT: restore |
561 | 679 | entry:
|
562 | 680 | %0 = bitcast ptr %a to ptr
|
563 | 681 | %1 = bitcast ptr %b to ptr
|
|
0 commit comments