|
11 | 11 | ; RUN: | FileCheck -check-prefix=RV64I-MEDIUM %s
|
12 | 12 | ; RUN: llc -code-model=large -mtriple=riscv64 -verify-machineinstrs < %s \
|
13 | 13 | ; RUN: | FileCheck -check-prefix=RV64I-LARGE %s
|
| 14 | +; RUN: llc -code-model=large -mtriple=riscv64 -mattr=experimental-zicfilp -verify-machineinstrs < %s \ |
| 15 | +; RUN: | FileCheck -check-prefix=RV64I-LARGE-ZICFILP %s |
14 | 16 |
|
15 | 17 | declare i32 @external_function(i32)
|
16 | 18 |
|
@@ -62,6 +64,19 @@ define i32 @test_call_external(i32 %a) nounwind {
|
62 | 64 | ; RV64I-LARGE-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
63 | 65 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
64 | 66 | ; RV64I-LARGE-NEXT: ret
|
| 67 | +; |
| 68 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_external: |
| 69 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 70 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 71 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 72 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 73 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi0: |
| 74 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a1, %pcrel_hi(.LCPI0_0) |
| 75 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi0)(a1) |
| 76 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 77 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 78 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 79 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
65 | 80 | %1 = call i32 @external_function(i32 %a)
|
66 | 81 | ret i32 %1
|
67 | 82 | }
|
@@ -116,6 +131,19 @@ define i32 @test_call_dso_local(i32 %a) nounwind {
|
116 | 131 | ; RV64I-LARGE-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
117 | 132 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
118 | 133 | ; RV64I-LARGE-NEXT: ret
|
| 134 | +; |
| 135 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_dso_local: |
| 136 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 137 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 138 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 139 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 140 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi1: |
| 141 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a1, %pcrel_hi(.LCPI1_0) |
| 142 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi1)(a1) |
| 143 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 144 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 145 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 146 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
119 | 147 | %1 = call i32 @dso_local_function(i32 %a)
|
120 | 148 | ret i32 %1
|
121 | 149 | }
|
@@ -145,6 +173,12 @@ define i32 @defined_function(i32 %a) nounwind {
|
145 | 173 | ; RV64I-LARGE: # %bb.0:
|
146 | 174 | ; RV64I-LARGE-NEXT: addiw a0, a0, 1
|
147 | 175 | ; RV64I-LARGE-NEXT: ret
|
| 176 | +; |
| 177 | +; RV64I-LARGE-ZICFILP-LABEL: defined_function: |
| 178 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 179 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 180 | +; RV64I-LARGE-ZICFILP-NEXT: addiw a0, a0, 1 |
| 181 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
148 | 182 | %1 = add i32 %a, 1
|
149 | 183 | ret i32 %1
|
150 | 184 | }
|
@@ -197,6 +231,19 @@ define i32 @test_call_defined(i32 %a) nounwind {
|
197 | 231 | ; RV64I-LARGE-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
198 | 232 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
199 | 233 | ; RV64I-LARGE-NEXT: ret
|
| 234 | +; |
| 235 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_defined: |
| 236 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 237 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 238 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 239 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 240 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi2: |
| 241 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a1, %pcrel_hi(.LCPI3_0) |
| 242 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi2)(a1) |
| 243 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 244 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 245 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 246 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
200 | 247 | %1 = call i32 @defined_function(i32 %a)
|
201 | 248 | ret i32 %1
|
202 | 249 | }
|
@@ -256,6 +303,18 @@ define i32 @test_call_indirect(ptr %a, i32 %b) nounwind {
|
256 | 303 | ; RV64I-LARGE-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
257 | 304 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
258 | 305 | ; RV64I-LARGE-NEXT: ret
|
| 306 | +; |
| 307 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_indirect: |
| 308 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 309 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 310 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 311 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 312 | +; RV64I-LARGE-ZICFILP-NEXT: mv a2, a0 |
| 313 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, a1 |
| 314 | +; RV64I-LARGE-ZICFILP-NEXT: jalr a2 |
| 315 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 316 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 317 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
259 | 318 | %1 = call i32 %a(i32 %b)
|
260 | 319 | ret i32 %1
|
261 | 320 | }
|
@@ -347,6 +406,24 @@ define i32 @test_call_indirect_no_t0(ptr %a, i32 %b, i32 %c, i32 %d, i32 %e, i32
|
347 | 406 | ; RV64I-LARGE-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
|
348 | 407 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
349 | 408 | ; RV64I-LARGE-NEXT: ret
|
| 409 | +; |
| 410 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_indirect_no_t0: |
| 411 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 412 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 413 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 414 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 415 | +; RV64I-LARGE-ZICFILP-NEXT: mv t1, a0 |
| 416 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, a1 |
| 417 | +; RV64I-LARGE-ZICFILP-NEXT: mv a1, a2 |
| 418 | +; RV64I-LARGE-ZICFILP-NEXT: mv a2, a3 |
| 419 | +; RV64I-LARGE-ZICFILP-NEXT: mv a3, a4 |
| 420 | +; RV64I-LARGE-ZICFILP-NEXT: mv a4, a5 |
| 421 | +; RV64I-LARGE-ZICFILP-NEXT: mv a5, a6 |
| 422 | +; RV64I-LARGE-ZICFILP-NEXT: mv a6, a7 |
| 423 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t1 |
| 424 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 425 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 426 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
350 | 427 | %1 = call i32 %a(i32 %b, i32 %c, i32 %d, i32 %e, i32 %f, i32 %g, i32 %h)
|
351 | 428 | ret i32 %1
|
352 | 429 | }
|
@@ -379,6 +456,12 @@ define fastcc i32 @fastcc_function(i32 %a, i32 %b) nounwind {
|
379 | 456 | ; RV64I-LARGE: # %bb.0:
|
380 | 457 | ; RV64I-LARGE-NEXT: addw a0, a0, a1
|
381 | 458 | ; RV64I-LARGE-NEXT: ret
|
| 459 | +; |
| 460 | +; RV64I-LARGE-ZICFILP-LABEL: fastcc_function: |
| 461 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 462 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 463 | +; RV64I-LARGE-ZICFILP-NEXT: addw a0, a0, a1 |
| 464 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
382 | 465 | %1 = add i32 %a, %b
|
383 | 466 | ret i32 %1
|
384 | 467 | }
|
@@ -452,6 +535,24 @@ define i32 @test_call_fastcc(i32 %a, i32 %b) nounwind {
|
452 | 535 | ; RV64I-LARGE-NEXT: ld s0, 0(sp) # 8-byte Folded Reload
|
453 | 536 | ; RV64I-LARGE-NEXT: addi sp, sp, 16
|
454 | 537 | ; RV64I-LARGE-NEXT: ret
|
| 538 | +; |
| 539 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_fastcc: |
| 540 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 541 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 542 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -16 |
| 543 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 8(sp) # 8-byte Folded Spill |
| 544 | +; RV64I-LARGE-ZICFILP-NEXT: sd s0, 0(sp) # 8-byte Folded Spill |
| 545 | +; RV64I-LARGE-ZICFILP-NEXT: mv s0, a0 |
| 546 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi3: |
| 547 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a0, %pcrel_hi(.LCPI7_0) |
| 548 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi3)(a0) |
| 549 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, s0 |
| 550 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 551 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, s0 |
| 552 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 8(sp) # 8-byte Folded Reload |
| 553 | +; RV64I-LARGE-ZICFILP-NEXT: ld s0, 0(sp) # 8-byte Folded Reload |
| 554 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 16 |
| 555 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
455 | 556 | %1 = call fastcc i32 @fastcc_function(i32 %a, i32 %b)
|
456 | 557 | ret i32 %a
|
457 | 558 | }
|
@@ -572,6 +673,33 @@ define i32 @test_call_external_many_args(i32 %a) nounwind {
|
572 | 673 | ; RV64I-LARGE-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
|
573 | 674 | ; RV64I-LARGE-NEXT: addi sp, sp, 32
|
574 | 675 | ; RV64I-LARGE-NEXT: ret
|
| 676 | +; |
| 677 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_external_many_args: |
| 678 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 679 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 680 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -32 |
| 681 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
| 682 | +; RV64I-LARGE-ZICFILP-NEXT: sd s0, 16(sp) # 8-byte Folded Spill |
| 683 | +; RV64I-LARGE-ZICFILP-NEXT: mv s0, a0 |
| 684 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi4: |
| 685 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a0, %pcrel_hi(.LCPI8_0) |
| 686 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi4)(a0) |
| 687 | +; RV64I-LARGE-ZICFILP-NEXT: sd s0, 8(sp) |
| 688 | +; RV64I-LARGE-ZICFILP-NEXT: sd s0, 0(sp) |
| 689 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, s0 |
| 690 | +; RV64I-LARGE-ZICFILP-NEXT: mv a1, s0 |
| 691 | +; RV64I-LARGE-ZICFILP-NEXT: mv a2, s0 |
| 692 | +; RV64I-LARGE-ZICFILP-NEXT: mv a3, s0 |
| 693 | +; RV64I-LARGE-ZICFILP-NEXT: mv a4, s0 |
| 694 | +; RV64I-LARGE-ZICFILP-NEXT: mv a5, s0 |
| 695 | +; RV64I-LARGE-ZICFILP-NEXT: mv a6, s0 |
| 696 | +; RV64I-LARGE-ZICFILP-NEXT: mv a7, s0 |
| 697 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 698 | +; RV64I-LARGE-ZICFILP-NEXT: mv a0, s0 |
| 699 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
| 700 | +; RV64I-LARGE-ZICFILP-NEXT: ld s0, 16(sp) # 8-byte Folded Reload |
| 701 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 32 |
| 702 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
575 | 703 | %1 = call i32 @external_many_args(i32 %a, i32 %a, i32 %a, i32 %a, i32 %a,
|
576 | 704 | i32 %a, i32 %a, i32 %a, i32 %a, i32 %a)
|
577 | 705 | ret i32 %a
|
@@ -607,6 +735,13 @@ define i32 @defined_many_args(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32 %
|
607 | 735 | ; RV64I-LARGE-NEXT: lw a0, 8(sp)
|
608 | 736 | ; RV64I-LARGE-NEXT: addiw a0, a0, 1
|
609 | 737 | ; RV64I-LARGE-NEXT: ret
|
| 738 | +; |
| 739 | +; RV64I-LARGE-ZICFILP-LABEL: defined_many_args: |
| 740 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 741 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 742 | +; RV64I-LARGE-ZICFILP-NEXT: lw a0, 8(sp) |
| 743 | +; RV64I-LARGE-ZICFILP-NEXT: addiw a0, a0, 1 |
| 744 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
610 | 745 | %added = add i32 %j, 1
|
611 | 746 | ret i32 %added
|
612 | 747 | }
|
@@ -704,6 +839,28 @@ define i32 @test_call_defined_many_args(i32 %a) nounwind {
|
704 | 839 | ; RV64I-LARGE-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
|
705 | 840 | ; RV64I-LARGE-NEXT: addi sp, sp, 32
|
706 | 841 | ; RV64I-LARGE-NEXT: ret
|
| 842 | +; |
| 843 | +; RV64I-LARGE-ZICFILP-LABEL: test_call_defined_many_args: |
| 844 | +; RV64I-LARGE-ZICFILP: # %bb.0: |
| 845 | +; RV64I-LARGE-ZICFILP-NEXT: lpad 0 |
| 846 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, -32 |
| 847 | +; RV64I-LARGE-ZICFILP-NEXT: sd ra, 24(sp) # 8-byte Folded Spill |
| 848 | +; RV64I-LARGE-ZICFILP-NEXT: .Lpcrel_hi5: |
| 849 | +; RV64I-LARGE-ZICFILP-NEXT: auipc a1, %pcrel_hi(.LCPI10_0) |
| 850 | +; RV64I-LARGE-ZICFILP-NEXT: ld t2, %pcrel_lo(.Lpcrel_hi5)(a1) |
| 851 | +; RV64I-LARGE-ZICFILP-NEXT: sd a0, 8(sp) |
| 852 | +; RV64I-LARGE-ZICFILP-NEXT: sd a0, 0(sp) |
| 853 | +; RV64I-LARGE-ZICFILP-NEXT: mv a1, a0 |
| 854 | +; RV64I-LARGE-ZICFILP-NEXT: mv a2, a0 |
| 855 | +; RV64I-LARGE-ZICFILP-NEXT: mv a3, a0 |
| 856 | +; RV64I-LARGE-ZICFILP-NEXT: mv a4, a0 |
| 857 | +; RV64I-LARGE-ZICFILP-NEXT: mv a5, a0 |
| 858 | +; RV64I-LARGE-ZICFILP-NEXT: mv a6, a0 |
| 859 | +; RV64I-LARGE-ZICFILP-NEXT: mv a7, a0 |
| 860 | +; RV64I-LARGE-ZICFILP-NEXT: jalr t2 |
| 861 | +; RV64I-LARGE-ZICFILP-NEXT: ld ra, 24(sp) # 8-byte Folded Reload |
| 862 | +; RV64I-LARGE-ZICFILP-NEXT: addi sp, sp, 32 |
| 863 | +; RV64I-LARGE-ZICFILP-NEXT: ret |
707 | 864 | %1 = call i32 @defined_many_args(i32 %a, i32 %a, i32 %a, i32 %a, i32 %a,
|
708 | 865 | i32 %a, i32 %a, i32 %a, i32 %a, i32 %a)
|
709 | 866 | ret i32 %1
|
|
0 commit comments