140 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+2e3 | FileCheck %s3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -relocation-model=pic -code-model=small -mattr=+2e3 | FileCheck %s --check-prefix=CHECK-PIC-SMALL4; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -relocation-model=pic -code-model=large -mattr=+2e3 | FileCheck %s --check-prefix=CHECK-PIC-LARGE5 6@p_fun = global ptr @bar, align 87 8declare void @bar(i32, i32)9 10define void @foo(i32 %a, ptr %ptr){11; CHECK-LABEL: foo:12; CHECK: # %bb.0: # %entry13; CHECK-NEXT: subi16 sp, sp, 414; CHECK-NEXT: .cfi_def_cfa_offset 415; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill16; CHECK-NEXT: .cfi_offset lr, -417; CHECK-NEXT: .cfi_def_cfa_offset 418; CHECK-NEXT: ld16.w a1, (a1, 0)19; CHECK-NEXT: jsri32 [.LCPI0_0]20; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload21; CHECK-NEXT: addi16 sp, sp, 422; CHECK-NEXT: rts1623;24; CHECK-PIC-SMALL-LABEL: foo:25; CHECK-PIC-SMALL: # %bb.0: # %entry26; CHECK-PIC-SMALL-NEXT: subi16 sp, sp, 827; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 828; CHECK-PIC-SMALL-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill29; CHECK-PIC-SMALL-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill30; CHECK-PIC-SMALL-NEXT: .cfi_offset rgb, -431; CHECK-PIC-SMALL-NEXT: .cfi_offset lr, -832; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 833; CHECK-PIC-SMALL-NEXT: lrw32 rgb, [.LCPI0_0]34; CHECK-PIC-SMALL-NEXT: ld16.w a1, (a1, 0)35; CHECK-PIC-SMALL-NEXT: lrw32 a2, [.LCPI0_1]36; CHECK-PIC-SMALL-NEXT: ldr32.w a2, (rgb, a2 << 0)37; CHECK-PIC-SMALL-NEXT: jsr16 a238; CHECK-PIC-SMALL-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload39; CHECK-PIC-SMALL-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload40; CHECK-PIC-SMALL-NEXT: addi16 sp, sp, 841; CHECK-PIC-SMALL-NEXT: rts1642;43; CHECK-PIC-LARGE-LABEL: foo:44; CHECK-PIC-LARGE: # %bb.0: # %entry45; CHECK-PIC-LARGE-NEXT: subi16 sp, sp, 846; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 847; CHECK-PIC-LARGE-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill48; CHECK-PIC-LARGE-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill49; CHECK-PIC-LARGE-NEXT: .cfi_offset rgb, -450; CHECK-PIC-LARGE-NEXT: .cfi_offset lr, -851; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 852; CHECK-PIC-LARGE-NEXT: lrw32 rgb, [.LCPI0_0]53; CHECK-PIC-LARGE-NEXT: ld16.w a1, (a1, 0)54; CHECK-PIC-LARGE-NEXT: lrw32 a2, [.LCPI0_1]55; CHECK-PIC-LARGE-NEXT: ldr32.w a2, (rgb, a2 << 0)56; CHECK-PIC-LARGE-NEXT: jsr16 a257; CHECK-PIC-LARGE-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload58; CHECK-PIC-LARGE-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload59; CHECK-PIC-LARGE-NEXT: addi16 sp, sp, 860; CHECK-PIC-LARGE-NEXT: rts1661; CHECK-PIC-LABEL: foo:62; CHECK-PIC: # %bb.0: # %entry63; CHECK-PIC-NEXT: ld32.w a1, a1, 064; CHECK-PIC-NEXT: br32 bar65entry:66 %0 = load i32, ptr %ptr67 tail call void (i32, i32) @bar(i32 %a, i32 %0)68 ret void69}70 71define void @foo_indirect(i32 %a, ptr %ptr) {72; CHECK-LABEL: foo_indirect:73; CHECK: # %bb.0: # %entry74; CHECK-NEXT: subi16 sp, sp, 475; CHECK-NEXT: .cfi_def_cfa_offset 476; CHECK-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill77; CHECK-NEXT: .cfi_offset lr, -478; CHECK-NEXT: .cfi_def_cfa_offset 479; CHECK-NEXT: lrw32 a2, [.LCPI1_0]80; CHECK-NEXT: ld16.w a2, (a2, 0)81; CHECK-NEXT: ld16.w a1, (a1, 0)82; CHECK-NEXT: jsr16 a283; CHECK-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload84; CHECK-NEXT: addi16 sp, sp, 485; CHECK-NEXT: rts1686;87; CHECK-PIC-SMALL-LABEL: foo_indirect:88; CHECK-PIC-SMALL: # %bb.0: # %entry89; CHECK-PIC-SMALL-NEXT: subi16 sp, sp, 890; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 891; CHECK-PIC-SMALL-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill92; CHECK-PIC-SMALL-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill93; CHECK-PIC-SMALL-NEXT: .cfi_offset rgb, -494; CHECK-PIC-SMALL-NEXT: .cfi_offset lr, -895; CHECK-PIC-SMALL-NEXT: .cfi_def_cfa_offset 896; CHECK-PIC-SMALL-NEXT: lrw32 rgb, [.LCPI1_0]97; CHECK-PIC-SMALL-NEXT: lrw32 a2, [.LCPI1_1]98; CHECK-PIC-SMALL-NEXT: ldr32.w a2, (rgb, a2 << 0)99; CHECK-PIC-SMALL-NEXT: ld16.w a2, (a2, 0)100; CHECK-PIC-SMALL-NEXT: ld16.w a1, (a1, 0)101; CHECK-PIC-SMALL-NEXT: jsr16 a2102; CHECK-PIC-SMALL-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload103; CHECK-PIC-SMALL-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload104; CHECK-PIC-SMALL-NEXT: addi16 sp, sp, 8105; CHECK-PIC-SMALL-NEXT: rts16106;107; CHECK-PIC-LARGE-LABEL: foo_indirect:108; CHECK-PIC-LARGE: # %bb.0: # %entry109; CHECK-PIC-LARGE-NEXT: subi16 sp, sp, 8110; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8111; CHECK-PIC-LARGE-NEXT: st32.w rgb, (sp, 4) # 4-byte Folded Spill112; CHECK-PIC-LARGE-NEXT: st32.w lr, (sp, 0) # 4-byte Folded Spill113; CHECK-PIC-LARGE-NEXT: .cfi_offset rgb, -4114; CHECK-PIC-LARGE-NEXT: .cfi_offset lr, -8115; CHECK-PIC-LARGE-NEXT: .cfi_def_cfa_offset 8116; CHECK-PIC-LARGE-NEXT: lrw32 rgb, [.LCPI1_0]117; CHECK-PIC-LARGE-NEXT: lrw32 a2, [.LCPI1_1]118; CHECK-PIC-LARGE-NEXT: ldr32.w a2, (rgb, a2 << 0)119; CHECK-PIC-LARGE-NEXT: ld16.w a2, (a2, 0)120; CHECK-PIC-LARGE-NEXT: ld16.w a1, (a1, 0)121; CHECK-PIC-LARGE-NEXT: jsr16 a2122; CHECK-PIC-LARGE-NEXT: ld32.w lr, (sp, 0) # 4-byte Folded Reload123; CHECK-PIC-LARGE-NEXT: ld32.w rgb, (sp, 4) # 4-byte Folded Reload124; CHECK-PIC-LARGE-NEXT: addi16 sp, sp, 8125; CHECK-PIC-LARGE-NEXT: rts16126; CHECK-PIC-LABEL: foo_indirect:127; CHECK-PIC: # %bb.0: # %entry128; CHECK-PIC-NEXT: movi32 a2, p_fun129; CHECK-PIC-NEXT: movih32 a3, p_fun130; CHECK-PIC-NEXT: or32 a2, a3, a2131; CHECK-PIC-NEXT: ld32.w a2, a2, 0132; CHECK-PIC-NEXT: ld32.w a1, a1, 0133; CHECK-PIC-NEXT: jmp32 a2134entry:135 %0 = load ptr, ptr @p_fun, align 8136 %1 = load i32, ptr %ptr137 tail call void (i32, i32) %0(i32 %a, i32 %1)138 ret void139}140