xref: /llvm-project/llvm/test/CodeGen/PowerPC/naked-fn-with-frame-pointer.ll (revision ad4a582fd938c933e784f0052bd773676b37b690)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2; RUN: llc < %s -mtriple powerpc | FileCheck %s -check-prefixes=CHECK-32-BE
3; RUN: llc < %s -mtriple powerpcle | FileCheck %s -check-prefixes=CHECK-32-LE
4; RUN: llc < %s -mtriple powerpc64 | FileCheck %s -check-prefixes=CHECK-64-BE
5; RUN: llc < %s -mtriple powerpc64le | FileCheck %s -check-prefixes=CHECK-64-LE
6
7declare dso_local void @main()
8
9define dso_local void @naked() naked "frame-pointer"="all" {
10; CHECK-32-BE-LABEL: naked:
11; CHECK-32-BE:       # %bb.0:
12; CHECK-32-BE-NEXT:    bl main
13;
14; CHECK-32-LE-LABEL: naked:
15; CHECK-32-LE:       # %bb.0:
16; CHECK-32-LE-NEXT:    bl main
17;
18; CHECK-64-BE-LABEL: naked:
19; CHECK-64-BE:       # %bb.0:
20; CHECK-64-BE-NEXT:    bl main
21; CHECK-64-BE-NEXT:    nop
22;
23; CHECK-64-LE-LABEL: naked:
24; CHECK-64-LE:       # %bb.0:
25; CHECK-64-LE-NEXT:    bl main
26; CHECK-64-LE-NEXT:    nop
27  call void @main()
28  unreachable
29}
30
31define dso_local void @normal() "frame-pointer"="all" {
32; CHECK-32-BE-LABEL: normal:
33; CHECK-32-BE:       # %bb.0:
34; CHECK-32-BE-NEXT:    mflr 0
35; CHECK-32-BE-NEXT:    stwu 1, -16(1)
36; CHECK-32-BE-NEXT:    stw 31, 12(1)
37; CHECK-32-BE-NEXT:    stw 0, 20(1)
38; CHECK-32-BE-NEXT:    .cfi_def_cfa_offset 16
39; CHECK-32-BE-NEXT:    .cfi_offset r31, -4
40; CHECK-32-BE-NEXT:    .cfi_offset lr, 4
41; CHECK-32-BE-NEXT:    mr 31, 1
42; CHECK-32-BE-NEXT:    .cfi_def_cfa_register r31
43; CHECK-32-BE-NEXT:    bl main
44;
45; CHECK-32-LE-LABEL: normal:
46; CHECK-32-LE:       # %bb.0:
47; CHECK-32-LE-NEXT:    mflr 0
48; CHECK-32-LE-NEXT:    stwu 1, -16(1)
49; CHECK-32-LE-NEXT:    stw 31, 12(1)
50; CHECK-32-LE-NEXT:    stw 0, 20(1)
51; CHECK-32-LE-NEXT:    .cfi_def_cfa_offset 16
52; CHECK-32-LE-NEXT:    .cfi_offset r31, -4
53; CHECK-32-LE-NEXT:    .cfi_offset lr, 4
54; CHECK-32-LE-NEXT:    mr 31, 1
55; CHECK-32-LE-NEXT:    .cfi_def_cfa_register r31
56; CHECK-32-LE-NEXT:    bl main
57;
58; CHECK-64-BE-LABEL: normal:
59; CHECK-64-BE:       # %bb.0:
60; CHECK-64-BE-NEXT:    mflr 0
61; CHECK-64-BE-NEXT:    std 31, -8(1)
62; CHECK-64-BE-NEXT:    stdu 1, -128(1)
63; CHECK-64-BE-NEXT:    std 0, 144(1)
64; CHECK-64-BE-NEXT:    .cfi_def_cfa_offset 128
65; CHECK-64-BE-NEXT:    .cfi_offset r31, -8
66; CHECK-64-BE-NEXT:    .cfi_offset lr, 16
67; CHECK-64-BE-NEXT:    mr 31, 1
68; CHECK-64-BE-NEXT:    .cfi_def_cfa_register r31
69; CHECK-64-BE-NEXT:    bl main
70; CHECK-64-BE-NEXT:    nop
71;
72; CHECK-64-LE-LABEL: normal:
73; CHECK-64-LE:       # %bb.0:
74; CHECK-64-LE-NEXT:    mflr 0
75; CHECK-64-LE-NEXT:    std 31, -8(1)
76; CHECK-64-LE-NEXT:    stdu 1, -48(1)
77; CHECK-64-LE-NEXT:    std 0, 64(1)
78; CHECK-64-LE-NEXT:    .cfi_def_cfa_offset 48
79; CHECK-64-LE-NEXT:    .cfi_offset r31, -8
80; CHECK-64-LE-NEXT:    .cfi_offset lr, 16
81; CHECK-64-LE-NEXT:    mr 31, 1
82; CHECK-64-LE-NEXT:    .cfi_def_cfa_register r31
83; CHECK-64-LE-NEXT:    bl main
84; CHECK-64-LE-NEXT:    nop
85  call void @main()
86  unreachable
87}
88