xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/function_prologue_epilogue.ll (revision b006b60dc993b2e0ba3e412c80709477241b6be6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=ve | FileCheck %s
3; RUN: llc < %s -mtriple=ve -relocation-model=pic \
4; RUN:     | FileCheck -check-prefix=PIC %s
5
6define void @func() {
7; CHECK-LABEL: func:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    b.l.t (, %s10)
10;
11; PIC-LABEL: func:
12; PIC:       # %bb.0:
13; PIC-NEXT:    b.l.t (, %s10)
14
15  ret void
16}
17
18@vi8 = common dso_local local_unnamed_addr global i8 0, align 1
19
20define i8 @func_gv() {
21; CHECK-LABEL: func_gv:
22; CHECK:       # %bb.0:
23; CHECK-NEXT:    lea %s0, vi8@lo
24; CHECK-NEXT:    and %s0, %s0, (32)0
25; CHECK-NEXT:    lea.sl %s0, vi8@hi(, %s0)
26; CHECK-NEXT:    ld1b.zx %s0, (, %s0)
27; CHECK-NEXT:    b.l.t (, %s10)
28;
29; PIC-LABEL: func_gv:
30; PIC:       # %bb.0:
31; PIC-NEXT:    st %s15, 24(, %s11)
32; PIC-NEXT:    st %s16, 32(, %s11)
33; PIC-NEXT:    lea %s15, _GLOBAL_OFFSET_TABLE_@pc_lo(-24)
34; PIC-NEXT:    and %s15, %s15, (32)0
35; PIC-NEXT:    sic %s16
36; PIC-NEXT:    lea.sl %s15, _GLOBAL_OFFSET_TABLE_@pc_hi(%s16, %s15)
37; PIC-NEXT:    lea %s0, vi8@got_lo
38; PIC-NEXT:    and %s0, %s0, (32)0
39; PIC-NEXT:    lea.sl %s0, vi8@got_hi(, %s0)
40; PIC-NEXT:    ld %s0, (%s0, %s15)
41; PIC-NEXT:    ld1b.zx %s0, (, %s0)
42; PIC-NEXT:    ld %s16, 32(, %s11)
43; PIC-NEXT:    ld %s15, 24(, %s11)
44; PIC-NEXT:    b.l.t (, %s10)
45
46  %v = load i8, ptr @vi8, align 1
47  ret i8 %v
48}
49
50define i32 @func_alloca(i32 signext %0) {
51; CHECK-LABEL: func_alloca:
52; CHECK:       # %bb.0:
53; CHECK-NEXT:    adds.l %s11, -16, %s11
54; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB2_2
55; CHECK-NEXT:  # %bb.1:
56; CHECK-NEXT:    ld %s61, 24(, %s14)
57; CHECK-NEXT:    or %s62, 0, %s0
58; CHECK-NEXT:    lea %s63, 315
59; CHECK-NEXT:    shm.l %s63, (%s61)
60; CHECK-NEXT:    shm.l %s8, 8(%s61)
61; CHECK-NEXT:    shm.l %s11, 16(%s61)
62; CHECK-NEXT:    monc
63; CHECK-NEXT:    or %s0, 0, %s62
64; CHECK-NEXT:  .LBB2_2:
65; CHECK-NEXT:    stl %s0, 12(, %s11)
66; CHECK-NEXT:    adds.l %s11, 16, %s11
67; CHECK-NEXT:    b.l.t (, %s10)
68;
69; PIC-LABEL: func_alloca:
70; PIC:       # %bb.0:
71; PIC-NEXT:    adds.l %s11, -16, %s11
72; PIC-NEXT:    brge.l.t %s11, %s8, .LBB2_2
73; PIC-NEXT:  # %bb.1:
74; PIC-NEXT:    ld %s61, 24(, %s14)
75; PIC-NEXT:    or %s62, 0, %s0
76; PIC-NEXT:    lea %s63, 315
77; PIC-NEXT:    shm.l %s63, (%s61)
78; PIC-NEXT:    shm.l %s8, 8(%s61)
79; PIC-NEXT:    shm.l %s11, 16(%s61)
80; PIC-NEXT:    monc
81; PIC-NEXT:    or %s0, 0, %s62
82; PIC-NEXT:  .LBB2_2:
83; PIC-NEXT:    stl %s0, 12(, %s11)
84; PIC-NEXT:    adds.l %s11, 16, %s11
85; PIC-NEXT:    b.l.t (, %s10)
86  %2 = alloca i32, align 4
87  store i32 %0, ptr %2, align 4
88  %3 = load i32, ptr %2, align 4
89  ret i32 %3
90}
91