diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/AArch64/stack-guard-remat-bitcast.ll | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/ARM/warn-stack.ll | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/2009-02-12-DebugInfoVLA.ll | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/StackColoring.ll | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/dynamic-allocas-VLAs.ll | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/fast-isel-stackcheck.ll | 8 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/ssp-guard-spill.ll | 54 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/warn-stack.ll | 2 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/vla.ll | 4 |
9 files changed, 73 insertions, 17 deletions
diff --git a/llvm/test/CodeGen/AArch64/stack-guard-remat-bitcast.ll b/llvm/test/CodeGen/AArch64/stack-guard-remat-bitcast.ll index ca30854795b..6f1515a9826 100644 --- a/llvm/test/CodeGen/AArch64/stack-guard-remat-bitcast.ll +++ b/llvm/test/CodeGen/AArch64/stack-guard-remat-bitcast.ll @@ -6,10 +6,14 @@ ; CHECK: adrp [[R0:x[0-9]+]], ___stack_chk_guard@GOTPAGE ; CHECK: ldr [[R1:x[0-9]+]], {{\[}}[[R0]], ___stack_chk_guard@GOTPAGEOFF{{\]}} +; Load the stack guard for the second time, just in case the previous value gets spilled. +; CHECK: adrp [[GUARD_PAGE:x[0-9]+]], ___stack_chk_guard@GOTPAGE ; CHECK: ldr [[R2:x[0-9]+]], {{\[}}[[R1]]{{\]}} ; CHECK: stur [[R2]], {{\[}}x29, [[SLOT0:[0-9#\-]+]]{{\]}} ; CHECK: ldur [[R3:x[0-9]+]], {{\[}}x29, [[SLOT0]]{{\]}} -; CHECK: sub [[R4:x[0-9]+]], [[R2]], [[R3]] +; CHECK: ldr [[GUARD_ADDR:x[0-9]+]], {{\[}}[[GUARD_PAGE]], ___stack_chk_guard@GOTPAGEOFF{{\]}} +; CHECK: ldr [[GUARD:x[0-9]+]], {{\[}}[[GUARD_ADDR]]{{\]}} +; CHECK: sub [[R4:x[0-9]+]], [[GUARD]], [[R3]] ; CHECK: cbnz [[R4]], LBB define i32 @test_stack_guard_remat2() { diff --git a/llvm/test/CodeGen/ARM/warn-stack.ll b/llvm/test/CodeGen/ARM/warn-stack.ll index 474dc1dfb44..6e819e40432 100644 --- a/llvm/test/CodeGen/ARM/warn-stack.ll +++ b/llvm/test/CodeGen/ARM/warn-stack.ll @@ -12,7 +12,7 @@ entry: ret void } -; CHECK: warning: stack size limit exceeded (96) in warn +; CHECK: warning: stack size limit exceeded (92) in warn define void @warn() nounwind ssp { entry: %buffer = alloca [80 x i8], align 1 diff --git a/llvm/test/CodeGen/X86/2009-02-12-DebugInfoVLA.ll b/llvm/test/CodeGen/X86/2009-02-12-DebugInfoVLA.ll index c0b078ab3ff..8edaf3f1fa3 100644 --- a/llvm/test/CodeGen/X86/2009-02-12-DebugInfoVLA.ll +++ b/llvm/test/CodeGen/X86/2009-02-12-DebugInfoVLA.ll @@ -12,7 +12,7 @@ define signext i8 @foo(i8* %s1) nounwind ssp { ; movq %rax, %rsp ; CHECK-LABEL: @foo -; CHECK: movq -40(%rbp), %rsp +; CHECK: movq -{{[0-9]+}}(%rbp), %rsp entry: %s1_addr = alloca i8* ; <i8**> [#uses=2] diff --git a/llvm/test/CodeGen/X86/StackColoring.ll b/llvm/test/CodeGen/X86/StackColoring.ll index 634f66ad52d..14778a514e0 100644 --- a/llvm/test/CodeGen/X86/StackColoring.ll +++ b/llvm/test/CodeGen/X86/StackColoring.ll @@ -243,8 +243,8 @@ bb3: ; Adopt the test from Transforms/Inline/array_merge.ll' ;CHECK-LABEL: array_merge: -;YESCOLOR: subq $816, %rsp -;NOCOLOR: subq $1616, %rsp +;YESCOLOR: subq $808, %rsp +;NOCOLOR: subq $1608, %rsp define void @array_merge() nounwind ssp { entry: %A.i1 = alloca [100 x i32], align 4 diff --git a/llvm/test/CodeGen/X86/dynamic-allocas-VLAs.ll b/llvm/test/CodeGen/X86/dynamic-allocas-VLAs.ll index 7e30192c65b..71e589275ed 100644 --- a/llvm/test/CodeGen/X86/dynamic-allocas-VLAs.ll +++ b/llvm/test/CodeGen/X86/dynamic-allocas-VLAs.ll @@ -60,12 +60,10 @@ entry: ; CHECK: _t3 ; CHECK: pushq %rbp ; CHECK: movq %rsp, %rbp -; CHECK: pushq %rbx ; CHECK-NOT: andq $-{{[0-9]+}}, %rsp ; CHECK: subq ${{[0-9]+}}, %rsp ; -; CHECK: leaq -{{[0-9]+}}(%rbp), %rsp -; CHECK: popq %rbx +; CHECK: movq %rbp, %rsp ; CHECK: popq %rbp } @@ -85,7 +83,6 @@ entry: ; CHECK: _t4 ; CHECK: pushq %rbp ; CHECK: movq %rsp, %rbp -; CHECK: pushq %r14 ; CHECK: pushq %rbx ; CHECK: andq $-32, %rsp ; CHECK: subq ${{[0-9]+}}, %rsp @@ -95,9 +92,8 @@ entry: ; CHECK: leaq {{[0-9]*}}(%rbx), %rdx ; CHECK: callq _t4_helper ; -; CHECK: leaq -16(%rbp), %rsp +; CHECK: leaq -{{[0-9]+}}(%rbp), %rsp ; CHECK: popq %rbx -; CHECK: popq %r14 ; CHECK: popq %rbp } diff --git a/llvm/test/CodeGen/X86/fast-isel-stackcheck.ll b/llvm/test/CodeGen/X86/fast-isel-stackcheck.ll index 3b7318fa77d..1398b300669 100644 --- a/llvm/test/CodeGen/X86/fast-isel-stackcheck.ll +++ b/llvm/test/CodeGen/X86/fast-isel-stackcheck.ll @@ -8,7 +8,7 @@ target triple = "x86_64-apple-macosx" ; CHECK-LABEL: foo: ; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %rax -; CHECK-NOT: movq ___stack_chk_guard@GOTPCREL(%rip), %rax +; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %rax define void @foo() #0 { entry: %_tags = alloca [3 x i32], align 4 @@ -16,8 +16,10 @@ entry: } ; CHECK-LABEL: bar: -; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %rax -; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %rax +; CHECK: movq ___stack_chk_guard@GOTPCREL(%rip), %{{r.x}} +; CHECK-DAG: movq ___stack_chk_guard@GOTPCREL(%rip), %[[GUARD:r.x]] +; CHECK-DAG: movq {{[0-9]+}}(%rsp), %[[CANARY:r.x]] +; CHECK: subq %[[CANARY]], %[[GUARD]] define void @bar() #1 { entry: %vt = alloca [2 x double], align 16 diff --git a/llvm/test/CodeGen/X86/ssp-guard-spill.ll b/llvm/test/CodeGen/X86/ssp-guard-spill.ll new file mode 100644 index 00000000000..7364dee4f08 --- /dev/null +++ b/llvm/test/CodeGen/X86/ssp-guard-spill.ll @@ -0,0 +1,54 @@ +; RUN: llc < %s | FileCheck %s +target triple = "x86_64-apple-macosx10.4.0" + +; __stack_chk_guard must be loaded for twice, once for setting up the canary, +; another time for performing the check. It is because if we reuse the same +; stack guard value, it may get spilled to the stack, then the for loop may +; corrupt it. +; +; bool Bar(int*); +; bool Foo(int n) { +; int a[10]; +; for (int i = 0; i < n; i++) { +; a[i] = 0; +; } +; return Bar(a); +; } +; +; CHECK: movq ___stack_chk_guard +; CHECK: movq ___stack_chk_guard +define zeroext i1 @_Z3Fooi(i32 %n) sspstrong { +entry: + %n.addr = alloca i32, align 4 + %a = alloca [10 x i32], align 16 + %i = alloca i32, align 4 + store i32 %n, i32* %n.addr, align 4 + store i32 0, i32* %i, align 4 + br label %for.cond + +for.cond: ; preds = %for.inc, %entry + %tmp = load i32, i32* %i, align 4 + %tmp1 = load i32, i32* %n.addr, align 4 + %cmp = icmp slt i32 %tmp, %tmp1 + br i1 %cmp, label %for.body, label %for.end + +for.body: ; preds = %for.cond + %tmp2 = load i32, i32* %i, align 4 + %idxprom = sext i32 %tmp2 to i64 + %arrayidx = getelementptr inbounds [10 x i32], [10 x i32]* %a, i64 0, i64 %idxprom + store i32 0, i32* %arrayidx, align 4 + br label %for.inc + +for.inc: ; preds = %for.body + %tmp3 = load i32, i32* %i, align 4 + %inc = add nsw i32 %tmp3, 1 + store i32 %inc, i32* %i, align 4 + br label %for.cond + +for.end: ; preds = %for.cond + %arraydecay = getelementptr inbounds [10 x i32], [10 x i32]* %a, i32 0, i32 0 + %call = call zeroext i1 @_Z3BarPi(i32* %arraydecay) + ret i1 %call +} + +declare zeroext i1 @_Z3BarPi(i32*) diff --git a/llvm/test/CodeGen/X86/warn-stack.ll b/llvm/test/CodeGen/X86/warn-stack.ll index aa09ad8066f..7353d073e63 100644 --- a/llvm/test/CodeGen/X86/warn-stack.ll +++ b/llvm/test/CodeGen/X86/warn-stack.ll @@ -12,7 +12,7 @@ entry: ret void } -; CHECK: warning: stack size limit exceeded (104) in warn +; CHECK: warning: stack size limit exceeded (88) in warn define void @warn() nounwind ssp { entry: %buffer = alloca [80 x i8], align 1 diff --git a/llvm/test/DebugInfo/X86/vla.ll b/llvm/test/DebugInfo/X86/vla.ll index 82ae025460f..1c72519ccb8 100644 --- a/llvm/test/DebugInfo/X86/vla.ll +++ b/llvm/test/DebugInfo/X86/vla.ll @@ -1,7 +1,7 @@ ; RUN: llc -O0 -mtriple=x86_64-apple-darwin -filetype=asm %s -o - | FileCheck %s ; Ensure that we generate an indirect location for the variable length array a. -; CHECK: ##DEBUG_VALUE: vla:a <- [%RDX+0] -; CHECK: DW_OP_breg1 +; CHECK: ##DEBUG_VALUE: vla:a <- [%RCX+0] +; CHECK: DW_OP_breg2 ; rdar://problem/13658587 ; ; generated from: |