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