1; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu | \
2; RUN: FileCheck %s -check-prefix=PPC32-LINUX
3
4; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-unknown-linux-gnu \
5; RUN: -frame-pointer=all | FileCheck %s -check-prefix=PPC32-LINUX
6
7; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu | \
8; RUN: FileCheck %s -check-prefixes=PPC64,PPC64-LINUX
9
10; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu \
11; RUN: -frame-pointer=all | FileCheck %s -check-prefixes=PPC64,PPC64-LINUX
12
13; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \
14; RUN: -mtriple=powerpc-ibm-aix-xcoff | FileCheck %s \
15; RUN: -check-prefix=PPC32-AIX
16
17; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \
18; RUN: -mtriple=powerpc-ibm-aix-xcoff -frame-pointer=all | FileCheck %s \
19; RUN: -check-prefix=PPC32-AIX
20
21; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \
22; RUN: -mtriple=powerpc64-ibm-aix-xcoff | FileCheck %s \
23; RUN: -check-prefixes=PPC64,PPC64-AIX
24
25; RUN: llc -verify-machineinstrs < %s -mcpu=pwr4 -mattr=-altivec \
26; RUN: -mtriple=powerpc64-ibm-aix-xcoff -frame-pointer=all | FileCheck %s \
27; RUN: -check-prefixes=PPC64,PPC64-AIX
28
29define dso_local signext i32 @foo(i32 %n) {
30entry:
31  %ptr0 = alloca i32*
32  %0 = alloca i32, i32 %n
33  store i32* %0, i32** %ptr0
34  %1 = alloca i32, i32 %n
35  %2 = alloca i32, i32 %n
36  %3 = alloca i32, i32 %n
37  %4 = alloca i32, i32 %n
38  %5 = alloca i32, i32 %n
39  %6 = alloca i32, i32 %n
40  %7 = alloca i32, i32 %n
41  %8 = alloca i32, i32 %n
42  %9 = load i32*, i32** %ptr0
43
44  %call = call i32 @bar(i32* %1, i32* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9)
45  ret i32 %call
46}
47
48declare i32 @bar(i32*, i32*, i32*, i32*, i32*, i32*, i32*, i32*, i32*)
49
50; PPC32-LINUX-LABEL: foo
51; PPC32-LINUX: mflr 0
52; PPC32-LINUX: stw 0, 4(1)
53; PPC32-LINUX: stwu 1, -32(1)
54; PPC32-LINUX: stw 31, 28(1)
55; PPC32-LINUX: mr 31, 1
56; PPC32-LINUX: addi 3, 31, 32
57; PPC32-LINUX: stwux 3, 1, 10
58
59; Allocated area is referred by stack pointer.
60; PPC32-LINUX: addi 11, 1, 16
61
62; Local variable area is referred by frame pointer.
63; PPC32-LINUX: stw 11, 24(31)
64
65; PPC32-LINUX: stwux
66; PPC32-LINUX: stwux
67; PPC32-LINUX: stwux
68; PPC32-LINUX: stwux
69; PPC32-LINUX: stwux
70; PPC32-LINUX: stwux
71; PPC32-LINUX: stwux
72; PPC32-LINUX: stwux
73; PPC32-LINUX-NOT: stuwux
74
75; Parameter save area is referred by stack pointer.
76; PPC32-LINUX: stw 11, 8(1)
77
78; PPC32-LINUX: bl bar
79; PPC32-LINUX: lwz 31, 0(1)
80; PPC32-LINUX: lwz 0, -4(31)
81; PPC32-LINUX: mr 1, 31
82; PPC32-LINUX: mr 31, 0
83; PPC32-LINUX: lwz 0, 4(1)
84; PPC32-LINUX: mtlr 0
85; PPC32-LINUX: blr
86
87; PPC64-LABEL: foo
88; PPC64: mflr 0
89; PPC64: std 31, -8(1)
90; PPC64: std 0, 16(1)
91; PPC64: stdu 1, -160(1)
92; PPC64: mr 31, 1
93; PPC64: addi 3, 31, 160
94; PPC64: stdux 3, 1, 10
95
96; Allocated area is referred by stack pointer.
97; PPC64: addi 11, 1, 128
98
99; Local variable area is referred by frame pointer.
100; PPC64: std 11, 144(31)
101
102; PPC64: stdux
103; PPC64: stdux
104; PPC64: stdux
105; PPC64: stdux
106; PPC64: stdux
107; PPC64: stdux
108; PPC64: stdux
109; PPC64: stdux
110; PPC64-NOT: stdux
111
112; Parameter save area is referred by stack pointer.
113; PPC64: std 11, 112(1)
114
115; PPC64-LINUX: bl bar
116; PPC64-AIX: bl .bar
117; PPC64: ld 1, 0(1)
118; PPC64: ld 0, 16(1)
119; PPC64-DAG: ld 31, -8(1)
120; PPC64-DAG: mtlr 0
121; PPC64: blr
122
123; PPC32-AIX: mflr 0
124; PPC32-AIX: stw 31, -4(1)
125; PPC32-AIX: stw 0, 8(1)
126; PPC32-AIX: stwu 1, -80(1)
127; PPC32-AIX: mr 31, 1
128; PPC32-AIX: addi 3, 31, 80
129; PPC32-AIX: stwux 3, 1, 10
130
131; Allocated area is referred by stack pointer.
132; PPC32-AIX: addi 11, 1, 64
133
134; Local variable area is referred by frame pointer.
135; PPC32-AIX: stw 11, 72(31)
136
137; PPC32-AIX: stwux
138; PPC32-AIX: stwux
139; PPC32-AIX: stwux
140; PPC32-AIX: stwux
141; PPC32-AIX: stwux
142; PPC32-AIX: stwux
143; PPC32-AIX: stwux
144; PPC32-AIX: stwux
145; PPC32-AIX-NOT: stwux
146
147; Parameter save area is referred by stack pointer.
148; PPC32-AIX: stw 11, 56(1)
149
150; PPC32-AIX: bl .bar
151; PPC32-AIX: nop
152; PPC32-AIX: lwz 1, 0(1)
153; PPC32-AIX: lwz 0, 8(1)
154; PPC32-AIX-DAG: mtlr 0
155; PPC32-AIX-DAG: lwz 31, -4(1)
156; PPC32-AIX: blr
157