summaryrefslogtreecommitdiff
path: root/test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll
diff options
context:
space:
mode:
authorChuang-Yu Cheng <cycheng@multicorewareinc.com>2016-04-06 02:04:38 +0000
committerChuang-Yu Cheng <cycheng@multicorewareinc.com>2016-04-06 02:04:38 +0000
commit4f461cab384caa2f6db77cdb5e4b2bffcdae7563 (patch)
treef81851a5be8f31879fcdc9bdc88f48c79402b196 /test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll
parentff2190e04a91154bc4dfc6340be6cf2471fa4985 (diff)
[ppc64] Enable sibling call optimization on ppc64 ELFv1/ELFv2 abi
This patch enable sibling call optimization on ppc64 ELFv1/ELFv2 abi, and add a couple of test cases. This patch also passed llvm/clang bootstrap test, and spec2006 build/run/result validation. Original issue: https://llvm.org/bugs/show_bug.cgi?id=25617 Great thanks to Tom's (tjablin) help, he contributed a lot to this patch. Thanks Hal and Kit's invaluable opinions! Reviewers: hfinkel kbarton http://reviews.llvm.org/D16315 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@265506 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll')
-rw-r--r--test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll b/test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll
new file mode 100644
index 00000000000..744ca073162
--- /dev/null
+++ b/test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll
@@ -0,0 +1,46 @@
+; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu --enable-shrink-wrap=false | FileCheck %s -check-prefix=CHECK-SCO-ONLY
+; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu --enable-shrink-wrap=true | FileCheck %s -check-prefix=CHECK-SCO-SHRK
+; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu --enable-shrink-wrap=false | FileCheck %s -check-prefix=CHECK-SCO-ONLY
+; RUN: llc < %s -mtriple=powerpc64le-unknown-linux-gnu --enable-shrink-wrap=true | FileCheck %s -check-prefix=CHECK-SCO-SHRK
+
+%"class.clang::NamedDecl" = type { i32 }
+declare void @__assert_fail();
+
+define i8 @_ZNK5clang9NamedDecl23getLinkageAndVisibilityEv(
+ %"class.clang::NamedDecl"* %this) {
+entry:
+ %tobool = icmp eq %"class.clang::NamedDecl"* %this, null
+ br i1 %tobool, label %cond.false, label %exit
+
+cond.false:
+ tail call void @__assert_fail()
+ unreachable
+
+exit:
+ %DeclKind = getelementptr inbounds
+ %"class.clang::NamedDecl",
+ %"class.clang::NamedDecl"* %this, i64 0, i32 0
+ %bf.load = load i32, i32* %DeclKind, align 4
+ %call.i = tail call i8 @LVComputationKind(
+ %"class.clang::NamedDecl"* %this,
+ i32 %bf.load)
+ ret i8 %call.i
+
+; CHECK-SCO-SHRK-LABEL: _ZNK5clang9NamedDecl23getLinkageAndVisibilityEv:
+; CHECK-SCO-SHRK: b LVComputationKind
+; CHECK-SCO-SHRK: #TC_RETURNd8
+; CHECK-SCO-SHRK: stdu 1, -{{[0-9]+}}(1)
+; CHECK-SCO-SHRK: bl __assert_fail
+;
+; CHECK-SCO-ONLY-LABEL: _ZNK5clang9NamedDecl23getLinkageAndVisibilityEv:
+; CHECK-SCO-ONLY: stdu 1, -{{[0-9]+}}(1)
+; CHECK-SCO-ONLY: b LVComputationKind
+; CHECK-SCO-ONLY: #TC_RETURNd8
+; CHECK-SCO-ONLY: bl __assert_fail
+}
+
+define fastcc i8 @LVComputationKind(
+ %"class.clang::NamedDecl"* %D,
+ i32 %computation) {
+ ret i8 0
+}