Skip to content

Commit 561eca4

Browse files
committed
[PowerPC] Split tests into asm and mir parts (NFC)
To allow both to be generated.
1 parent ee4c2bb commit 561eca4

File tree

4 files changed

+686
-605
lines changed

4 files changed

+686
-605
lines changed
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -O2 -mtriple powerpc-ibm-aix-xcoff -mcpu=ppc -stop-after=machine-cp -verify-machineinstrs < %s | FileCheck %s
3+
4+
define i32 @int_va_arg(i32 %a, ...) local_unnamed_addr {
5+
; CHECK-LABEL: name: int_va_arg
6+
; CHECK: bb.0.entry:
7+
; CHECK-NEXT: liveins: $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10
8+
; CHECK-NEXT: {{ $}}
9+
; CHECK-NEXT: renamable $r11 = ADDI %fixed-stack.0, 0
10+
; CHECK-NEXT: STW killed renamable $r4, 0, %fixed-stack.0 :: (store (s32) into %fixed-stack.0)
11+
; CHECK-NEXT: STW killed renamable $r6, 8, %fixed-stack.0 :: (store (s32))
12+
; CHECK-NEXT: STW killed renamable $r7, 12, %fixed-stack.0 :: (store (s32))
13+
; CHECK-NEXT: STW killed renamable $r8, 16, %fixed-stack.0 :: (store (s32))
14+
; CHECK-NEXT: STW killed renamable $r9, 20, %fixed-stack.0 :: (store (s32))
15+
; CHECK-NEXT: STW killed renamable $r10, 24, %fixed-stack.0 :: (store (s32))
16+
; CHECK-NEXT: STW renamable $r11, 0, %stack.0.arg1 :: (store (s32) into %ir.arg1)
17+
; CHECK-NEXT: STW killed renamable $r11, 0, %stack.1.arg2 :: (store (s32) into %ir.arg2)
18+
; CHECK-NEXT: renamable $r4 = ADDI %fixed-stack.0, 4
19+
; CHECK-NEXT: STW renamable $r4, 0, %stack.0.arg1 :: (store (s32) into %ir.arg1)
20+
; CHECK-NEXT: renamable $r6 = LWZ 0, %fixed-stack.0 :: (load (s32) from %ir.argp.cur)
21+
; CHECK-NEXT: STW killed renamable $r4, 0, %stack.1.arg2 :: (store (s32) into %ir.arg2)
22+
; CHECK-NEXT: renamable $r4 = LWZ 0, %fixed-stack.0 :: (load (s32) from %ir.argp.cur2)
23+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r6, killed renamable $r3
24+
; CHECK-NEXT: renamable $r4 = RLWINM killed renamable $r4, 1, 0, 30
25+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r4
26+
; CHECK-NEXT: STW killed renamable $r5, 4, %fixed-stack.0 :: (store (s32) into %fixed-stack.0 + 4)
27+
; CHECK-NEXT: BLR implicit $lr, implicit $rm, implicit $r3
28+
entry:
29+
%arg1 = alloca ptr, align 4
30+
%arg2 = alloca ptr, align 4
31+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg1)
32+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg2)
33+
call void @llvm.va_start(ptr nonnull %arg1)
34+
call void @llvm.va_copy(ptr nonnull %arg2, ptr nonnull %arg1)
35+
%argp.cur = load ptr, ptr %arg1, align 4
36+
%argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 4
37+
store ptr %argp.next, ptr %arg1, align 4
38+
%0 = load i32, ptr %argp.cur, align 4
39+
%add = add nsw i32 %0, %a
40+
%argp.cur2 = load ptr, ptr %arg2, align 4
41+
%argp.next3 = getelementptr inbounds i8, ptr %argp.cur2, i32 4
42+
store ptr %argp.next3, ptr %arg2, align 4
43+
%1 = load i32, ptr %argp.cur2, align 4
44+
%mul = shl i32 %1, 1
45+
%add4 = add nsw i32 %add, %mul
46+
call void @llvm.va_end(ptr nonnull %arg1)
47+
call void @llvm.va_end(ptr nonnull %arg2)
48+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg2)
49+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg1)
50+
ret i32 %add4
51+
}
52+
53+
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
54+
declare void @llvm.va_start(ptr)
55+
declare void @llvm.va_copy(ptr, ptr)
56+
declare void @llvm.va_end(ptr)
57+
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
58+
59+
define i32 @int_stack_va_arg(i32 %one, i32 %two, i32 %three, i32 %four, i32 %five, i32 %six, i32 %seven, i32 %eight, ...) local_unnamed_addr {
60+
; CHECK-LABEL: name: int_stack_va_arg
61+
; CHECK: bb.0.entry:
62+
; CHECK-NEXT: liveins: $r3, $r4, $r5, $r6, $r7, $r8, $r9, $r10
63+
; CHECK-NEXT: {{ $}}
64+
; CHECK-NEXT: renamable $r11 = LI 4
65+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r4, killed renamable $r3
66+
; CHECK-NEXT: renamable $r4 = ADDI %fixed-stack.0, 0
67+
; CHECK-NEXT: renamable $r4 = RLWIMI killed renamable $r4, killed renamable $r11, 0, 29, 29
68+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r5
69+
; CHECK-NEXT: STW killed renamable $r4, 0, %stack.0.arg1 :: (store (s32) into %ir.arg1)
70+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r6
71+
; CHECK-NEXT: renamable $r4 = LWZ 0, %fixed-stack.0 :: (load (s32) from %ir.argp.cur9, align 8)
72+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r7
73+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r8
74+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r9
75+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r10
76+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, renamable $r4
77+
; CHECK-NEXT: renamable $r4 = RLWINM killed renamable $r4, 1, 0, 30
78+
; CHECK-NEXT: renamable $r3 = nsw ADD4 killed renamable $r3, killed renamable $r4
79+
; CHECK-NEXT: BLR implicit $lr, implicit $rm, implicit $r3
80+
entry:
81+
%arg1 = alloca ptr, align 4
82+
%arg2 = alloca ptr, align 4
83+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg1)
84+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg2)
85+
call void @llvm.va_start(ptr nonnull %arg1)
86+
call void @llvm.va_copy(ptr nonnull %arg2, ptr nonnull %arg1)
87+
%add = add nsw i32 %two, %one
88+
%add2 = add nsw i32 %add, %three
89+
%add3 = add nsw i32 %add2, %four
90+
%add4 = add nsw i32 %add3, %five
91+
%add5 = add nsw i32 %add4, %six
92+
%add6 = add nsw i32 %add5, %seven
93+
%add7 = add nsw i32 %add6, %eight
94+
%argp.cur = load ptr, ptr %arg1, align 4
95+
%argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 4
96+
store ptr %argp.next, ptr %arg1, align 4
97+
%0 = load i32, ptr %argp.cur, align 4
98+
%add8 = add nsw i32 %add7, %0
99+
%argp.cur9 = load ptr, ptr %arg2, align 4
100+
%argp.next10 = getelementptr inbounds i8, ptr %argp.cur9, i32 4
101+
store ptr %argp.next10, ptr %arg2, align 4
102+
%1 = load i32, ptr %argp.cur9, align 4
103+
%mul = shl i32 %1, 1
104+
%add11 = add nsw i32 %add8, %mul
105+
call void @llvm.va_end(ptr nonnull %arg1)
106+
call void @llvm.va_end(ptr nonnull %arg2)
107+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg2)
108+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg1)
109+
ret i32 %add11
110+
}
111+
112+
define double @double_va_arg(double %a, ...) local_unnamed_addr {
113+
; CHECK-LABEL: name: double_va_arg
114+
; CHECK: bb.0.entry:
115+
; CHECK-NEXT: liveins: $f1, $r5, $r6, $r7, $r8, $r9, $r10
116+
; CHECK-NEXT: {{ $}}
117+
; CHECK-NEXT: renamable $r3 = ADDI %fixed-stack.0, 0
118+
; CHECK-NEXT: STW killed renamable $r7, 8, %fixed-stack.0 :: (store (s32), align 8)
119+
; CHECK-NEXT: STW renamable $r5, 0, %fixed-stack.0 :: (store (s32) into %fixed-stack.0, align 16)
120+
; CHECK-NEXT: STW renamable $r6, 4, %fixed-stack.0 :: (store (s32) into %fixed-stack.0 + 4)
121+
; CHECK-NEXT: STW killed renamable $r8, 12, %fixed-stack.0 :: (store (s32))
122+
; CHECK-NEXT: STW killed renamable $r9, 16, %fixed-stack.0 :: (store (s32) into %fixed-stack.0 + 16, align 16)
123+
; CHECK-NEXT: STW killed renamable $r10, 20, %fixed-stack.0 :: (store (s32))
124+
; CHECK-NEXT: STW renamable $r3, 0, %stack.0.arg1 :: (store (s32) into %ir.arg1)
125+
; CHECK-NEXT: STW killed renamable $r3, 0, %stack.1.arg2 :: (store (s32) into %ir.arg2)
126+
; CHECK-NEXT: STW renamable $r5, 0, %stack.2 :: (store (s32) into %stack.2, align 8)
127+
; CHECK-NEXT: STW renamable $r6, 4, %stack.2 :: (store (s32) into %stack.2 + 4)
128+
; CHECK-NEXT: renamable $f0 = LFD 0, %stack.2 :: (load (s64) from %stack.2)
129+
; CHECK-NEXT: STW killed renamable $r5, 0, %stack.3 :: (store (s32) into %stack.3, align 8)
130+
; CHECK-NEXT: STW killed renamable $r6, 4, %stack.3 :: (store (s32) into %stack.3 + 4)
131+
; CHECK-NEXT: renamable $f2 = LFD 0, %stack.3 :: (load (s64) from %stack.3)
132+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f1, implicit $rm
133+
; CHECK-NEXT: renamable $f1 = nofpexcept FADD killed renamable $f2, renamable $f2, implicit $rm
134+
; CHECK-NEXT: renamable $f1 = nofpexcept FADD killed renamable $f0, killed renamable $f1, implicit $rm
135+
; CHECK-NEXT: BLR implicit $lr, implicit $rm, implicit $f1
136+
entry:
137+
%arg1 = alloca ptr, align 4
138+
%arg2 = alloca ptr, align 4
139+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg1)
140+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg2)
141+
call void @llvm.va_start(ptr nonnull %arg1)
142+
call void @llvm.va_copy(ptr nonnull %arg2, ptr nonnull %arg1)
143+
%argp.cur = load ptr, ptr %arg1, align 4
144+
%argp.next = getelementptr inbounds i8, ptr %argp.cur, i32 8
145+
store ptr %argp.next, ptr %arg1, align 4
146+
%0 = load double, ptr %argp.cur, align 4
147+
%add = fadd double %0, %a
148+
%argp.cur2 = load ptr, ptr %arg2, align 4
149+
%argp.next3 = getelementptr inbounds i8, ptr %argp.cur2, i32 8
150+
store ptr %argp.next3, ptr %arg2, align 4
151+
%1 = load double, ptr %argp.cur2, align 4
152+
%mul = fmul double %1, 2.000000e+00
153+
%add4 = fadd double %add, %mul
154+
call void @llvm.va_end(ptr nonnull %arg1)
155+
call void @llvm.va_end(ptr nonnull %arg2)
156+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg2)
157+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg1)
158+
ret double %add4
159+
}
160+
161+
define double @double_stack_va_arg(double %one, double %two, double %three, double %four, double %five, double %six, double %seven, double %eight, double %nine, double %ten, double %eleven, double %twelve, double %thirteen, ...) local_unnamed_addr {
162+
; CHECK-LABEL: name: double_stack_va_arg
163+
; CHECK: bb.0.entry:
164+
; CHECK-NEXT: liveins: $f1, $f2, $f3, $f4, $f5, $f6, $f7, $f8, $f9, $f10, $f11, $f12, $f13
165+
; CHECK-NEXT: {{ $}}
166+
; CHECK-NEXT: renamable $r3 = ADDI %fixed-stack.0, 0
167+
; CHECK-NEXT: STW killed renamable $r3, 0, %stack.0.arg1 :: (store (s32) into %ir.arg1)
168+
; CHECK-NEXT: renamable $r3 = LWZ 0, %fixed-stack.0 :: (load (s32) from %ir.argp.cur142, align 16)
169+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f1, killed renamable $f2, implicit $rm
170+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f3, implicit $rm
171+
; CHECK-NEXT: STW renamable $r3, 0, %stack.2 :: (store (s32) into %stack.2, align 8)
172+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f4, implicit $rm
173+
; CHECK-NEXT: renamable $r4 = LWZ 4, %fixed-stack.0 :: (load (s32) from %ir.argp.cur142 + 4)
174+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f5, implicit $rm
175+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f6, implicit $rm
176+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f7, implicit $rm
177+
; CHECK-NEXT: STW renamable $r4, 4, %stack.2 :: (store (s32) into %stack.2 + 4)
178+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f8, implicit $rm
179+
; CHECK-NEXT: renamable $f1 = LFD 0, %stack.2 :: (load (s64) from %stack.2)
180+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f9, implicit $rm
181+
; CHECK-NEXT: STW killed renamable $r3, 0, %stack.3 :: (store (s32) into %stack.3, align 8)
182+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f10, implicit $rm
183+
; CHECK-NEXT: STW killed renamable $r4, 4, %stack.3 :: (store (s32) into %stack.3 + 4)
184+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f11, implicit $rm
185+
; CHECK-NEXT: renamable $f2 = LFD 0, %stack.3 :: (load (s64) from %stack.3)
186+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f12, implicit $rm
187+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f13, implicit $rm
188+
; CHECK-NEXT: renamable $f0 = nofpexcept FADD killed renamable $f0, killed renamable $f1, implicit $rm
189+
; CHECK-NEXT: renamable $f1 = nofpexcept FADD killed renamable $f2, renamable $f2, implicit $rm
190+
; CHECK-NEXT: renamable $f1 = nofpexcept FADD killed renamable $f0, killed renamable $f1, implicit $rm
191+
; CHECK-NEXT: BLR implicit $lr, implicit $rm, implicit $f1
192+
entry:
193+
%arg1 = alloca ptr, align 4
194+
%arg2 = alloca ptr, align 4
195+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg1)
196+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %arg2)
197+
call void @llvm.va_start(ptr nonnull %arg1)
198+
call void @llvm.va_copy(ptr nonnull %arg2, ptr nonnull %arg1)
199+
%add = fadd double %one, %two
200+
%add2 = fadd double %add, %three
201+
%add3 = fadd double %add2, %four
202+
%add4 = fadd double %add3, %five
203+
%add5 = fadd double %add4, %six
204+
%add6 = fadd double %add5, %seven
205+
%add7 = fadd double %add6, %eight
206+
%add8 = fadd double %add7, %nine
207+
%add9 = fadd double %add8, %ten
208+
%add10 = fadd double %add9, %eleven
209+
%add11 = fadd double %add10, %twelve
210+
%add12 = fadd double %add11, %thirteen
211+
%argp.cur1 = load ptr, ptr %arg1, align 4
212+
%0 = load double, ptr %argp.cur1, align 4
213+
%add13 = fadd double %add12, %0
214+
%argp.cur142 = load ptr, ptr %arg2, align 4
215+
%1 = load double, ptr %argp.cur142, align 4
216+
%mul = fmul double %1, 2.000000e+00
217+
%add16 = fadd double %add13, %mul
218+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg2)
219+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %arg1)
220+
ret double %add16
221+
}

0 commit comments

Comments
 (0)