xref: /llvm-project/llvm/test/CodeGen/CSKY/call.ll (revision 423ac3d9ee82ff48da91b35ec80497089bc55b9e)
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