aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2014-03-27 23:12:31 +0000
committerHal Finkel <hfinkel@anl.gov>2014-03-27 23:12:31 +0000
commitc6fc9b896085aae229f948fa6596a0ba51ec5625 (patch)
treeb6842fadc56df91138a33f85bf0b0d48003e94bb /llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
parented0de1368dcb1174bcc8f3b1b1719be4d185267f (diff)
downloadllvm-c6fc9b896085aae229f948fa6596a0ba51ec5625.zip
llvm-c6fc9b896085aae229f948fa6596a0ba51ec5625.tar.gz
llvm-c6fc9b896085aae229f948fa6596a0ba51ec5625.tar.bz2
[PowerPC] Use a small cleanup pass to remove VSX self copies
As explained in r204976, because of how the allocation of VSX registers interacts with the call-lowering code, we sometimes end up generating self VSX copies. Specifically, things like this: %VSL2<def> = COPY %F2, %VSL2<imp-use,kill> (where %F2 is really a sub-register of %VSL2, and so this copy is a nop) This adds a small cleanup pass to remove these prior to post-RA scheduling. llvm-svn: 204980
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCTargetMachine.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
index cb869bd..e7438f3 100644
--- a/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
+++ b/llvm/lib/Target/PowerPC/PPCTargetMachine.cpp
@@ -182,6 +182,9 @@ bool PPCPassConfig::addPreRegAlloc() {
}
bool PPCPassConfig::addPreSched2() {
+ if (getPPCSubtarget().hasVSX())
+ addPass(createPPCVSXCopyCleanupPass());
+
if (getOptLevel() != CodeGenOpt::None)
addPass(&IfConverterID);