summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r252503-arm-transient-stack-alignment.diff
blob: d80378de988c311740c8be9a187c8d45ff872821 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
This patch applies a workaround for an ARM EABI issue, where clang would
sometimes incorrectly align the stack in a leaf function that uses TLS.

Introduced here: http://svnweb.freebsd.org/changeset/base/252503

Index: test/CodeGen/Thumb2/large-stack.ll
===================================================================
--- test/CodeGen/Thumb2/large-stack.ll
+++ test/CodeGen/Thumb2/large-stack.ll
@@ -13,7 +13,7 @@ define void @test1() {
 define void @test2() {
 ; DARWIN-LABEL: test2:
 ; DARWIN: sub.w sp, sp, #4160
-; DARWIN: sub sp, #8
+; DARWIN: sub sp, #12
 ; LINUX-LABEL: test2:
 ; LINUX: sub.w sp, sp, #4160
 ; LINUX: sub sp, #8
Index: test/CodeGen/ARM/2009-10-30.ll
===================================================================
--- test/CodeGen/ARM/2009-10-30.ll
+++ test/CodeGen/ARM/2009-10-30.ll
@@ -4,9 +4,10 @@
 
 define void @f(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, ...) {
 entry:
-;CHECK: sub	sp, sp, #4
-;CHECK: add	r{{[0-9]+}}, sp, #8
-;CHECK: str	r{{[0-9]+}}, [sp], #4
+;CHECK: sub	sp, sp, #8
+;CHECK: add	r{{[0-9]+}}, sp, #12
+;CHECK: str	r{{[0-9]+}}, [sp, #4]
+;CHECK: add	sp, sp, #8
 ;CHECK: bx	lr
 	%ap = alloca i8*, align 4
 	%ap1 = bitcast i8** %ap to i8*
Index: test/CodeGen/ARM/vargs_align.ll
===================================================================
--- test/CodeGen/ARM/vargs_align.ll
+++ test/CodeGen/ARM/vargs_align.ll
@@ -15,8 +15,8 @@ entry:
 return:		; preds = %entry
 	%retval2 = load i32* %retval		; <i32> [#uses=1]
 	ret i32 %retval2
-; EABI: add sp, sp, #12
 ; EABI: add sp, sp, #16
+; EABI: add sp, sp, #16
+; OABI: add sp, sp, #16
 ; OABI: add sp, sp, #12
-; OABI: add sp, sp, #12
 }
Index: test/CodeGen/ARM/prefetch-thumb.ll
===================================================================
--- test/CodeGen/ARM/prefetch-thumb.ll
+++ test/CodeGen/ARM/prefetch-thumb.ll
@@ -10,8 +10,8 @@ entry:
 ;ARM: pld [sp, #50]
 
 ;THUMB2: t6:
-;THUMB2: pld [sp]
-;THUMB2: pld [sp, #50]
+;THUMB2: pld [sp, #4]
+;THUMB2: pld [sp, #54]
 
 %red = alloca [100 x i8], align 1
 %0 = getelementptr inbounds [100 x i8]* %red, i32 0, i32 0
Index: lib/Target/ARM/ARMFrameLowering.h
===================================================================
--- lib/Target/ARM/ARMFrameLowering.h
+++ lib/Target/ARM/ARMFrameLowering.h
@@ -27,7 +27,7 @@ class ARMFrameLowering : public TargetFrameLowerin
 
 public:
   explicit ARMFrameLowering(const ARMSubtarget &sti)
-    : TargetFrameLowering(StackGrowsDown, sti.getStackAlignment(), 0, 4),
+    : TargetFrameLowering(StackGrowsDown, sti.getStackAlignment(), 0, 8),
       STI(sti) {
   }
 
OpenPOWER on IntegriCloud