]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/patches/patch-r252503-arm-transient-stack-alignment.diff
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / patches / patch-r252503-arm-transient-stack-alignment.diff
1 This patch applies a workaround for an ARM EABI issue, where clang would
2 sometimes incorrectly align the stack in a leaf function that uses TLS.
3
4 Introduced here: http://svnweb.freebsd.org/changeset/base/252503
5
6 Index: test/CodeGen/Thumb2/large-stack.ll
7 ===================================================================
8 --- test/CodeGen/Thumb2/large-stack.ll
9 +++ test/CodeGen/Thumb2/large-stack.ll
10 @@ -13,7 +13,7 @@ define void @test1() {
11  define void @test2() {
12  ; DARWIN-LABEL: test2:
13  ; DARWIN: sub.w sp, sp, #4160
14 -; DARWIN: sub sp, #8
15 +; DARWIN: sub sp, #12
16  ; LINUX-LABEL: test2:
17  ; LINUX: sub.w sp, sp, #4160
18  ; LINUX: sub sp, #8
19 Index: test/CodeGen/ARM/2009-10-30.ll
20 ===================================================================
21 --- test/CodeGen/ARM/2009-10-30.ll
22 +++ test/CodeGen/ARM/2009-10-30.ll
23 @@ -4,9 +4,10 @@
24  
25  define void @f(i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, ...) {
26  entry:
27 -;CHECK: sub    sp, sp, #4
28 -;CHECK: add    r{{[0-9]+}}, sp, #8
29 -;CHECK: str    r{{[0-9]+}}, [sp], #4
30 +;CHECK: sub    sp, sp, #8
31 +;CHECK: add    r{{[0-9]+}}, sp, #12
32 +;CHECK: str    r{{[0-9]+}}, [sp, #4]
33 +;CHECK: add    sp, sp, #8
34  ;CHECK: bx     lr
35         %ap = alloca i8*, align 4
36         %ap1 = bitcast i8** %ap to i8*
37 Index: test/CodeGen/ARM/vargs_align.ll
38 ===================================================================
39 --- test/CodeGen/ARM/vargs_align.ll
40 +++ test/CodeGen/ARM/vargs_align.ll
41 @@ -15,8 +15,8 @@ entry:
42  return:                ; preds = %entry
43         %retval2 = load i32* %retval            ; <i32> [#uses=1]
44         ret i32 %retval2
45 -; EABI: add sp, sp, #12
46  ; EABI: add sp, sp, #16
47 +; EABI: add sp, sp, #16
48 +; OABI: add sp, sp, #16
49  ; OABI: add sp, sp, #12
50 -; OABI: add sp, sp, #12
51  }
52 Index: test/CodeGen/ARM/prefetch-thumb.ll
53 ===================================================================
54 --- test/CodeGen/ARM/prefetch-thumb.ll
55 +++ test/CodeGen/ARM/prefetch-thumb.ll
56 @@ -10,8 +10,8 @@ entry:
57  ;ARM: pld [sp, #50]
58  
59  ;THUMB2: t6:
60 -;THUMB2: pld [sp]
61 -;THUMB2: pld [sp, #50]
62 +;THUMB2: pld [sp, #4]
63 +;THUMB2: pld [sp, #54]
64  
65  %red = alloca [100 x i8], align 1
66  %0 = getelementptr inbounds [100 x i8]* %red, i32 0, i32 0
67 Index: lib/Target/ARM/ARMFrameLowering.h
68 ===================================================================
69 --- lib/Target/ARM/ARMFrameLowering.h
70 +++ lib/Target/ARM/ARMFrameLowering.h
71 @@ -27,7 +27,7 @@ class ARMFrameLowering : public TargetFrameLowerin
72  
73  public:
74    explicit ARMFrameLowering(const ARMSubtarget &sti)
75 -    : TargetFrameLowering(StackGrowsDown, sti.getStackAlignment(), 0, 4),
76 +    : TargetFrameLowering(StackGrowsDown, sti.getStackAlignment(), 0, 8),
77        STI(sti) {
78    }
79