xref: /llvm-project/llvm/test/CodeGen/PowerPC/huge-frame-call.ll (revision a51712751c184ebe056718c938d2526693a31564)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-linux-gnu < %s \
3; RUN:   2>&1 | FileCheck --check-prefix=CHECK-LE %s
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-ibm-aix-xcoff -mcpu=ppc < %s \
5; RUN:   2>&1 | FileCheck --check-prefix=CHECK-BE %s
6
7%0 = type <{ i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, ptr, [8 x i8] }>
8@global.1 = internal global %0 <{ i32 129, i32 2, i32 118, i32 0, i32 5, i32 0, i32 0, i32 0, i32 120, i32 0, ptr @global.2, [8 x i8] c"\00\00\00\00\00\00\00\03" }>, align 4
9@global.2 = internal constant [3 x i8] c"x.c"
10@alias = dso_local alias i32 (), ptr @main
11
12define dso_local signext i32 @main() nounwind {
13; CHECK-LE-LABEL: main:
14; CHECK-LE:       # %bb.0: # %bb
15; CHECK-LE-NEXT:    mflr 0
16; CHECK-LE-NEXT:    std 0, 16(1)
17; CHECK-LE-NEXT:    lis 0, -1
18; CHECK-LE-NEXT:    ori 0, 0, 65535
19; CHECK-LE-NEXT:    sldi 0, 0, 32
20; CHECK-LE-NEXT:    oris 0, 0, 32767
21; CHECK-LE-NEXT:    ori 0, 0, 65120
22; CHECK-LE-NEXT:    stdux 1, 1, 0
23; CHECK-LE-NEXT:    lis 3, 0
24; CHECK-LE-NEXT:    sldi 3, 3, 32
25; CHECK-LE-NEXT:    oris 3, 3, 32768
26; CHECK-LE-NEXT:    ori 3, 3, 400
27; CHECK-LE-NEXT:    stdx 30, 1, 3 # 8-byte Folded Spill
28; CHECK-LE-NEXT:    bl pluto
29; CHECK-LE-NEXT:    nop
30; CHECK-LE-NEXT:    addis 3, 2, global.1@toc@ha
31; CHECK-LE-NEXT:    li 4, 257
32; CHECK-LE-NEXT:    li 7, 0
33; CHECK-LE-NEXT:    li 8, 0
34; CHECK-LE-NEXT:    li 9, 0
35; CHECK-LE-NEXT:    addi 5, 3, global.1@toc@l
36; CHECK-LE-NEXT:    li 3, 0
37; CHECK-LE-NEXT:    ori 6, 3, 32768
38; CHECK-LE-NEXT:    li 3, 6
39; CHECK-LE-NEXT:    bl snork
40; CHECK-LE-NEXT:    nop
41; CHECK-LE-NEXT:    mr 30, 3
42; CHECK-LE-NEXT:    li 3, 344
43; CHECK-LE-NEXT:    addi 4, 1, 48
44; CHECK-LE-NEXT:    li 5, 8
45; CHECK-LE-NEXT:    li 6, 8
46; CHECK-LE-NEXT:    oris 3, 3, 32768
47; CHECK-LE-NEXT:    add 4, 4, 3
48; CHECK-LE-NEXT:    mr 3, 30
49; CHECK-LE-NEXT:    bl zot
50; CHECK-LE-NEXT:    nop
51; CHECK-LE-NEXT:    mr 3, 30
52; CHECK-LE-NEXT:    bl wibble
53; CHECK-LE-NEXT:    nop
54; CHECK-LE-NEXT:    li 3, 0
55; CHECK-LE-NEXT:    bl snork.3
56; CHECK-LE-NEXT:    nop
57;
58; CHECK-BE-LABEL: main:
59; CHECK-BE:       # %bb.0: # %bb
60; CHECK-BE-NEXT:    mflr 0
61; CHECK-BE-NEXT:    std 0, 16(1)
62; CHECK-BE-NEXT:    lis 0, -1
63; CHECK-BE-NEXT:    ori 0, 0, 65535
64; CHECK-BE-NEXT:    sldi 0, 0, 32
65; CHECK-BE-NEXT:    oris 0, 0, 32767
66; CHECK-BE-NEXT:    ori 0, 0, 65056
67; CHECK-BE-NEXT:    stdux 1, 1, 0
68; CHECK-BE-NEXT:    lis 3, 0
69; CHECK-BE-NEXT:    sldi 3, 3, 32
70; CHECK-BE-NEXT:    oris 3, 3, 32768
71; CHECK-BE-NEXT:    ori 3, 3, 472
72; CHECK-BE-NEXT:    stdx 31, 1, 3 # 8-byte Folded Spill
73; CHECK-BE-NEXT:    bl .pluto[PR]
74; CHECK-BE-NEXT:    nop
75; CHECK-BE-NEXT:    ld 5, L..C0(2) # @global.1
76; CHECK-BE-NEXT:    li 3, 0
77; CHECK-BE-NEXT:    ori 6, 3, 32768
78; CHECK-BE-NEXT:    li 3, 6
79; CHECK-BE-NEXT:    li 4, 257
80; CHECK-BE-NEXT:    li 7, 0
81; CHECK-BE-NEXT:    li 8, 0
82; CHECK-BE-NEXT:    li 9, 0
83; CHECK-BE-NEXT:    bl .snork[PR]
84; CHECK-BE-NEXT:    nop
85; CHECK-BE-NEXT:    mr 31, 3
86; CHECK-BE-NEXT:    li 3, 344
87; CHECK-BE-NEXT:    oris 3, 3, 32768
88; CHECK-BE-NEXT:    addi 4, 1, 120
89; CHECK-BE-NEXT:    add 4, 4, 3
90; CHECK-BE-NEXT:    mr 3, 31
91; CHECK-BE-NEXT:    li 5, 8
92; CHECK-BE-NEXT:    li 6, 8
93; CHECK-BE-NEXT:    bl .zot[PR]
94; CHECK-BE-NEXT:    nop
95; CHECK-BE-NEXT:    mr 3, 31
96; CHECK-BE-NEXT:    bl .wibble[PR]
97; CHECK-BE-NEXT:    nop
98; CHECK-BE-NEXT:    li 3, 0
99; CHECK-BE-NEXT:    bl .snork.3[PR]
100; CHECK-BE-NEXT:    nop
101bb:
102  %tmp = alloca [2147484000 x i8], align 8
103  tail call void @pluto()
104  %tmp6 = tail call i64 @snork(i64 6, i32 257, ptr nonnull @global.1, i64 32768, ptr null, i64 0, ptr null)
105  %tmp7 = getelementptr inbounds [2147484000 x i8], ptr %tmp, i64 0, i64 2147483992
106  %tmp9 = call i64 @zot(i64 %tmp6, ptr nonnull %tmp7, i64 8, i64 8)
107  %tmp10 = call i64 @wibble(i64 %tmp6)
108  call void @snork.3(i64 0)
109  unreachable
110}
111
112declare void @pluto()
113
114declare signext i64 @snork(i64, i32, ptr, i64, ptr, i64, ptr)
115
116declare signext i64 @zot(i64, ptr, i64, i64)
117
118declare signext i64 @wibble(i64)
119
120declare void @snork.3(i64)
121