summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Generic/ipra-transform.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/Generic/ipra-transform.ll')
-rw-r--r--llvm/test/CodeGen/Generic/ipra-transform.ll32
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/Generic/ipra-transform.ll b/llvm/test/CodeGen/Generic/ipra-transform.ll
new file mode 100644
index 00000000000..362af881234
--- /dev/null
+++ b/llvm/test/CodeGen/Generic/ipra-transform.ll
@@ -0,0 +1,32 @@
+
+; RUN: llc < %s | FileCheck %s -check-prefix=NOIPRA
+; RUN: llc -enable-ipra < %s | FileCheck %s
+
+
+target triple = "x86_64-unknown-unknown"
+define void @bar1() {
+ ret void
+}
+define preserve_allcc void @foo()#0 {
+; Due to preserve_allcc foo() will save some registers at start of foo()
+; prefix NOIPRA will verify that.
+; NOIPRA-LABEL: foo:
+; NOIPRA: pushq %r10
+; NOIPRA-NEXT: pushq %r9
+; NOIPRA-NEXT: pushq %r8
+; NOIPRA: callq bar1
+; When IPRA is present above registers will not be saved and that is verified
+; by prefix CHECK.
+; CHECK: foo:
+; CHECK-NOT: pushq %r10
+; CHECK-NOT: pushq %r9
+; CHECK-NOT: pushq %r8
+; CHECK: callq bar1
+ call void @bar1()
+ call void @bar2()
+ ret void
+}
+define void @bar2() {
+ ret void
+}
+attributes #0 = {nounwind}
OpenPOWER on IntegriCloud