From 9e332a771951855a09bd197be4ff95f3100caf5a Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Thu, 14 Jul 2016 01:31:20 +0000 Subject: [PATCH] Add missing test for r275347 "[IPRA] Set callee saved registers to none for local function when IPRA is enabled." llvm-svn: 275358 --- llvm/test/CodeGen/X86/ipra-local-linkage.ll | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 llvm/test/CodeGen/X86/ipra-local-linkage.ll diff --git a/llvm/test/CodeGen/X86/ipra-local-linkage.ll b/llvm/test/CodeGen/X86/ipra-local-linkage.ll new file mode 100644 index 0000000..a394ed3 --- /dev/null +++ b/llvm/test/CodeGen/X86/ipra-local-linkage.ll @@ -0,0 +1,30 @@ +; RUN: llc < %s | FileCheck %s -check-prefix=NOIPRA +; RUN: llc -enable-ipra < %s | FileCheck %s + +target triple = "x86_64--" + +define internal void @foo() norecurse { +; When IPRA is not enabled R15 will be saved by foo as it is callee saved reg. +; NOIPRA-LABEL: foo: +; NOIPRA: pushq %r15 +; When IPRA is enabled none register should be saved as foo() is local function +; so we optimize it to save no registers. +; CHECK-LABEL: foo: +; CHECK-NOT: pushq %r15 + call void asm sideeffect "movl %r14d, %r15d", "~{r15}"() + ret void +} + +define void @bar(i32 %X) { + call void asm sideeffect "movl %r12d, $0", "{r15}~{r12}"(i32 %X) + ; As R15 is clobbered by foo() when IPRA is enabled value of R15 should be + ; saved if register containing orignal value is also getting clobbered + ; and reloaded after foo(), here original value is loaded back into R15D after + ; call to foo. + call void @foo() + ; CHECK-LABEL: bar: + ; CHECK: callq foo + ; CHECK-NEXT: movl %eax, %r15d + call void asm sideeffect "movl $0, %r12d", "{r15}~{r12}"(i32 %X) + ret void +} -- 2.7.4