xref: /llvm-project/llvm/test/CodeGen/RISCV/rv64-trampoline.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
19d469b59SRoger Ferrer Ibáñez; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
29d469b59SRoger Ferrer Ibáñez; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
39d469b59SRoger Ferrer Ibáñez; RUN:   | FileCheck -check-prefix=RV64 %s
49d469b59SRoger Ferrer Ibáñez; RUN: llc -mtriple=riscv64-unknown-linux-gnu -verify-machineinstrs < %s \
59d469b59SRoger Ferrer Ibáñez; RUN:   | FileCheck -check-prefix=RV64-LINUX %s
69d469b59SRoger Ferrer Ibáñez
79d469b59SRoger Ferrer Ibáñezdeclare void @llvm.init.trampoline(ptr, ptr, ptr)
89d469b59SRoger Ferrer Ibáñezdeclare ptr @llvm.adjust.trampoline(ptr)
99d469b59SRoger Ferrer Ibáñezdeclare i64 @f(ptr nest, i64)
109d469b59SRoger Ferrer Ibáñez
119d469b59SRoger Ferrer Ibáñezdefine i64 @test0(i64 %n, ptr %p) nounwind {
129d469b59SRoger Ferrer Ibáñez; RV64-LABEL: test0:
139d469b59SRoger Ferrer Ibáñez; RV64:       # %bb.0:
149d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi sp, sp, -64
159d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
169d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
179d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
189d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    mv s0, a0
199d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    lui a0, %hi(f)
209d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi a0, a0, %lo(f)
21*9122c523SPengcheng Wang; RV64-NEXT:    li a2, 919
22*9122c523SPengcheng Wang; RV64-NEXT:    lui a3, %hi(.LCPI0_0)
239d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    sd a0, 32(sp)
24*9122c523SPengcheng Wang; RV64-NEXT:    lui a0, 6203
25*9122c523SPengcheng Wang; RV64-NEXT:    ld a3, %lo(.LCPI0_0)(a3)
26*9122c523SPengcheng Wang; RV64-NEXT:    addi a0, a0, 643
27*9122c523SPengcheng Wang; RV64-NEXT:    sw a2, 8(sp)
28*9122c523SPengcheng Wang; RV64-NEXT:    sw a0, 12(sp)
29*9122c523SPengcheng Wang; RV64-NEXT:    sd a3, 16(sp)
309d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    sd a1, 24(sp)
319d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi a1, sp, 24
329d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi a0, sp, 8
339d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi s1, sp, 8
349d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    call __clear_cache
359d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    mv a0, s0
369d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    jalr s1
379d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
389d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
399d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
409d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    addi sp, sp, 64
419d469b59SRoger Ferrer Ibáñez; RV64-NEXT:    ret
429d469b59SRoger Ferrer Ibáñez;
439d469b59SRoger Ferrer Ibáñez; RV64-LINUX-LABEL: test0:
449d469b59SRoger Ferrer Ibáñez; RV64-LINUX:       # %bb.0:
459d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi sp, sp, -64
469d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    sd ra, 56(sp) # 8-byte Folded Spill
479d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    sd s0, 48(sp) # 8-byte Folded Spill
489d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    sd s1, 40(sp) # 8-byte Folded Spill
499d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    mv s0, a0
509d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    lui a0, %hi(f)
519d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi a0, a0, %lo(f)
52*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    li a2, 919
53*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    lui a3, %hi(.LCPI0_0)
549d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    sd a0, 32(sp)
55*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    lui a0, 6203
56*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    ld a3, %lo(.LCPI0_0)(a3)
57*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    addi a0, a0, 643
58*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    sw a2, 8(sp)
59*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    sw a0, 12(sp)
60*9122c523SPengcheng Wang; RV64-LINUX-NEXT:    sd a3, 16(sp)
619d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    sd a1, 24(sp)
629d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi a1, sp, 24
639d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi a0, sp, 8
649d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi s1, sp, 8
659d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    li a2, 0
669d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    call __riscv_flush_icache
679d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    mv a0, s0
689d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    jalr s1
699d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    ld ra, 56(sp) # 8-byte Folded Reload
709d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    ld s0, 48(sp) # 8-byte Folded Reload
719d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    ld s1, 40(sp) # 8-byte Folded Reload
729d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    addi sp, sp, 64
739d469b59SRoger Ferrer Ibáñez; RV64-LINUX-NEXT:    ret
749d469b59SRoger Ferrer Ibáñez  %alloca = alloca [32 x i8], align 8
759d469b59SRoger Ferrer Ibáñez  call void @llvm.init.trampoline(ptr %alloca, ptr @f, ptr %p)
769d469b59SRoger Ferrer Ibáñez  %tramp = call ptr @llvm.adjust.trampoline(ptr %alloca)
779d469b59SRoger Ferrer Ibáñez  %ret = call i64 %tramp(i64 %n)
789d469b59SRoger Ferrer Ibáñez  ret i64 %ret
799d469b59SRoger Ferrer Ibáñez
809d469b59SRoger Ferrer Ibáñez}
81