xref: /llvm-project/llvm/test/CodeGen/PowerPC/frameaddr-alloca.ll (revision e1c03ddc9b03b820b421d8b3bca6a94e4d1a4675)
1abaaa48cSChen Zheng; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2abaaa48cSChen Zheng; RUN: llc -mtriple=powerpc-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX32
3abaaa48cSChen Zheng; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=AIX64
4abaaa48cSChen Zheng; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu -verify-machineinstrs < %s -mcpu=pwr7 | FileCheck %s --check-prefix=LE
5abaaa48cSChen Zheng
6abaaa48cSChen Zhengdefine ptr @frame_1(i32 signext %num) nounwind {
7abaaa48cSChen Zheng; AIX32-LABEL: frame_1:
8abaaa48cSChen Zheng; AIX32:       # %bb.0: # %entry
9abaaa48cSChen Zheng; AIX32-NEXT:    stw 31, -4(1)
10abaaa48cSChen Zheng; AIX32-NEXT:    stwu 1, -48(1)
11abaaa48cSChen Zheng; AIX32-NEXT:    addi 3, 3, 15
12abaaa48cSChen Zheng; AIX32-NEXT:    mr 31, 1
13abaaa48cSChen Zheng; AIX32-NEXT:    addi 4, 31, 48
14abaaa48cSChen Zheng; AIX32-NEXT:    rlwinm 3, 3, 0, 0, 27
15abaaa48cSChen Zheng; AIX32-NEXT:    neg 3, 3
16abaaa48cSChen Zheng; AIX32-NEXT:    stwux 4, 1, 3
17abaaa48cSChen Zheng; AIX32-NEXT:    addi 3, 1, 32
18abaaa48cSChen Zheng; AIX32-NEXT:    lbz 4, 0(3)
19abaaa48cSChen Zheng; AIX32-NEXT:    addi 4, 4, 1
20abaaa48cSChen Zheng; AIX32-NEXT:    stb 4, 0(3)
21*e1c03ddcSChen Zheng; AIX32-NEXT:    lwz 3, 0(1)
22abaaa48cSChen Zheng; AIX32-NEXT:    lwz 1, 0(1)
23abaaa48cSChen Zheng; AIX32-NEXT:    lwz 31, -4(1)
24abaaa48cSChen Zheng; AIX32-NEXT:    blr
25abaaa48cSChen Zheng;
26abaaa48cSChen Zheng; AIX64-LABEL: frame_1:
27abaaa48cSChen Zheng; AIX64:       # %bb.0: # %entry
28abaaa48cSChen Zheng; AIX64-NEXT:    std 31, -8(1)
29abaaa48cSChen Zheng; AIX64-NEXT:    stdu 1, -64(1)
30abaaa48cSChen Zheng; AIX64-NEXT:    addi 3, 3, 15
31abaaa48cSChen Zheng; AIX64-NEXT:    mr 31, 1
32abaaa48cSChen Zheng; AIX64-NEXT:    addi 4, 31, 64
33abaaa48cSChen Zheng; AIX64-NEXT:    rldicr 3, 3, 0, 59
34abaaa48cSChen Zheng; AIX64-NEXT:    neg 3, 3
35abaaa48cSChen Zheng; AIX64-NEXT:    stdux 4, 1, 3
36abaaa48cSChen Zheng; AIX64-NEXT:    addi 3, 1, 48
37abaaa48cSChen Zheng; AIX64-NEXT:    lbz 4, 0(3)
38abaaa48cSChen Zheng; AIX64-NEXT:    addi 4, 4, 1
39abaaa48cSChen Zheng; AIX64-NEXT:    stb 4, 0(3)
40*e1c03ddcSChen Zheng; AIX64-NEXT:    ld 3, 0(1)
41abaaa48cSChen Zheng; AIX64-NEXT:    ld 1, 0(1)
42abaaa48cSChen Zheng; AIX64-NEXT:    ld 31, -8(1)
43abaaa48cSChen Zheng; AIX64-NEXT:    blr
44abaaa48cSChen Zheng;
45abaaa48cSChen Zheng; LE-LABEL: frame_1:
46abaaa48cSChen Zheng; LE:       # %bb.0: # %entry
47abaaa48cSChen Zheng; LE-NEXT:    std 31, -8(1)
48abaaa48cSChen Zheng; LE-NEXT:    stdu 1, -48(1)
49abaaa48cSChen Zheng; LE-NEXT:    addi 3, 3, 15
50abaaa48cSChen Zheng; LE-NEXT:    mr 31, 1
51abaaa48cSChen Zheng; LE-NEXT:    addi 4, 31, 48
52abaaa48cSChen Zheng; LE-NEXT:    rldicr 3, 3, 0, 59
53abaaa48cSChen Zheng; LE-NEXT:    neg 3, 3
54abaaa48cSChen Zheng; LE-NEXT:    stdux 4, 1, 3
55abaaa48cSChen Zheng; LE-NEXT:    addi 3, 1, 32
56abaaa48cSChen Zheng; LE-NEXT:    lbz 4, 0(3)
57abaaa48cSChen Zheng; LE-NEXT:    addi 4, 4, 1
58abaaa48cSChen Zheng; LE-NEXT:    stb 4, 0(3)
59*e1c03ddcSChen Zheng; LE-NEXT:    ld 3, 0(1)
60abaaa48cSChen Zheng; LE-NEXT:    ld 1, 0(1)
61abaaa48cSChen Zheng; LE-NEXT:    ld 31, -8(1)
62abaaa48cSChen Zheng; LE-NEXT:    blr
63abaaa48cSChen Zhengentry:
64abaaa48cSChen Zheng  %conv = sext i32 %num to i64
65abaaa48cSChen Zheng  %0 = alloca i8, i64 %conv, align 16
66abaaa48cSChen Zheng  %1 = load volatile i8, ptr %0, align 16
67abaaa48cSChen Zheng  %inc = add i8 %1, 1
68abaaa48cSChen Zheng  store volatile i8 %inc, ptr %0, align 16
69abaaa48cSChen Zheng  %2 = tail call ptr @llvm.frameaddress.p0(i32 1)
70abaaa48cSChen Zheng  ret ptr %2
71abaaa48cSChen Zheng}
72abaaa48cSChen Zheng
73abaaa48cSChen Zhengdefine ptr @frame_0(i32 signext %num) nounwind {
74abaaa48cSChen Zheng; AIX32-LABEL: frame_0:
75abaaa48cSChen Zheng; AIX32:       # %bb.0: # %entry
76abaaa48cSChen Zheng; AIX32-NEXT:    stw 31, -4(1)
77abaaa48cSChen Zheng; AIX32-NEXT:    stwu 1, -48(1)
78abaaa48cSChen Zheng; AIX32-NEXT:    addi 3, 3, 15
79abaaa48cSChen Zheng; AIX32-NEXT:    mr 31, 1
80abaaa48cSChen Zheng; AIX32-NEXT:    addi 4, 31, 48
81abaaa48cSChen Zheng; AIX32-NEXT:    rlwinm 3, 3, 0, 0, 27
82abaaa48cSChen Zheng; AIX32-NEXT:    neg 3, 3
83abaaa48cSChen Zheng; AIX32-NEXT:    stwux 4, 1, 3
84abaaa48cSChen Zheng; AIX32-NEXT:    addi 3, 1, 32
85abaaa48cSChen Zheng; AIX32-NEXT:    lbz 4, 0(3)
86abaaa48cSChen Zheng; AIX32-NEXT:    addi 4, 4, 1
87abaaa48cSChen Zheng; AIX32-NEXT:    stb 4, 0(3)
88*e1c03ddcSChen Zheng; AIX32-NEXT:    mr 3, 1
89abaaa48cSChen Zheng; AIX32-NEXT:    lwz 1, 0(1)
90abaaa48cSChen Zheng; AIX32-NEXT:    lwz 31, -4(1)
91abaaa48cSChen Zheng; AIX32-NEXT:    blr
92abaaa48cSChen Zheng;
93abaaa48cSChen Zheng; AIX64-LABEL: frame_0:
94abaaa48cSChen Zheng; AIX64:       # %bb.0: # %entry
95abaaa48cSChen Zheng; AIX64-NEXT:    std 31, -8(1)
96abaaa48cSChen Zheng; AIX64-NEXT:    stdu 1, -64(1)
97abaaa48cSChen Zheng; AIX64-NEXT:    addi 3, 3, 15
98abaaa48cSChen Zheng; AIX64-NEXT:    mr 31, 1
99abaaa48cSChen Zheng; AIX64-NEXT:    addi 4, 31, 64
100abaaa48cSChen Zheng; AIX64-NEXT:    rldicr 3, 3, 0, 59
101abaaa48cSChen Zheng; AIX64-NEXT:    neg 3, 3
102abaaa48cSChen Zheng; AIX64-NEXT:    stdux 4, 1, 3
103abaaa48cSChen Zheng; AIX64-NEXT:    addi 3, 1, 48
104abaaa48cSChen Zheng; AIX64-NEXT:    lbz 4, 0(3)
105abaaa48cSChen Zheng; AIX64-NEXT:    addi 4, 4, 1
106abaaa48cSChen Zheng; AIX64-NEXT:    stb 4, 0(3)
107*e1c03ddcSChen Zheng; AIX64-NEXT:    mr 3, 1
108abaaa48cSChen Zheng; AIX64-NEXT:    ld 1, 0(1)
109abaaa48cSChen Zheng; AIX64-NEXT:    ld 31, -8(1)
110abaaa48cSChen Zheng; AIX64-NEXT:    blr
111abaaa48cSChen Zheng;
112abaaa48cSChen Zheng; LE-LABEL: frame_0:
113abaaa48cSChen Zheng; LE:       # %bb.0: # %entry
114abaaa48cSChen Zheng; LE-NEXT:    std 31, -8(1)
115abaaa48cSChen Zheng; LE-NEXT:    stdu 1, -48(1)
116abaaa48cSChen Zheng; LE-NEXT:    addi 3, 3, 15
117abaaa48cSChen Zheng; LE-NEXT:    mr 31, 1
118abaaa48cSChen Zheng; LE-NEXT:    addi 4, 31, 48
119abaaa48cSChen Zheng; LE-NEXT:    rldicr 3, 3, 0, 59
120abaaa48cSChen Zheng; LE-NEXT:    neg 3, 3
121abaaa48cSChen Zheng; LE-NEXT:    stdux 4, 1, 3
122abaaa48cSChen Zheng; LE-NEXT:    addi 3, 1, 32
123abaaa48cSChen Zheng; LE-NEXT:    lbz 4, 0(3)
124abaaa48cSChen Zheng; LE-NEXT:    addi 4, 4, 1
125abaaa48cSChen Zheng; LE-NEXT:    stb 4, 0(3)
126*e1c03ddcSChen Zheng; LE-NEXT:    mr 3, 1
127abaaa48cSChen Zheng; LE-NEXT:    ld 1, 0(1)
128abaaa48cSChen Zheng; LE-NEXT:    ld 31, -8(1)
129abaaa48cSChen Zheng; LE-NEXT:    blr
130abaaa48cSChen Zhengentry:
131abaaa48cSChen Zheng  %conv = sext i32 %num to i64
132abaaa48cSChen Zheng  %0 = alloca i8, i64 %conv, align 16
133abaaa48cSChen Zheng  %1 = load volatile i8, ptr %0, align 16
134abaaa48cSChen Zheng  %inc = add i8 %1, 1
135abaaa48cSChen Zheng  store volatile i8 %inc, ptr %0, align 16
136abaaa48cSChen Zheng  %2 = tail call ptr @llvm.frameaddress.p0(i32 0)
137abaaa48cSChen Zheng  ret ptr %2
138abaaa48cSChen Zheng}
139