18ddc8169SZi Xuan Wu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 28ddc8169SZi Xuan Wu; RUN: llc -mtriple=csky -verify-machineinstrs -csky-no-aliases -mattr=+2e3 < %s \ 38ddc8169SZi Xuan Wu; RUN: | FileCheck %s 48ddc8169SZi Xuan Wu 5*423ac3d9SFangrui Songdeclare void @notdead(ptr) 6*423ac3d9SFangrui Songdeclare ptr @llvm.frameaddress(i32) 7*423ac3d9SFangrui Songdeclare ptr @llvm.returnaddress(i32) 88ddc8169SZi Xuan Wu 9*423ac3d9SFangrui Songdefine ptr @test_frameaddress_0() nounwind { 108ddc8169SZi Xuan Wu; CHECK-LABEL: test_frameaddress_0: 118ddc8169SZi Xuan Wu; CHECK: # %bb.0: 128ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 4 138ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 148ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 l4, sp 158ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 a0, l4 168ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 sp, l4 178ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 188ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 4 198ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 20*423ac3d9SFangrui Song %1 = call ptr @llvm.frameaddress(i32 0) 21*423ac3d9SFangrui Song ret ptr %1 228ddc8169SZi Xuan Wu} 238ddc8169SZi Xuan Wu 24*423ac3d9SFangrui Songdefine ptr @test_frameaddress_2() nounwind { 258ddc8169SZi Xuan Wu; CHECK-LABEL: test_frameaddress_2: 268ddc8169SZi Xuan Wu; CHECK: # %bb.0: 278ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 4 288ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 298ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 l4, sp 308ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w a0, (l4, 0) 318ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a0, (a0, 0) 328ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 sp, l4 338ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 348ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 4 358ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 36*423ac3d9SFangrui Song %1 = call ptr @llvm.frameaddress(i32 2) 37*423ac3d9SFangrui Song ret ptr %1 388ddc8169SZi Xuan Wu} 398ddc8169SZi Xuan Wu 40*423ac3d9SFangrui Songdefine ptr @test_frameaddress_3_alloca() nounwind { 418ddc8169SZi Xuan Wu; CHECK-LABEL: test_frameaddress_3_alloca: 428ddc8169SZi Xuan Wu; CHECK: # %bb.0: 438ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 8 448ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w lr, (sp, 4) # 4-byte Folded Spill 458ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 468ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 l4, sp 478ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 100 488ddc8169SZi Xuan Wu; CHECK-NEXT: movi16 a0, 0 498ddc8169SZi Xuan Wu; CHECK-NEXT: addu16 a0, sp 508ddc8169SZi Xuan Wu; CHECK-NEXT: jsri32 [.LCPI2_0] 518ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w a0, (l4, 0) 528ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a0, (a0, 0) 538ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a0, (a0, 0) 548ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 sp, l4 558ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 568ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w lr, (sp, 4) # 4-byte Folded Reload 578ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 8 588ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 598ddc8169SZi Xuan Wu %1 = alloca [100 x i8] 60*423ac3d9SFangrui Song %2 = bitcast ptr %1 to ptr 61*423ac3d9SFangrui Song call void @notdead(ptr %2) 62*423ac3d9SFangrui Song %3 = call ptr @llvm.frameaddress(i32 3) 63*423ac3d9SFangrui Song ret ptr %3 648ddc8169SZi Xuan Wu} 658ddc8169SZi Xuan Wu 66*423ac3d9SFangrui Songdefine ptr @test_returnaddress_0() nounwind { 678ddc8169SZi Xuan Wu; CHECK-LABEL: test_returnaddress_0: 688ddc8169SZi Xuan Wu; CHECK: # %bb.0: 698ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 a0, lr 708ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 71*423ac3d9SFangrui Song %1 = call ptr @llvm.returnaddress(i32 0) 72*423ac3d9SFangrui Song ret ptr %1 738ddc8169SZi Xuan Wu} 748ddc8169SZi Xuan Wu 75*423ac3d9SFangrui Songdefine ptr @test_returnaddress_2() nounwind { 768ddc8169SZi Xuan Wu; CHECK-LABEL: test_returnaddress_2: 778ddc8169SZi Xuan Wu; CHECK: # %bb.0: 788ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 4 798ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w l4, (sp, 0) # 4-byte Folded Spill 808ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 l4, sp 818ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w a0, (l4, 0) 828ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a0, (a0, 0) 838ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a0, (a0, 4) 848ddc8169SZi Xuan Wu; CHECK-NEXT: mov16 sp, l4 858ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w l4, (sp, 0) # 4-byte Folded Reload 868ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 4 878ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 88*423ac3d9SFangrui Song %1 = call ptr @llvm.returnaddress(i32 2) 89*423ac3d9SFangrui Song ret ptr %1 908ddc8169SZi Xuan Wu} 91