From 9425ee5f8608ff8611628d83386f61950d7fff85 Mon Sep 17 00:00:00 2001 From: rickyleung Date: Tue, 7 May 2024 21:37:03 +0800 Subject: [PATCH 7/7] Update testcase for stack clash protection backport --- .../GlobalISel/legalize-dyn-alloca.mir | 3 +- .../GlobalISel/stacksave-stackrestore.ll | 14 ++++++---- .../CodeGen/AArch64/stack-probing-dynamic.ll | 16 ++++++----- .../AArch64/stack-probing-last-in-block.mir | 4 +-- .../X86/GlobalISel/stacksave-stackrestore.ll | 28 +++++++++++-------- 5 files changed, 36 insertions(+), 29 deletions(-) diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-dyn-alloca.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-dyn-alloca.mir index 882c7468e70f..82781cebc55a 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-dyn-alloca.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-dyn-alloca.mir @@ -313,5 +313,4 @@ body: | %7:_(s64) = G_AND %5, %6 %8:_(p0) = G_DYN_STACKALLOC %7(s64), 1 $x0 = COPY %8(p0) - RET_ReallyLR implicit $x0 -... \ No newline at end of file + RET_ReallyLR implicit $x0 \ No newline at end of file diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/stacksave-stackrestore.ll b/llvm/test/CodeGen/AArch64/GlobalISel/stacksave-stackrestore.ll index 16bf85af9c17..97ecca0bd77b 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/stacksave-stackrestore.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/stacksave-stackrestore.ll @@ -15,14 +15,18 @@ define void @test_scoped_alloca(i64 %n) { ; CHECK-NEXT: .cfi_offset w19, -16 ; CHECK-NEXT: .cfi_offset w30, -24 ; CHECK-NEXT: .cfi_offset w29, -32 -; CHECK-NEXT: add x9, x0, #15 +; CHECK-NEXT: mov x19, x0 +; CHECK-NEXT: bl llvm.stacksave.p0 +; CHECK-NEXT: add x9, x19, #15 ; CHECK-NEXT: mov x8, sp ; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0 -; CHECK-NEXT: mov x19, sp -; CHECK-NEXT: sub x0, x8, x9 -; CHECK-NEXT: mov sp, x0 +; CHECK-NEXT: mov x19, x0 +; CHECK-NEXT: sub x8, x8, x9 +; CHECK-NEXT: mov sp, x8 +; CHECK-NEXT: mov x0, x8 ; CHECK-NEXT: bl use_addr -; CHECK-NEXT: mov sp, x19 +; CHECK-NEXT: mov x0, x19 +; CHECK-NEXT: bl llvm.stackrestore.p0 ; CHECK-NEXT: mov sp, x29 ; CHECK-NEXT: ldr x19, [sp, #16] // 8-byte Folded Reload ; CHECK-NEXT: ldp x29, x30, [sp], #32 // 16-byte Folded Reload diff --git a/llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll b/llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll index ad9cdbe92b23..3cbcf7749b2a 100644 --- a/llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll +++ b/llvm/test/CodeGen/AArch64/stack-probing-dynamic.ll @@ -59,10 +59,10 @@ define void @dynamic_fixed(i64 %size, ptr %out1, ptr %out2) #0 { ; CHECK-NEXT: str xzr, [sp, #-64]! ; CHECK-NEXT: add x9, x0, #15 ; CHECK-NEXT: mov x8, sp -; CHECK-NEXT: sub x10, x29, #64 ; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0 -; CHECK-NEXT: str x10, [x1] +; CHECK-NEXT: sub x10, x29, #64 ; CHECK-NEXT: sub x8, x8, x9 +; CHECK-NEXT: str x10, [x1] ; CHECK-NEXT: .LBB1_1: // =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: sub sp, sp, #1, lsl #12 // =4096 ; CHECK-NEXT: cmp sp, x8 @@ -108,10 +108,10 @@ define void @dynamic_align_64(i64 %size, ptr %out) #0 { ; CHECK-NEXT: and sp, x9, #0xffffffffffffffc0 ; CHECK-NEXT: add x9, x0, #15 ; CHECK-NEXT: mov x8, sp -; CHECK-NEXT: str xzr, [sp] ; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0 -; CHECK-NEXT: mov x19, sp +; CHECK-NEXT: str xzr, [sp] ; CHECK-NEXT: sub x8, x8, x9 +; CHECK-NEXT: mov x19, sp ; CHECK-NEXT: and x8, x8, #0xffffffffffffffc0 ; CHECK-NEXT: .LBB2_1: // =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: sub sp, sp, #1, lsl #12 // =4096 @@ -167,10 +167,10 @@ define void @dynamic_align_8192(i64 %size, ptr %out) #0 { ; CHECK-NEXT: mov sp, x9 ; CHECK-NEXT: add x9, x0, #15 ; CHECK-NEXT: mov x8, sp -; CHECK-NEXT: str xzr, [sp] ; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0 -; CHECK-NEXT: mov x19, sp +; CHECK-NEXT: str xzr, [sp] ; CHECK-NEXT: sub x8, x8, x9 +; CHECK-NEXT: mov x19, sp ; CHECK-NEXT: and x8, x8, #0xffffffffffffe000 ; CHECK-NEXT: .LBB3_4: // =>This Inner Loop Header: Depth=1 ; CHECK-NEXT: sub sp, sp, #1, lsl #12 // =4096 @@ -268,8 +268,10 @@ define void @no_reserved_call_frame(i64 %n) #0 { ; CHECK-NEXT: str xzr, [sp] ; CHECK-NEXT: sub sp, sp, #1104 ; CHECK-NEXT: str xzr, [sp] +; CHECK-NEXT: sub sp, sp, #1104 ; CHECK-NEXT: bl callee_stack_args ; CHECK-NEXT: add sp, sp, #1104 +; CHECK-NEXT: add sp, sp, #1104 ; CHECK-NEXT: mov sp, x29 ; CHECK-NEXT: .cfi_def_cfa wsp, 16 ; CHECK-NEXT: ldp x29, x30, [sp], #16 // 16-byte Folded Reload @@ -331,8 +333,8 @@ define void @dynamic_sve(i64 %size, ptr %out) #0 "target-features"="+sve" { ; CHECK-NEXT: .cfi_offset w29, -32 ; CHECK-NEXT: rdvl x9, #1 ; CHECK-NEXT: mov x10, #15 // =0xf -; CHECK-NEXT: mov x8, sp ; CHECK-NEXT: madd x9, x0, x9, x10 +; CHECK-NEXT: mov x8, sp ; CHECK-NEXT: and x9, x9, #0xfffffffffffffff0 ; CHECK-NEXT: sub x8, x8, x9 ; CHECK-NEXT: .LBB7_1: // =>This Inner Loop Header: Depth=1 diff --git a/llvm/test/CodeGen/AArch64/stack-probing-last-in-block.mir b/llvm/test/CodeGen/AArch64/stack-probing-last-in-block.mir index a8a21ab330ba..9a173be5857e 100644 --- a/llvm/test/CodeGen/AArch64/stack-probing-last-in-block.mir +++ b/llvm/test/CodeGen/AArch64/stack-probing-last-in-block.mir @@ -141,6 +141,4 @@ body: | B %bb.2 bb.2.exit: - RET_ReallyLR - -... \ No newline at end of file + RET_ReallyLR \ No newline at end of file diff --git a/llvm/test/CodeGen/X86/GlobalISel/stacksave-stackrestore.ll b/llvm/test/CodeGen/X86/GlobalISel/stacksave-stackrestore.ll index e86c04ee22db..8f665924577f 100644 --- a/llvm/test/CodeGen/X86/GlobalISel/stacksave-stackrestore.ll +++ b/llvm/test/CodeGen/X86/GlobalISel/stacksave-stackrestore.ll @@ -13,21 +13,25 @@ define void @test_scoped_alloca(i64 %n) { ; CHECK-NEXT: .cfi_offset %rbp, -16 ; CHECK-NEXT: movq %rsp, %rbp ; CHECK-NEXT: .cfi_def_cfa_register %rbp +; CHECK-NEXT: pushq %r14 ; CHECK-NEXT: pushq %rbx -; CHECK-NEXT: pushq %rax -; CHECK-NEXT: .cfi_offset %rbx, -24 -; CHECK-NEXT: movq %rsp, %rbx -; CHECK-NEXT: movq %rsp, %rax -; CHECK-NEXT: imulq $1, %rdi, %rcx -; CHECK-NEXT: addq $15, %rcx -; CHECK-NEXT: andq $-16, %rcx -; CHECK-NEXT: subq %rcx, %rax -; CHECK-NEXT: movq %rax, %rsp -; CHECK-NEXT: movq %rax, %rdi +; CHECK-NEXT: .cfi_offset %rbx, -32 +; CHECK-NEXT: .cfi_offset %r14, -24 +; CHECK-NEXT: movq %rdi, %rbx +; CHECK-NEXT: callq llvm.stacksave.p0 +; CHECK-NEXT: movq %rax, %r14 +; CHECK-NEXT: movq %rsp, %rdi +; CHECK-NEXT: imulq $1, %rbx, %rax +; CHECK-NEXT: addq $15, %rax +; CHECK-NEXT: andq $-16, %rax +; CHECK-NEXT: subq %rax, %rdi +; CHECK-NEXT: movq %rdi, %rsp ; CHECK-NEXT: callq use_addr -; CHECK-NEXT: movq %rbx, %rsp -; CHECK-NEXT: leaq -8(%rbp), %rsp +; CHECK-NEXT: movq %r14, %rdi +; CHECK-NEXT: callq llvm.stackrestore.p0 +; CHECK-NEXT: leaq -16(%rbp), %rsp ; CHECK-NEXT: popq %rbx +; CHECK-NEXT: popq %r14 ; CHECK-NEXT: popq %rbp ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 ; CHECK-NEXT: retq -- 2.42.0.windows.2