Skip to content

Commit 4f96f6f

Browse files
committed
[ARM] Add test demonstrating parameter overwrite during copy
1 parent a02e574 commit 4f96f6f

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
; RUN: llc -mtriple thumbv7em-apple-darwin -o - < %s | FileCheck %s
2+
3+
%"struct.s1" = type { [19 x i32] }
4+
5+
define void @f0(ptr byval(%"struct.s1") %0, ptr %1) #1 {
6+
; CHECK-LABEL: _f0: @ @f0
7+
; CHECK-NEXT: @ %bb.0:
8+
; CHECK-NEXT: sub sp, #16
9+
; CHECK-NEXT: push {r4, lr}
10+
; CHECK-NEXT: sub sp, #76
11+
; CHECK-NEXT: add.w r9, sp, #84
12+
; CHECK-NEXT: stm.w r9, {r0, r1, r2, r3}
13+
; CHECK-NEXT: mov r0, sp
14+
; CHECK-NEXT: add r1, sp, #84
15+
; CHECK-NEXT: movs r2, #76
16+
; CHECK-NEXT: mov r3, r0
17+
; CHECK-NEXT: LBB0_1: @ =>This Inner Loop Header: Depth=1
18+
; CHECK-NEXT: ldr r4, [r1], #4
19+
; CHECK-NEXT: subs r2, #4
20+
; CHECK-NEXT: str r4, [r3], #4
21+
; CHECK-NEXT: bne LBB0_1
22+
; CHECK-NEXT: @ %bb.2:
23+
; CHECK-NEXT: add.w r1, r0, #12
24+
; CHECK-NEXT: add r0, sp, #100
25+
; CHECK-NEXT: ldr r2, [r1], #4
26+
; CHECK-NEXT: str r2, [r0], #4
27+
; CHECK-NEXT: ldr r2, [r1], #4
28+
; CHECK-NEXT: str r2, [r0], #4
29+
; CHECK-NEXT: ldr r2, [r1], #4
30+
; CHECK-NEXT: str r2, [r0], #4
31+
; CHECK-NEXT: ldr r2, [r1], #4
32+
; CHECK-NEXT: str r2, [r0], #4
33+
; CHECK-NEXT: ldr r2, [r1], #4
34+
; CHECK-NEXT: str r2, [r0], #4
35+
; CHECK-NEXT: ldr r2, [r1], #4
36+
; CHECK-NEXT: str r2, [r0], #4
37+
; CHECK-NEXT: ldr r2, [r1], #4
38+
; CHECK-NEXT: str r2, [r0], #4
39+
; CHECK-NEXT: ldr r2, [r1], #4
40+
; CHECK-NEXT: str r2, [r0], #4
41+
; CHECK-NEXT: ldr r2, [r1], #4
42+
; CHECK-NEXT: str r2, [r0], #4
43+
; CHECK-NEXT: ldr r2, [r1], #4
44+
; CHECK-NEXT: str r2, [r0], #4
45+
; CHECK-NEXT: ldr r2, [r1], #4
46+
; CHECK-NEXT: str r2, [r0], #4
47+
; CHECK-NEXT: ldr r2, [r1], #4
48+
; CHECK-NEXT: str r2, [r0], #4
49+
; CHECK-NEXT: ldr r2, [r1], #4
50+
; CHECK-NEXT: str r2, [r0], #4
51+
; CHECK-NEXT: ldr r2, [r1], #4
52+
; CHECK-NEXT: str r2, [r0], #4
53+
; CHECK-NEXT: ldr r2, [r1], #4
54+
; CHECK-NEXT: str r2, [r0], #4
55+
; CHECK-NEXT: ldr r2, [r1], #4
56+
; CHECK-NEXT: str r2, [r0], #4
57+
; CHECK-NEXT: ldm.w sp, {r1, r2, r3}
58+
; CHECK-NEXT: ldr r0, [sp, #160]
59+
; CHECK-NEXT: add sp, #76
60+
; CHECK-NEXT: pop.w {r4, lr}
61+
; CHECK-NEXT: add sp, #16
62+
; CHECK-NEXT: b.w _f1
63+
tail call void @f1(ptr %1, ptr byval(%"struct.s1") %0)
64+
ret void
65+
}
66+
67+
declare void @f1(ptr, ptr)
68+
69+
attributes #1 = { nounwind "frame-pointes"="non-leaf" }

0 commit comments

Comments
 (0)