18ddc8169SZi Xuan Wu; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 28ddc8169SZi Xuan Wu; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+2e3 | FileCheck %s 38ddc8169SZi Xuan Wu; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -relocation-model=pic -code-model=small -mattr=+2e3 | FileCheck %s --check-prefix=CHECK-PIC-SMALL 48ddc8169SZi Xuan Wu; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -relocation-model=pic -code-model=large -mattr=+2e3 | FileCheck %s --check-prefix=CHECK-PIC-LARGE 58ddc8169SZi Xuan Wu 6*423ac3d9SFangrui Song@p_fun = global ptr @bar, align 8 78ddc8169SZi Xuan Wu 88ddc8169SZi Xuan Wudeclare void @bar(i32, i32) 98ddc8169SZi Xuan Wu 10*423ac3d9SFangrui Songdefine void @foo(i32 %a, ptr %ptr){ 118ddc8169SZi Xuan Wu; CHECK-LABEL: foo: 128ddc8169SZi Xuan Wu; CHECK: # %bb.0: # %entry 138ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 4 148ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_def_cfa_offset 4 158ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 168ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_offset lr, -4 178ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_def_cfa_offset 4 188ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a1, (a1, 0) 198ddc8169SZi Xuan Wu; CHECK-NEXT: jsri32 [.LCPI0_0] 208ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 218ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 4 228ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 238ddc8169SZi Xuan Wu; 248ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-LABEL: foo: 258ddc8169SZi Xuan Wu; CHECK-PIC-SMALL: # %bb.0: # %entry 268ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: subi16 sp, sp, 8 278ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 8 288ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill 298ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 308ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_offset rgb, -4 318ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_offset lr, -8 328ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 8 338ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: lrw32 rgb, [.LCPI0_0] 348ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld16.w a1, (a1, 0) 358ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: lrw32 a2, [.LCPI0_1] 368ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ldr32.w a2, (rgb, a2 << 0) 378ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: jsr16 a2 388ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 398ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload 408ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: addi16 sp, sp, 8 418ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: rts16 428ddc8169SZi Xuan Wu; 438ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-LABEL: foo: 448ddc8169SZi Xuan Wu; CHECK-PIC-LARGE: # %bb.0: # %entry 458ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: subi16 sp, sp, 8 468ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8 478ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill 488ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 498ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_offset rgb, -4 508ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_offset lr, -8 518ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8 528ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: lrw32 rgb, [.LCPI0_0] 538ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld16.w a1, (a1, 0) 548ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: lrw32 a2, [.LCPI0_1] 558ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ldr32.w a2, (rgb, a2 << 0) 568ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: jsr16 a2 578ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 588ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload 598ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: addi16 sp, sp, 8 608ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: rts16 618ddc8169SZi Xuan Wu; CHECK-PIC-LABEL: foo: 628ddc8169SZi Xuan Wu; CHECK-PIC: # %bb.0: # %entry 638ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: ld32.w a1, a1, 0 648ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: br32 bar 658ddc8169SZi Xuan Wuentry: 66*423ac3d9SFangrui Song %0 = load i32, ptr %ptr 678ddc8169SZi Xuan Wu tail call void (i32, i32) @bar(i32 %a, i32 %0) 688ddc8169SZi Xuan Wu ret void 698ddc8169SZi Xuan Wu} 708ddc8169SZi Xuan Wu 71*423ac3d9SFangrui Songdefine void @foo_indirect(i32 %a, ptr %ptr) { 728ddc8169SZi Xuan Wu; CHECK-LABEL: foo_indirect: 738ddc8169SZi Xuan Wu; CHECK: # %bb.0: # %entry 748ddc8169SZi Xuan Wu; CHECK-NEXT: subi16 sp, sp, 4 758ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_def_cfa_offset 4 768ddc8169SZi Xuan Wu; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 778ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_offset lr, -4 788ddc8169SZi Xuan Wu; CHECK-NEXT: .cfi_def_cfa_offset 4 798ddc8169SZi Xuan Wu; CHECK-NEXT: lrw32 a2, [.LCPI1_0] 808ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a2, (a2, 0) 818ddc8169SZi Xuan Wu; CHECK-NEXT: ld16.w a1, (a1, 0) 828ddc8169SZi Xuan Wu; CHECK-NEXT: jsr16 a2 838ddc8169SZi Xuan Wu; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 848ddc8169SZi Xuan Wu; CHECK-NEXT: addi16 sp, sp, 4 858ddc8169SZi Xuan Wu; CHECK-NEXT: rts16 868ddc8169SZi Xuan Wu; 878ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-LABEL: foo_indirect: 888ddc8169SZi Xuan Wu; CHECK-PIC-SMALL: # %bb.0: # %entry 898ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: subi16 sp, sp, 8 908ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 8 918ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill 928ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 938ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_offset rgb, -4 948ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_offset lr, -8 958ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 8 968ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: lrw32 rgb, [.LCPI1_0] 978ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: lrw32 a2, [.LCPI1_1] 988ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ldr32.w a2, (rgb, a2 << 0) 998ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld16.w a2, (a2, 0) 1008ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld16.w a1, (a1, 0) 1018ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: jsr16 a2 1028ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1038ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload 1048ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: addi16 sp, sp, 8 1058ddc8169SZi Xuan Wu; CHECK-PIC-SMALL-NEXT: rts16 1068ddc8169SZi Xuan Wu; 1078ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-LABEL: foo_indirect: 1088ddc8169SZi Xuan Wu; CHECK-PIC-LARGE: # %bb.0: # %entry 1098ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: subi16 sp, sp, 8 1108ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8 1118ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill 1128ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill 1138ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_offset rgb, -4 1148ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_offset lr, -8 1158ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8 1168ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: lrw32 rgb, [.LCPI1_0] 1178ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: lrw32 a2, [.LCPI1_1] 1188ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ldr32.w a2, (rgb, a2 << 0) 1198ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld16.w a2, (a2, 0) 1208ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld16.w a1, (a1, 0) 1218ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: jsr16 a2 1228ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload 1238ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload 1248ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: addi16 sp, sp, 8 1258ddc8169SZi Xuan Wu; CHECK-PIC-LARGE-NEXT: rts16 1268ddc8169SZi Xuan Wu; CHECK-PIC-LABEL: foo_indirect: 1278ddc8169SZi Xuan Wu; CHECK-PIC: # %bb.0: # %entry 1288ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: movi32 a2, p_fun 1298ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: movih32 a3, p_fun 1308ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: or32 a2, a3, a2 1318ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: ld32.w a2, a2, 0 1328ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: ld32.w a1, a1, 0 1338ddc8169SZi Xuan Wu; CHECK-PIC-NEXT: jmp32 a2 1348ddc8169SZi Xuan Wuentry: 135*423ac3d9SFangrui Song %0 = load ptr, ptr @p_fun, align 8 136*423ac3d9SFangrui Song %1 = load i32, ptr %ptr 1378ddc8169SZi Xuan Wu tail call void (i32, i32) %0(i32 %a, i32 %1) 1388ddc8169SZi Xuan Wu ret void 1398ddc8169SZi Xuan Wu} 140