aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineCopyPropagation.cpp
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2012-02-27 21:46:42 +0000
committerEvan Cheng <evan.cheng@apple.com>2012-02-27 21:46:42 +0000
commitddeb9d11fee7c02f4c52831dc5d3191cc0124b3f (patch)
tree94e0d6c12ffbbc71b9d95f1cdfd53673d5331da4 /llvm/lib/CodeGen/MachineCopyPropagation.cpp
parent205fbeb54a1ad3b413a4e5f103c88f974b3ae42c (diff)
downloadllvm-ddeb9d11fee7c02f4c52831dc5d3191cc0124b3f.zip
llvm-ddeb9d11fee7c02f4c52831dc5d3191cc0124b3f.tar.gz
llvm-ddeb9d11fee7c02f4c52831dc5d3191cc0124b3f.tar.bz2
Fix for PR12090: clear def maps of aliases when visiting a copy. e.g.
%S5<def> = COPY %S0<kill> First clear def map of Q1, etc. No small test case available. llvm-svn: 151574
Diffstat (limited to 'llvm/lib/CodeGen/MachineCopyPropagation.cpp')
-rw-r--r--llvm/lib/CodeGen/MachineCopyPropagation.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
index 9ed7b73..8a9786d 100644
--- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp
+++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp
@@ -199,6 +199,11 @@ bool MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) {
SourceNoLongerAvailable(Def, SrcMap, AvailCopyMap);
// Remember Def is defined by the copy.
+ // ... Make sure to clear the def maps of aliases first.
+ for (const unsigned *AS = TRI->getAliasSet(Def); *AS; ++AS) {
+ CopyMap.erase(*AS);
+ AvailCopyMap.erase(*AS);
+ }
CopyMap[Def] = MI;
AvailCopyMap[Def] = MI;
for (const unsigned *SR = TRI->getSubRegisters(Def); *SR; ++SR) {