summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2016-07-14 01:31:20 +0000
committerMehdi Amini <mehdi.amini@apple.com>2016-07-14 01:31:20 +0000
commit9e332a771951855a09bd197be4ff95f3100caf5a (patch)
treedd9f2f147336c6efb747c5ad5b6433bc3cef7af3 /llvm
parent6ed6d7795033726c340d4596be129544adb405bf (diff)
downloadbcm5719-llvm-9e332a771951855a09bd197be4ff95f3100caf5a.tar.gz
bcm5719-llvm-9e332a771951855a09bd197be4ff95f3100caf5a.zip
Add missing test for r275347 "[IPRA] Set callee saved registers to none for local function when IPRA is enabled."
llvm-svn: 275358
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/CodeGen/X86/ipra-local-linkage.ll30
1 files changed, 30 insertions, 0 deletions
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 00000000000..a394ed3e385
--- /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
+}
OpenPOWER on IntegriCloud