Enable tail merging on PPC.

Tail merging had been disabled on PPC because it would disturb bundling decisions
made during pre-RA scheduling on the 970 cores. Now, however, all bundling decisions
are made during post-RA scheduling, and tail merging is generally beneficial (the
average test-suite speedup is insignificantly positive).

Largest test-suite speedups:
MultiSource/Benchmarks/mediabench/gsm/toast/toast - 30%
MultiSource/Benchmarks/BitBench/uuencode/uuencode - 23%
SingleSource/Benchmarks/Shootout-C++/ary - 21%
SingleSource/Benchmarks/Stanford/Queens - 17%

Largest slowdowns:
MultiSource/Benchmarks/MiBench/security-sha/security-sha - 24%
MultiSource/Benchmarks/McCat/03-testtrie/testtrie - 22%
MultiSource/Applications/JM/ldecod/ldecod - 14%
MultiSource/Benchmarks/mediabench/g721/g721encode/encode - 9%

This is improved by using full (instead of just critical) anti-dependency breaking,
but doing so still causes miscompiles and so cannot yet be enabled by default.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158259 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Hal Finkel 2012-06-09 03:14:50 +00:00
parent ba17293a88
commit 8bf75ed41c
2 changed files with 6 additions and 12 deletions

View File

@ -93,13 +93,7 @@ public:
} // namespace
TargetPassConfig *PPCTargetMachine::createPassConfig(PassManagerBase &PM) {
TargetPassConfig *PassConfig = new PPCPassConfig(this, PM);
// Override this for PowerPC. Tail merging happily breaks up instruction issue
// groups, which typically degrades performance.
PassConfig->setEnableTailMerge(false);
return PassConfig;
return new PPCPassConfig(this, PM);
}
bool PPCPassConfig::addPreRegAlloc() {

View File

@ -1,8 +1,8 @@
; RUN: llc < %s -march=ppc32 | grep bl.*baz | count 2
; RUN: llc < %s -march=ppc32 | grep bl.*quux | count 2
; RUN: llc < %s -march=ppc32 -enable-tail-merge | grep bl.*baz | count 1
; RUN: llc < %s -march=ppc32 -enable-tail-merge=1 | grep bl.*quux | count 1
; Check that tail merging is not the default on ppc, and that -enable-tail-merge works.
; RUN: llc < %s -march=ppc32 -enable-tail-merge=0 | grep bl.*baz | count 2
; RUN: llc < %s -march=ppc32 -enable-tail-merge=0 | grep bl.*quux | count 2
; RUN: llc < %s -march=ppc32 | grep bl.*baz | count 1
; RUN: llc < %s -march=ppc32 | grep bl.*quux | count 1
; Check that tail merging is the default on ppc, and that -enable-tail-merge works.
; ModuleID = 'tail.c'
target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"