diff options
author | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-12 03:04:44 +0000 |
---|---|---|
committer | Chuang-Yu Cheng <cycheng@multicorewareinc.com> | 2016-04-12 03:04:44 +0000 |
commit | 6efde2fb451bf6c5538ca38cfb44cf84a7bb0e72 (patch) | |
tree | a1c02d803a815144b37a07df7672365b45ada2ce /llvm/test | |
parent | 9b3f99e50f5aff081352f362c1923e2dd3ed3aaf (diff) | |
download | bcm5719-llvm-6efde2fb451bf6c5538ca38cfb44cf84a7bb0e72.tar.gz bcm5719-llvm-6efde2fb451bf6c5538ca38cfb44cf84a7bb0e72.zip |
[PPC64] Use mfocrf in prologue when we only need to save 1 nonvolatile CR field
In the ELFv2 ABI, we are not required to save all CR fields. If only one
nonvolatile CR field is clobbered, use mfocrf instead of mfcr to
selectively save the field, because mfocrf has short latency compares to
mfcr.
Thanks Nemanja's invaluable hint!
Reviewers: nemanjai tjablin hfinkel kbarton
http://reviews.llvm.org/D17749
llvm-svn: 266038
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/PowerPC/crsave.ll | 20 | ||||
-rw-r--r-- | llvm/test/CodeGen/PowerPC/pr26690.ll | 2 |
2 files changed, 21 insertions, 1 deletions
diff --git a/llvm/test/CodeGen/PowerPC/crsave.ll b/llvm/test/CodeGen/PowerPC/crsave.ll index 8121e1b6e63..4975afcce75 100644 --- a/llvm/test/CodeGen/PowerPC/crsave.ll +++ b/llvm/test/CodeGen/PowerPC/crsave.ll @@ -1,5 +1,6 @@ ; RUN: llc -O0 -disable-fp-elim -mtriple=powerpc-unknown-linux-gnu -mcpu=g5 < %s | FileCheck %s -check-prefix=PPC32 ; RUN: llc -O0 -mtriple=powerpc64-unknown-linux-gnu -mcpu=g5 < %s | FileCheck %s -check-prefix=PPC64 +; RUN: llc -O0 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=PPC64-ELFv2 declare void @foo() @@ -60,3 +61,22 @@ entry: ; PPC64: mtocrf 16, 12 ; PPC64: mtocrf 8, 12 +; Generate mfocrf in prologue when we need to save 1 nonvolatile CR field +define void @cloberOneNvCrField() { +entry: + tail call void asm sideeffect "# clobbers", "~{cr2}"() + ret void + +; PPC64-ELFv2-LABEL: @cloberOneNvCrField +; PPC64-ELFv2: mfocrf [[REG1:[0-9]+]], 32 +} + +; Generate mfcr in prologue when we need to save all nonvolatile CR field +define void @cloberAllNvCrField() { +entry: + tail call void asm sideeffect "# clobbers", "~{cr2},~{cr3},~{cr4}"() + ret void + +; PPC64-ELFv2-LABEL: @cloberAllNvCrField +; PPC64-ELFv2: mfcr [[REG1:[0-9]+]] +} diff --git a/llvm/test/CodeGen/PowerPC/pr26690.ll b/llvm/test/CodeGen/PowerPC/pr26690.ll index 524e8b524bf..e1c3c496ed4 100644 --- a/llvm/test/CodeGen/PowerPC/pr26690.ll +++ b/llvm/test/CodeGen/PowerPC/pr26690.ll @@ -101,7 +101,7 @@ if.end16: ; preds = %entry, %if.end13, % ret i32 2 } -; CHECK: mfcr {{[0-9]+}} +; CHECK: mfocrf {{[0-9]+}} !llvm.ident = !{!0} |