[PATCH] D64673: [X86] for split stack, not save/restore nested arg if unused
Than McIntosh via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 19 05:54:56 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL366569: [X86] for split stack, not save/restore nested arg if unused (authored by thanm, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D64673?vs=209614&id=210810#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D64673/new/
https://reviews.llvm.org/D64673
Files:
llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
Index: llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
===================================================================
--- llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
+++ llvm/trunk/test/CodeGen/X86/segmented-stacks.ll
@@ -611,7 +611,7 @@
; X32-Linux-NOT: calll __morestack
; X64-Linux-LABEL: test_nostack:
-; X32-Linux-NOT: callq __morestack
+; X64-Linux-NOT: callq __morestack
; X32ABI-LABEL: test_nostack:
; X32ABI-NOT: callq __morestack
@@ -688,6 +688,45 @@
}
+; Test that unused nested argument doesn't need saving/restoring.
+
+define i32 @test_nested_unused(i32 * nest %unused) #0 {
+ %mem = alloca i32, i32 10
+ call void @dummy_use (i32* %mem, i32 10)
+ ret i32 123
+
+; X64-Linux-LABEL: test_nested_unused:
+; X64-Linux-NOT: movq %r10, %rax
+; X64-Linux: callq __morestack
+; X64-Linux-NOT: movq %rax, %r10
+
+; X64-Darwin-LABEL: test_nested_unused:
+; X64-Darwin-NOT: movq %r10, %rax
+; X64-Darwin: callq ___morestack
+; X64-Darwin-NOT: movq %rax, %r10
+
+; X64-FreeBSD-LABEL: test_nested_unused:
+; X64-FreeBSD-NOT: movq %r10, %rax
+; X64-FreeBSD: callq __morestack
+; X64-FreeBSD-NOT: movq %rax, %r10
+
+; X64-DFlyBSD-LABEL: test_nested_unused:
+; X64-DFlyBSD-NOT: movq %r10, %rax
+; X64-DFlyBSD: callq __morestack
+; X64-DFlyBSD-NOT: movq %rax, %r10
+
+; X64-MinGW-LABEL: test_nested_unused:
+; X64-MinGW-NOT: movq %r10, %rax
+; X64-MinGW: callq __morestack
+; X64-MinGW-NOT: movq %rax, %r10
+
+; X32ABI-LABEL: test_nested_unused:
+; X32ABI-NOT: movl %r10d, %eax
+; X32ABI: callq __morestack
+; X32ABI-NOT: movq %rax, %r10
+
+}
+
attributes #0 = { "split-stack" }
; X64-Linux-Large: .rodata
Index: llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
===================================================================
--- llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
+++ llvm/trunk/lib/Target/X86/X86FrameLowering.cpp
@@ -2212,7 +2212,7 @@
const Function &F = MF->getFunction();
for (Function::const_arg_iterator I = F.arg_begin(), E = F.arg_end();
I != E; I++) {
- if (I->hasNestAttr())
+ if (I->hasNestAttr() && !I->use_empty())
return true;
}
return false;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D64673.210810.patch
Type: text/x-patch
Size: 2215 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190719/35c698af/attachment.bin>
More information about the llvm-commits
mailing list