diff options
author | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-06 02:04:38 +0000 |
---|---|---|
committer | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-06 02:04:38 +0000 |
commit | 4f461cab384caa2f6db77cdb5e4b2bffcdae7563 (patch) | |
tree | f81851a5be8f31879fcdc9bdc88f48c79402b196 /test/CodeGen/PowerPC/ppc64-sibcall-shrinkwrap.ll | |
parent | ff2190e04a91154bc4dfc6340be6cf2471fa4985 (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.ll | 46 |
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 +} |