Skip to content

Commit abaaa48

Browse files
author
Chen Zheng
committed
[PowerPC] fix frameaddress error when there is dynamic alloca call, NFC
1 parent 749876e commit abaaa48

File tree

1 file changed

+138
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)