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