diff options
author | Hal Finkel <hfinkel@anl.gov> | 2014-03-27 23:12:31 +0000 |
---|---|---|
committer | Hal Finkel <hfinkel@anl.gov> | 2014-03-27 23:12:31 +0000 |
commit | c6fc9b896085aae229f948fa6596a0ba51ec5625 (patch) | |
tree | b6842fadc56df91138a33f85bf0b0d48003e94bb /llvm/lib/Target/PowerPC/PPCTargetMachine.cpp | |
parent | ed0de1368dcb1174bcc8f3b1b1719be4d185267f (diff) | |
download | llvm-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.cpp | 3 |
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); |